aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bb
blob: a7370674a4d8185165c4376db71ccf49df01eef4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
SUMMARY = "Device Trees for BSPs"
DESCRIPTION = "Device Tree generation and packaging for BSP Device Trees."
SECTION = "bsp"

LICENSE = "MIT & GPLv2"
LIC_FILES_CHKSUM = " \
		file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
		file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 \
		"

inherit deploy kernel-arch

INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "dtc-native"

COMPATIBLE_MACHINE ?= "^$"

PACKAGE_ARCH = "${MACHINE_ARCH}"

FILES_${PN} = "/boot/devicetree/*.dtb /boot/devicetree/*.dtbo"

S = "${WORKDIR}"
B = "${WORKDIR}/build"

SYSROOT_DIRS += "/boot/devicetree"

# By default provide the current kernel arch's boot/dts and boot/dts/include.
KERNEL_DTS_INCLUDE ??= " \
		${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts \
		${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts/include \
		"
# For arm64/zynqmp the xilinx specific includes are subdired under a vendor directory.
KERNEL_DTS_INCLUDE_append_zynqmp = " \
		${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts/xilinx \
		"

DTS_FILES_PATH ?= "${S}"
DTS_INCLUDE ?= "${DTS_FILES_PATH} ${KERNEL_DTS_INCLUDE}"

DT_PADDING_SIZE ?= "0x3000"
DEVICETREE_FLAGS ?= " \
		-R 8 -p ${DT_PADDING_SIZE} -b 0 \
		${@' '.join(['-i %s' % i for i in d.getVar('DTS_INCLUDE', True).split()])} \
               "
DEVICETREE_OFLAGS ?= "-@ -H epapr"
DEVICETREE_PP_FLAGS ?= " \
		-nostdinc -Ulinux -x assembler-with-cpp \
		${@' '.join(['-I%s' % i for i in d.getVar('DTS_INCLUDE', True).split()])} \
		"

python () {
    # auto add dependency on kernel tree
    if d.getVar("KERNEL_DTS_INCLUDE") != "":
        d.appendVarFlag("do_compile", "depends", " virtual/kernel:do_configure")
}

do_compile() {
	for DTS_FILE in ${DTS_FILES_PATH}/*.dts; do
		DTS_NAME=`basename -s .dts ${DTS_FILE}`
		${BUILD_CPP} ${DEVICETREE_PP_FLAGS} -o `basename ${DTS_FILE}`.pp ${DTS_FILE}

		# for now use the existance of the '/plugin/' tag to detect overlays
		if grep -qse "/plugin/;" `basename ${DTS_FILE}`.pp; then
			dtc ${DEVICETREE_OFLAGS} -I dts -O dtb ${DEVICETREE_FLAGS} -o ${DTS_NAME}.dtbo `basename ${DTS_FILE}`.pp
		else
			dtc -I dts -O dtb ${DEVICETREE_FLAGS} -o ${DTS_NAME}.dtb `basename ${DTS_FILE}`.pp
		fi
	done
}

do_install() {
	for DTB_FILE in `ls *.dtb *.dtbo`; do
		install -Dm 0644 ${B}/${DTB_FILE} ${D}/boot/devicetree/${DTB_FILE}
	done
}

do_deploy() {
	for DTB_FILE in `ls *.dtb *.dtbo`; do
		install -Dm 0644 ${B}/${DTB_FILE} ${DEPLOYDIR}/${DTB_FILE}
	done
}
addtask deploy before do_build after do_install