Index: head/share/mk/bsd.own.mk =================================================================== --- head/share/mk/bsd.own.mk +++ head/share/mk/bsd.own.mk @@ -146,6 +146,7 @@ KMODGRP?= ${BINGRP} KMODMODE?= ${BINMODE} DTBDIR?= /boot/dtb +DTBODIR?= /boot/dtb/overlays DTBOWN?= root DTBGRP?= wheel DTBMODE?= 444 Index: head/sys/arm/conf/GENERIC =================================================================== --- head/sys/arm/conf/GENERIC +++ head/sys/arm/conf/GENERIC @@ -246,4 +246,4 @@ # Flattened Device Tree options FDT # Configure using FDT/DTB data -makeoptions MODULES_EXTRA="dtb/allwinner dtb/am335x dtb/imx6 dtb/nvidia dtb/rpi dtb/zynq dtb/omap4" +makeoptions MODULES_EXTRA="dtb/allwinner dtb/am335x dtb/imx6 dtb/nvidia dtb/rpi dtb/zynq dtb/omap4 dtb/overlays" Index: head/sys/conf/dtb.mk =================================================================== --- head/sys/conf/dtb.mk +++ head/sys/conf/dtb.mk @@ -45,13 +45,14 @@ .error "can't find kernel source tree" .endif -.SUFFIXES: .dtb .dts +.SUFFIXES: .dtb .dts .dtbo .dtso -.PATH: ${SYSDIR}/gnu/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE} +.PATH: ${SYSDIR}/gnu/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE} ${SYSDIR}/dts/${MACHINE}/overlays DTB=${DTS:R:S/$/.dtb/} +DTBO=${DTSO:R:S/$/.dtbo/} -all: ${DTB} +all: ${DTB} ${DTBO} .if defined(DTS) .export DTC @@ -63,6 +64,16 @@ .endfor .endif +.if defined(DTSO) +.export DTC +.for _dtso in ${DTSO} +${_dtso:R:S/$/.dtbo/}: ${_dtso} ${OP_META} + @echo Generating ${.TARGET} from ${_dtso} + @${SYSDIR}/tools/fdt/make_dtbo.sh ${SYSDIR} overlays/${_dtso} ${.OBJDIR} +CLEANFILES+=${_dtso:R:S/$/.dtbo/} +.endfor +.endif + .if !target(install) .if !target(realinstall) realinstall: _dtbinstall @@ -75,6 +86,11 @@ .for _dtb in ${DTB} ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ ${_INSTALLFLAGS} ${_dtb} ${DESTDIR}${DTBDIR}/ +.endfor + test -d ${DESTDIR}${DTBODIR} || ${INSTALL} -d -o ${DTBOWN} -g ${DTBGRP} ${DESTDIR}${DTBODIR} +.for _dtbo in ${DTBO} + ${INSTALL} -o ${DTBOWN} -g ${DTBGRP} -m ${DTBMODE} \ + ${_INSTALLFLAGS} ${_dtbo} ${DESTDIR}${DTBODIR}/ .endfor .endif # !target(realinstall) .endif # !target(install) Index: head/sys/dts/Makefile.inc =================================================================== --- head/sys/dts/Makefile.inc +++ head/sys/dts/Makefile.inc @@ -6,5 +6,8 @@ .for dts in ${DTS} @env MACHINE=`basename ${.CURDIR}` ${SYSDIR}/tools/fdt/make_dtb.sh ${SYSDIR} ${dts} /tmp -.endfor +test-dtso: +.for dtso in ${DTSO} + @env MACHINE=`basename ${.CURDIR}` ${SYSDIR}/tools/fdt/make_dtbo.sh ${SYSDIR} ${dtso} /tmp +.endfor Index: head/sys/dts/arm/overlays/Makefile =================================================================== --- head/sys/dts/arm/overlays/Makefile +++ head/sys/dts/arm/overlays/Makefile @@ -0,0 +1,7 @@ +# $FreeBSD$ + +DTSO!=ls *.dtso + +all: test-dtso + +.include Index: head/sys/dts/arm/overlays/sun8i-h3-sid.dtso =================================================================== --- head/sys/dts/arm/overlays/sun8i-h3-sid.dtso +++ head/sys/dts/arm/overlays/sun8i-h3-sid.dtso @@ -0,0 +1,18 @@ +/dts-v1/; +/plugin/; + +/ { + compatible = "allwinner,sun8i-h3"; + + fragment@0 { + target-path = "/soc"; + + __overlay__ { + sid: eeprom@1c14000 { + compatible = "allwinner,sun8i-h3-sid"; + reg = <0x1c14000 0x400>; + status = "okay"; + }; + }; + }; +}; Index: head/sys/modules/dtb/overlays/Makefile =================================================================== --- head/sys/modules/dtb/overlays/Makefile +++ head/sys/modules/dtb/overlays/Makefile @@ -0,0 +1,5 @@ +# $FreeBSD$ +# All the dtso files +DTSO= sun8i-h3-sid.dtso + +.include Index: head/sys/tools/fdt/make_dtbo.sh =================================================================== --- head/sys/tools/fdt/make_dtbo.sh +++ head/sys/tools/fdt/make_dtbo.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# $FreeBSD$ + +# Script generates dtbo file ($3) from dtso source ($2) in build tree S ($1) +S=$1 +dtso="$2" +dtbo_path=$3 + +if [ -z "$dtso" ]; then + echo "No DTS overlays specified" + exit 1 +fi + +if [ -z "${MACHINE}" ]; then + MACHINE=$(uname -m) +fi + +: ${DTC:=dtc} + +for d in ${dtso}; do + dtb=${dtbo_path}/`basename $d .dtso`.dtbo + echo "converting $d -> $dtb" + cpp -P -x assembler-with-cpp -I $S/gnu/dts/include -I $S/dts/${MACHINE} -I $S/gnu/dts/${MACHINE} -include $d /dev/null | + ${DTC} -@ -O dtb -o $dtb -i $S/dts/${MACHINE} -i $S/gnu/dts/${MACHINE} +done