aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb')
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb284
1 files changed, 284 insertions, 0 deletions
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb
new file mode 100644
index 00000000..ac391c3c
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb
@@ -0,0 +1,284 @@
+SUMMARY = "U-boot boot scripts for Xilinx devices"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+DEPENDS = "u-boot-mkimage-native"
+
+inherit deploy image-wic-utils
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+COMPATIBLE_MACHINE ?= "^$"
+COMPATIBLE_MACHINE:zynqmp = "zynqmp"
+COMPATIBLE_MACHINE:zynq = "zynq"
+COMPATIBLE_MACHINE:versal = "versal"
+COMPATIBLE_MACHINE:microblaze = "microblaze"
+
+KERNELDT = "${@os.path.basename(d.getVar('KERNEL_DEVICETREE').split(' ')[0]) if d.getVar('KERNEL_DEVICETREE') else ''}"
+DEVICE_TREE_NAME ?= "${@bb.utils.contains('PREFERRED_PROVIDER_virtual/dtb', 'device-tree', 'system.dtb', d.getVar('KERNELDT'), d)}"
+#Need to copy a rootfs.cpio.gz.u-boot into boot partition
+RAMDISK_IMAGE ?= "rootfs.cpio.gz.u-boot"
+RAMDISK_IMAGE1 ?= "ramdisk.cpio.gz.u-boot"
+
+PXERAMDISK_IMAGE ?= "${@'${RAMDISK_IMAGE1}' if d.getVar('INITRAMFS_IMAGE') and d.getVar('INITRAMFS_IMAGE').find('initramfs') > 0 else '${RAMDISK_IMAGE}'}"
+
+KERNEL_BOOTCMD:zynqmp ?= "booti"
+KERNEL_BOOTCMD:zynq ?= "bootm"
+KERNEL_BOOTCMD:versal ?= "booti"
+KERNEL_BOOTCMD:microblaze ?= "bootm"
+
+BOOTMODE ??= "generic"
+BOOTFILE_EXT ?= ""
+
+#Make this value to "1" to skip appending base address to ddr offsets.
+SKIP_APPEND_BASEADDR ?= "0"
+
+DDR_BASEADDR ?= "0x0"
+DDR_BASEADDR:microblaze ?= "0x80000000"
+PRE_BOOTENV ?= ""
+
+SRC_URI = " \
+ file://boot.cmd.sd.zynq \
+ file://boot.cmd.sd.zynqmp \
+ file://boot.cmd.sd.versal \
+ file://boot.cmd.qspi.versal \
+ file://boot.cmd.generic \
+ file://boot.cmd.generic.root \
+ file://boot.cmd.ubifs \
+ file://pxeboot.pxe \
+ "
+
+# Even thought we don't create a package, make sure this is unique to the machine
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+inherit image-artifact-names
+UENV_TEXTFILE ?= "uEnv.txt"
+UENV_MMC_OFFSET:zynqmp ??= "0x200000"
+UENV_MMC_OFFSET:zynq ??= "0x2080000"
+UENV_MMC_OFFSET:versal ??= "0x200000"
+UENV_MMC_OFFSET:microblaze ??= "0x0"
+
+UENV_MMC_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('UENV_MMC_OFFSET'))}"
+
+UBOOTSCR_BASE_NAME ?= "${PN}-${PKGE}-${PKGV}-${PKGR}${IMAGE_VERSION_SUFFIX}"
+UBOOTPXE_CONFIG ?= "pxelinux.cfg"
+UBOOTPXE_CONFIG_NAME = "${UBOOTPXE_CONFIG}${IMAGE_VERSION_SUFFIX}"
+
+DEVICETREE_ADDRESS ?= "${@append_baseaddr(d,d.getVar('DEVICETREE_OFFSET'))}"
+
+DEVICETREE_OFFSET:microblaze ??= "0x1e00000"
+DEVICETREE_OFFSET:zynqmp ??= "0x100000"
+DEVICETREE_OFFSET:zynq ??= "0x100000"
+DEVICETREE_OFFSET:versal ??= "0x1000"
+
+DEVICETREE_OVERLAY_OFFSET:microblaze ??= "0x1e00000"
+DEVICETREE_OVERLAY_OFFSET:zynqmp ??= "0x100000"
+DEVICETREE_OVERLAY_OFFSET:zynq ??= "0x100000"
+DEVICETREE_OVERLAY_OFFSET:versal ??= "0x1000"
+DEVICETREE_OVERLAY_PADSIZE ??= "0xf00000"
+
+DEVICETREE_OVERLAY_ADDRESS ?= "${@hex(int(append_baseaddr(d,d.getVar('DEVICETREE_OVERLAY_OFFSET')),16) \
+ + int(d.getVar('DEVICETREE_OVERLAY_PADSIZE'),16))}"
+
+KERNEL_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('KERNEL_OFFSET'))}"
+
+KERNEL_OFFSET:microblaze ??= "0x0"
+KERNEL_OFFSET:zynqmp ??= "0x200000"
+KERNEL_OFFSET:zynq ??= "0x200000"
+KERNEL_OFFSET:versal ??= "0x200000"
+
+KERNEL_IMAGE ?= "${KERNEL_IMAGETYPE}"
+
+RAMDISK_IMAGE_ADDRESS ?= "${@append_baseaddr(d,d.getVar('RAMDISK_OFFSET'))}"
+
+RAMDISK_OFFSET:microblaze ??= "0x2e00000"
+RAMDISK_OFFSET:zynq ??= "0x4000000"
+RAMDISK_OFFSET:zynqmp ??= "0x4000000"
+RAMDISK_OFFSET:versal ??= "0x4000000"
+
+FIT_IMAGE_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('FIT_IMAGE_OFFSET'))}"
+FIT_IMAGE_OFFSET ??= "0x10000000"
+FIT_IMAGE ?= "image.ub"
+
+## Below offsets and sizes are based on 32MB QSPI Memory for zynq
+## For MB
+## Load boot.scr at 0xFC0000 -> 15MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET:microblaze ??= "0xBC0000"
+QSPI_KERNEL_SIZE:microblaze ??= "0x500000"
+QSPI_RAMDISK_SIZE:microblaze ??= "0xA00000"
+QSPI_RAMDISK_SIZE:microblaze ??= "0x4000000"
+
+## For zynq
+## Load boot.scr at 0xFC0000 -> 15MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET:zynq ??= "0xA00000"
+QSPI_RAMDISK_OFFSET:zynq ??= "0x1000000"
+
+NAND_KERNEL_OFFSET:zynq ??= "0x1000000"
+NAND_RAMDISK_OFFSET:zynq ??= "0x4600000"
+
+QSPI_KERNEL_SIZE:zynq ??= "0x600000"
+QSPI_RAMDISK_SIZE:zynq ??= "0xF80000"
+
+NAND_KERNEL_SIZE ??= "0x3200000"
+NAND_RAMDISK_SIZE ??= "0x3200000"
+
+## Below offsets and sizes are based on 128MB QSPI Memory for zynqmp/versal
+## For zynqMP
+## Load boot.scr at 0x3E80000 -> 62MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET ??= "0xF00000"
+QSPI_KERNEL_OFFSET:zynqmpdr ??= "0x3F00000"
+QSPI_RAMDISK_OFFSET ??= "0x4000000"
+QSPI_RAMDISK_OFFSET:zynqmpdr ??= "0x5D00000"
+
+NAND_KERNEL_OFFSET:zynqmp ??= "0x4100000"
+NAND_RAMDISK_OFFSET:zynqmp ??= "0x7800000"
+
+QSPI_KERNEL_SIZE:zynqmp ??= "0x1D00000"
+QSPI_RAMDISK_SIZE ??= "0x4000000"
+QSPI_RAMDISK_SIZE:zynqmpdr ??= "0x1D00000"
+
+## For versal
+## Load boot.scr at 0x7F80000 -> 127MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET:versal ??= "0xF00000"
+QSPI_RAMDISK_OFFSET:versal ??= "0x2E00000"
+
+NAND_KERNEL_OFFSET:versal ??= "0x4100000"
+NAND_RAMDISK_OFFSET:versal ??= "0x8200000"
+
+QSPI_KERNEL_SIZE:versal ??= "0x1D00000"
+QSPI_RAMDISK_SIZE:versal ??= "0x4000000"
+
+QSPI_KERNEL_IMAGE:microblaze ?= "image.ub"
+QSPI_KERNEL_IMAGE:zynq ?= "image.ub"
+QSPI_KERNEL_IMAGE:zynqmp ?= "image.ub"
+QSPI_KERNEL_IMAGE:versal ?= "image.ub"
+
+NAND_KERNEL_IMAGE ?= "image.ub"
+
+QSPI_FIT_IMAGE_OFFSET ??= "0xF40000"
+QSPI_FIT_IMAGE_OFFSET:zynqmpdr ??= "0x3F80000"
+QSPI_FIT_IMAGE_OFFSET:zynq ??= "0xA80000"
+QSPI_FIT_IMAGE_OFFSET:microblaze ??= "0xC00000"
+
+QSPI_FIT_IMAGE_SIZE ??= "0x6400000"
+QSPI_FIT_IMAGE_SIZE:zynqmpdr ??= "0x3F00000"
+QSPI_FIT_IMAGE_SIZE:zynq ??= "0x1500000"
+QSPI_FIT_IMAGE_SIZE:microblaze ??= "0xF00000"
+
+NAND_FIT_IMAGE_OFFSET ??= "0x4180000"
+NAND_FIT_IMAGE_OFFSET:zynq ??= "0x1080000"
+NAND_FIT_IMAGE_SIZE ??= "0x6400000"
+
+# Add variables as addendum.
+SCRIPT_SED_ADDENDUM = ""
+
+# Default to booting with the rootfs device being partition 2 for SD/eMMC
+PARTNUM ?= "2"
+
+# Set Kernel root filesystem parameter for SD/eMMC boot
+# Bootdev will automatically be set to 'sda' or 'mmcblkXp'
+KERNEL_ROOT_SD ?= "root=/dev/\${bootdev}${PARTNUM} ro rootwait"
+
+# Set Kernel root filesystem parameter for JTAG/QSPI/OSPI/NAND(using RAMDISK) boot
+KERNEL_ROOT_RAMDISK ?= "root=/dev/ram0 rw"
+
+# Append the kernel command line
+KERNEL_COMMAND_APPEND ?= ""
+
+BITSTREAM_LOAD_ADDRESS ?= "0x100000"
+
+do_configure[noexec] = "1"
+
+def append_baseaddr(d,offset):
+ skip_append = d.getVar('SKIP_APPEND_BASEADDR') or ""
+ if skip_append == "1":
+ return offset
+ if offset.startswith('$'):
+ # If offset startswith '$' Assuming as uboot env variable.
+ return offset
+ import subprocess
+ baseaddr = d.getVar('DDR_BASEADDR') or "0x0"
+ subcmd = "$((%s+%s));" % (baseaddr,offset)
+ cmd = "printf '0x%08x' " + str(subcmd)
+ output = subprocess.check_output(cmd, shell=True).decode("utf-8")
+ return output
+
+def get_bitstream_load_type(d):
+ if boot_files_bitstream(d)[1] :
+ return "loadb"
+ else:
+ return "load"
+
+do_compile() {
+ sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
+ -e 's/@@KERNEL_LOAD_ADDRESS@@/${KERNEL_LOAD_ADDRESS}/' \
+ -e 's/@@DEVICE_TREE_NAME@@/${DEVICE_TREE_NAME}/' \
+ -e 's/@@DEVICETREE_ADDRESS@@/${DEVICETREE_ADDRESS}/' \
+ -e 's/@@DEVICETREE_OVERLAY_ADDRESS@@/${DEVICETREE_OVERLAY_ADDRESS}/' \
+ -e 's/@@RAMDISK_IMAGE@@/${RAMDISK_IMAGE}/' \
+ -e 's/@@RAMDISK_IMAGE_ADDRESS@@/${RAMDISK_IMAGE_ADDRESS}/' \
+ -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' \
+ -e 's/@@SDBOOTDEV@@/${SDBOOTDEV}/' \
+ -e 's/@@BITSTREAM@@/${@boot_files_bitstream(d)[0]}/g' \
+ -e 's/@@BITSTREAM_LOAD_ADDRESS@@/${BITSTREAM_LOAD_ADDRESS}/g' \
+ -e 's/@@BITSTREAM_IMAGE@@/${@boot_files_bitstream(d)[0]}/g' \
+ -e 's/@@BITSTREAM_LOAD_TYPE@@/${@get_bitstream_load_type(d)}/g' \
+ -e 's/@@QSPI_KERNEL_OFFSET@@/${QSPI_KERNEL_OFFSET}/' \
+ -e 's/@@NAND_KERNEL_OFFSET@@/${NAND_KERNEL_OFFSET}/' \
+ -e 's/@@QSPI_KERNEL_SIZE@@/${QSPI_KERNEL_SIZE}/' \
+ -e 's/@@NAND_KERNEL_SIZE@@/${NAND_KERNEL_SIZE}/' \
+ -e 's/@@QSPI_RAMDISK_OFFSET@@/${QSPI_RAMDISK_OFFSET}/' \
+ -e 's/@@NAND_RAMDISK_OFFSET@@/${NAND_RAMDISK_OFFSET}/' \
+ -e 's/@@QSPI_RAMDISK_SIZE@@/${QSPI_RAMDISK_SIZE}/' \
+ -e 's/@@NAND_RAMDISK_SIZE@@/${NAND_RAMDISK_SIZE}/' \
+ -e 's/@@KERNEL_IMAGE@@/${KERNEL_IMAGE}/' \
+ -e 's/@@QSPI_KERNEL_IMAGE@@/${QSPI_KERNEL_IMAGE}/' \
+ -e 's/@@NAND_KERNEL_IMAGE@@/${NAND_KERNEL_IMAGE}/' \
+ -e 's/@@FIT_IMAGE_LOAD_ADDRESS@@/${FIT_IMAGE_LOAD_ADDRESS}/' \
+ -e 's/@@QSPI_FIT_IMAGE_OFFSET@@/${QSPI_FIT_IMAGE_OFFSET}/' \
+ -e 's/@@QSPI_FIT_IMAGE_SIZE@@/${QSPI_FIT_IMAGE_SIZE}/' \
+ -e 's/@@NAND_FIT_IMAGE_OFFSET@@/${NAND_FIT_IMAGE_OFFSET}/' \
+ -e 's/@@NAND_FIT_IMAGE_SIZE@@/${NAND_FIT_IMAGE_SIZE}/' \
+ -e 's/@@FIT_IMAGE@@/${FIT_IMAGE}/' \
+ -e 's/@@PRE_BOOTENV@@/${PRE_BOOTENV}/' \
+ -e 's/@@UENV_MMC_LOAD_ADDRESS@@/${UENV_MMC_LOAD_ADDRESS}/' \
+ -e 's/@@UENV_TEXTFILE@@/${UENV_TEXTFILE}/' \
+ -e 's/@@RAMDISK_IMAGE1@@/${RAMDISK_IMAGE1}/' \
+ -e 's/@@PARTNUM@@/${PARTNUM}/' \
+ -e 's:@@KERNEL_ROOT_SD@@:${KERNEL_ROOT_SD}:' \
+ -e 's:@@KERNEL_ROOT_RAMDISK@@:${KERNEL_ROOT_RAMDISK}:' \
+ -e 's:@@KERNEL_COMMAND_APPEND@@:${KERNEL_COMMAND_APPEND}:' \
+ ${SCRIPT_SED_ADDENDUM} \
+ "${WORKDIR}/boot.cmd.${BOOTMODE}${BOOTFILE_EXT}" > "${WORKDIR}/boot.cmd"
+
+ mkimage -A arm -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" boot.scr
+
+ sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
+ -e 's/@@DEVICE_TREE_NAME@@/${DEVICE_TREE_NAME}/' \
+ -e 's/@@RAMDISK_IMAGE@@/${PXERAMDISK_IMAGE}/' \
+ "${WORKDIR}/pxeboot.pxe" > "pxeboot.pxe"
+}
+
+do_install() {
+ install -d ${D}/boot
+ install -m 0644 boot.scr ${D}/boot/${UBOOTSCR_BASE_NAME}.scr
+ install -m 0644 boot.scr ${D}/boot/
+ install -d ${D}/boot/pxeboot/${UBOOTPXE_CONFIG_NAME}
+ install -m 0644 pxeboot.pxe ${D}/boot/pxeboot/${UBOOTPXE_CONFIG_NAME}/default
+ install -d ${D}/boot/${UBOOTPXE_CONFIG}/
+ install -m 0644 pxeboot.pxe ${D}/boot/${UBOOTPXE_CONFIG}/default
+}
+
+FILES:${PN} = "/boot/*"
+
+do_deploy() {
+ install -d ${DEPLOYDIR}
+ install -m 0644 boot.scr ${DEPLOYDIR}/${UBOOTSCR_BASE_NAME}.scr
+ install -m 0644 boot.scr ${DEPLOYDIR}/
+ install -d ${DEPLOYDIR}/pxeboot/${UBOOTPXE_CONFIG_NAME}
+ install -m 0644 pxeboot.pxe ${DEPLOYDIR}/pxeboot/${UBOOTPXE_CONFIG_NAME}/default
+ install -d ${DEPLOYDIR}/${UBOOTPXE_CONFIG}/
+ install -m 0644 pxeboot.pxe ${DEPLOYDIR}/${UBOOTPXE_CONFIG}/default
+}
+
+addtask do_deploy after do_compile before do_build