aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc')
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc83
1 files changed, 83 insertions, 0 deletions
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
new file mode 100644
index 00000000..4c7ea934
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
@@ -0,0 +1,83 @@
+require recipes-bsp/u-boot/u-boot-common.inc
+require recipes-bsp/u-boot/u-boot.inc
+
+DEPENDS += "bc-native dtc-native python3-setuptools-native bison-native xxd-native"
+
+require u-boot-xlnx-common.inc
+
+SYSROOT_DIRS += "/boot"
+
+BASE_DTS ?= "${@os.path.basename(d.getVar('CONFIG_DTFILE') or '').rstrip('.dtb').rstrip('.dts') or 'system-top'}"
+DTB_PATH ?= "boot/devicetree/"
+DTB_FILE_NAME ?= ""
+
+# This vairable is used for U-boot user specified dts from u-boot repo path
+# u-boot-xlnx/arch/arm/dts/versal-vck190-revA-x-ebm-01-revA.dts.
+# Note: .dts extension is not required for this variable settings.
+# Example: UBOOT_USER_SPECIFIED_DTS = "versal-vck190-revA-x-ebm-01-revA"
+UBOOT_USER_SPECIFIED_DTS ?= ""
+
+EXTRA_OEMAKE += "${@'EXT_DTB=${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_FILE_NAME}' if (d.getVar('DTB_FILE_NAME') != '' and d.getVar('UBOOT_USER_SPECIFIED_DTS') == '') else '' }"
+EXTRA_OEMAKE += "${@'DEVICE_TREE=${UBOOT_USER_SPECIFIED_DTS}' if (d.getVar('UBOOT_USER_SPECIFIED_DTS') != '') else '' }"
+
+python __anonymous () {
+ #check if there are any dtb providers
+ providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
+ if providerdtb:
+ d.appendVarFlag('do_configure', 'depends', ' virtual/dtb:do_populate_sysroot')
+ if d.getVar("DTB_FILE_NAME") is not None:
+ d.setVar('DTB_FILE_NAME', d.getVar('BASE_DTS')+ '.dtb')
+}
+
+do_configure:prepend () {
+ if [ -n "${UBOOT_USER_SPECIFIED_DTS}" && ! -f ${S}/arch/arm/dts/${UBOOT_USER_SPECIFIED_DTS}.dts ]; then
+ bbfatal "Uboot user specified dts (${UBOOT_USER_SPECIFIED_DTS}.dts) is not found in \
+the${S}/arch/arm/dts directory, you need to patch dts file to u-boot source and use this configuration. \
+For more details refer https://u-boot.readthedocs.io/en/latest/develop/devicetree/control.html#configuration "
+ fi
+}
+
+# Split u-boot into .bin and .elf packages
+# If the user just installs u-boot they get both
+PACKAGES =+ "${PN}-bin ${PN}-elf"
+RDEPENDS:${PN} = "${PN}-bin ${PN}-elf"
+ALLOW_EMPTY:${PN} = "1"
+
+SUMMARY:${PN}-bin = "${SUMMARY} - files in .bin format"
+FILES:${PN}-bin = "/boot/u-boot*.bin"
+
+SUMMARY:${PN}-elf = "${SUMMARY} - files in .elf format"
+FILES:${PN}-elf = "/boot/u-boot*.elf"
+
+require u-boot-xlnx-blob.inc
+
+UBOOTELF_NODTB_IMAGE ?= "u-boot-nodtb.elf"
+UBOOTELF_NODTB_BINARY ?= "u-boot"
+do_deploy:prepend() {
+ cd ${B}
+
+ if [ -f "${UBOOTELF_NODTB_BINARY}" ]; then
+ install ${UBOOTELF_NODTB_BINARY} ${DEPLOYDIR}/${UBOOTELF_NODTB_IMAGE}
+ fi
+
+ #following lines are from uboot-sign.bbclass, vars are defined there
+ if [ -e "${UBOOT_DTB_BINARY}" ]; then
+ if [ "${UBOOT_SIGN_ENABLE}" = "0" ]; then
+ install ${UBOOT_DTB_BINARY} ${DEPLOYDIR}/${UBOOT_DTB_IMAGE}
+ fi
+ ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY}
+ ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK}
+ fi
+ if [ -f "${UBOOT_NODTB_BINARY}" ]; then
+ install ${UBOOT_NODTB_BINARY} ${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}
+ ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK}
+ ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_BINARY}
+ fi
+
+ # In ZynqMP u-boot.dtb is generated by default but not for versal, Hence manually deploy.
+ if [ "${SOC_FAMILY}" == "versal" ]; then
+ if [ -f ${B}/arch/arm/dts/${UBOOT_USER_SPECIFIED_DTS}.dtb ]; then
+ install -Dm 0644 ${B}/arch/arm/dts/${UBOOT_USER_SPECIFIED_DTS}.dtb ${DEPLOYDIR}/u-boot.dtb
+ fi
+ fi
+}