Change the include so that is adds a task for platform-init setup when required. This avoids the need to modify the do_configure task which prevents changes to its taskhash and avoids issues with taskhash modification when the meta-xilinx layer is added but no configuration is changed or used from it.
Improve the logic around how configs are detected such that UBOOT_MACHINE can specify either the make target or the defconfig file name (e.g. *_config or *_defconfig). U-Boot and u-boot.inc accept both targets as valid configs since the values are passed directory to U-Boot's kbuild/kconfig. This change also drops compatibility with the older variable names HAS_PS7INIT and FORCE_PS7INIT. Additionally the 'virtual/boot-bin' provide logic was broken in most cases since SPL_BINARY = "spl/boot.bin", so remove it. Clean up use of tabs in python. Signed-off-by: Nathan Rossi <[email protected]> --- recipes-bsp/u-boot/u-boot-spl-zynq-init.inc | 69 +++++++++++++++-------------- recipes-bsp/u-boot/u-boot-xlnx-dev.bb | 2 +- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc b/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc index 6fd6559d19..be92de5c47 100644 --- a/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc +++ b/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc @@ -1,48 +1,49 @@ inherit xilinx-platform-init +FORCE_PLATFORM_INIT[doc] = "This variable is used to force the overriding of all platform init files in u-boot source." + PLATFORM_BOARD_DIR ?= "" PLATFORM_BOARD_DIR_zynq = "board/xilinx/zynq" PLATFORM_BOARD_DIR_zynqmp = "board/xilinx/zynqmp" -do_configure_prepend() { - if ${@bb.utils.contains('DEPENDS', 'virtual/xilinx-platform-init', 'true', 'false', d)}; then - for f in ${PLATFORM_INIT_FILES}; do - if [ -d "${S}/${PLATFORM_BOARD_DIR}/custom_hw_platform" ]; then - cp ${PLATFORM_INIT_STAGE_DIR}/$f ${S}/${PLATFORM_BOARD_DIR}/custom_hw_platform/ - else - cp ${PLATFORM_INIT_STAGE_DIR}/$f ${S}/${PLATFORM_BOARD_DIR}/ - fi - # Newer u-boot sources use the init files in a sub directory named - # based on the name of the device tree. This is not straight - # forward to detect. Instead of detecting just overwrite all the - # platform init files so that the correct one is always used. This - # shotgun approach only works due to this recipe being machine arch - # specific. Do this overwrite un-conditionally as there is no - # guarantees that the chosen board config does not have the device - # tree config set. - for i in ${S}/${PLATFORM_BOARD_DIR}/*/; do - [ -d $i ] && cp ${PLATFORM_INIT_STAGE_DIR}/$f $i - done +do_zynq_platform_init() { + for f in ${PLATFORM_INIT_FILES}; do + if [ -d "${S}/${PLATFORM_BOARD_DIR}/custom_hw_platform" ]; then + cp ${PLATFORM_INIT_STAGE_DIR}/$f ${S}/${PLATFORM_BOARD_DIR}/custom_hw_platform/ + else + cp ${PLATFORM_INIT_STAGE_DIR}/$f ${S}/${PLATFORM_BOARD_DIR}/ + fi + # Newer u-boot sources use the init files in a sub directory named + # based on the name of the device tree. This is not straight forward to + # detect. Instead of detecting just overwrite all the platform init + # files so that the correct one is always used. This shotgun approach + # only works due to this recipe being machine arch specific. Do this + # overwrite un-conditionally as there is no guarantees that the chosen + # board config does not have the device tree config set. + for i in ${S}/${PLATFORM_BOARD_DIR}/*/; do + [ -d $i ] && cp ${PLATFORM_INIT_STAGE_DIR}/$f $i done - fi + done } -FORCE_PLATFORM_INIT[doc] = "This variable is used to force the overriding of all platform init files in u-boot source." - python () { - hasconfigs = (d.getVar("HAS_PLATFORM_INIT") or "").split() + (d.getVar("HAS_PS7INIT") or "").split() - forceoverride = (d.getVar("FORCE_PLATFORM_INIT") == "1") or (d.getVar("FORCE_PS7INIT")) + # strip the tail _config/_defconfig for better comparison + def strip_config_name(c): + for i in ["_config", "_defconfig"]: + if c.endswith(i): + return c[0:len(c) - len(i)] + return c - # Determine if target machine needs to provide a custom platform init files - if d.getVar("SOC_FAMILY") in ["zynq", "zynqmp"]: - if d.getVar("SPL_BINARY"): - # only add the dependency if u-boot doesn't already provide the platform init files - if forceoverride or not (d.getVar("UBOOT_MACHINE") in hasconfigs): - # force the dependency on a recipe that provides the platform init files - d.appendVar("DEPENDS", " virtual/xilinx-platform-init") + # Determine if target machine needs to provide a custom platform init files + if d.getVar("SPL_BINARY") and d.getVar("SOC_FAMILY") in ["zynq", "zynqmp"]: + hasconfigs = [strip_config_name(c) for c in (d.getVar("HAS_PLATFORM_INIT") or "").split()] + currentconfig = strip_config_name(d.getVar("UBOOT_MACHINE")) - if d.getVar("SPL_BINARY") == "boot.bin": - # Add this for backwards compatibility - d.setVar("PROVIDES", "%s virtual/boot-bin" % d.getVar("PROVIDES")) + # only add the dependency if u-boot doesn't already provide the platform init files + if (currentconfig not in hasconfigs) or (d.getVar("FORCE_PLATFORM_INIT") == "1"): + # force the dependency on a recipe that provides the platform init files + d.appendVar("DEPENDS", " virtual/xilinx-platform-init") + # setup task to modify platform init after unpack and before configure + bb.build.addtask("do_zynq_platform_init", "do_configure", "do_prepare_recipe_sysroot", d) } diff --git a/recipes-bsp/u-boot/u-boot-xlnx-dev.bb b/recipes-bsp/u-boot/u-boot-xlnx-dev.bb index 7653da5a4b..3e40bfa173 100644 --- a/recipes-bsp/u-boot/u-boot-xlnx-dev.bb +++ b/recipes-bsp/u-boot/u-boot-xlnx-dev.bb @@ -18,7 +18,7 @@ SRCREV ?= "${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/bootloader", "u-b PV = "${UBRANCH}-xilinx-dev+git${SRCPV}" # Newer versions of u-boot have support for these -HAS_PS7INIT ?= " \ +HAS_PLATFORM_INIT ?= " \ zynq_microzed_config \ zynq_zed_config \ zynq_zc702_config \ -- 2.15.0 -- _______________________________________________ meta-xilinx mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-xilinx
