diff --git a/DEVELOPERS b/DEVELOPERS index 059383d364..bb8866e8c5 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -2426,6 +2426,7 @@ F: board/versal/ F: board/xilinx/ F: board/zynq/ F: board/zynqmp/ +F: boot/xilinx-embeddedsw/ F: boot/xilinx-prebuilt/ F: configs/versal_vck190_defconfig F: configs/versal_vek280_defconfig diff --git a/boot/Config.in b/boot/Config.in index 5c8d0e7ee5..f167346cdf 100644 --- a/boot/Config.in +++ b/boot/Config.in @@ -19,6 +19,7 @@ source "boot/ti-k3-boot-firmware/Config.in" source "boot/ti-k3-r5-loader/Config.in" source "boot/uboot/Config.in" source "boot/vexpress-firmware/Config.in" +source "boot/xilinx-embeddedsw/Config.in" source "boot/xilinx-prebuilt/Config.in" endmenu diff --git a/boot/xilinx-embeddedsw/Config.in b/boot/xilinx-embeddedsw/Config.in new file mode 100644 index 0000000000..757ff59e35 --- /dev/null +++ b/boot/xilinx-embeddedsw/Config.in @@ -0,0 +1,68 @@ +config BR2_TARGET_XILINX_EMBEDDEDSW + bool "xilinx-embeddedsw" + depends on BR2_aarch64 + depends on BR2_TOOLCHAIN_BARE_METAL_BUILDROOT_ARCH = "microblazeel-xilinx-elf" + help + Build boot firmware applications from source for Xilinx + boards. Users can mix and match applications to be built + by xilinx-embeddedsw and applications to be copied by + xilinx-prebuilt. If a xilinx-embeddedsw application is + selected, it will be built and installed from the Xilinx + embeddedsw repo, and it will not be copied from the + xilinx-prebuilt repo. + + Applications can be found on the Xilinx embeddedsw repo: + https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps + +comment "xilinx-embeddedsw needs a bare metal toolchain for tuple microblazeel-xilinx-elf" + depends on BR2_TOOLCHAIN_BARE_METAL_BUILDROOT_ARCH != "microblazeel-xilinx-elf" + +if BR2_TARGET_XILINX_EMBEDDEDSW + +config BR2_TARGET_XILINX_EMBEDDEDSW_VERSION + string "xilinx-embeddedsw version" + default "xilinx_v2024.2" + help + Release version of Xilinx/embeddedsw. + Must be xilinx_v2023.1 or newer. + +config BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PLM + bool "versal plm" + help + Build versal plm application from Xilinx/embeddedsw repo. + If selected, the xilinx-prebuilt package will not install + the plm.elf since it will come from the xilinx-embeddedsw + package. + + https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/versal_plm + +config BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PSMFW + bool "versal psmfw" + help + Build versal psmfw application from Xilinx/embeddedsw repo. + If selected, the xilinx-prebuilt package will not install + the psmfw.elf since it will come from the xilinx-embeddedsw + package. + + https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/versal_psmfw + +config BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW + bool "zynqmp pmufw" + help + Build zynqmp pmufw application from Xilinx/embeddedsw repo. + If selected, the xilinx-prebuilt package will not install + the pmufw.elf since it will come from the xilinx-embeddedsw + package. + + https://github.com/Xilinx/embeddedsw/tree/master/lib/sw_apps/zynqmp_pmufw + +config BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW_USER_CFLAGS + string "xilinx-embeddedsw optional zynqmp_pmufw user cflags" + depends on BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW + help + Add optional cflags when building xilinx zynqmp_pmufw. + + Example cflag options can be found here: + https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_apps/zynqmp_pmufw/src/xpfw_config.h + +endif # BR2_TARGET_XILINX_EMBEDDEDSW diff --git a/boot/xilinx-embeddedsw/xilinx-embeddedsw.hash b/boot/xilinx-embeddedsw/xilinx-embeddedsw.hash new file mode 100644 index 0000000000..f9eb6f7984 --- /dev/null +++ b/boot/xilinx-embeddedsw/xilinx-embeddedsw.hash @@ -0,0 +1,5 @@ +# Locally calculated +sha256 550ba0b206848adb0085bc1ca5a6b6731681335c92912afb4a6a8dbb4c489a0c xilinx-embeddedsw-xilinx_v2024.2.tar.gz + +# Locally calculated +sha256 12bf8dad928a59644758825758b0c9d42d54478f5b04c8beb714d6f792450849 license.txt diff --git a/boot/xilinx-embeddedsw/xilinx-embeddedsw.mk b/boot/xilinx-embeddedsw/xilinx-embeddedsw.mk new file mode 100644 index 0000000000..7d4fcf8b8f --- /dev/null +++ b/boot/xilinx-embeddedsw/xilinx-embeddedsw.mk @@ -0,0 +1,80 @@ +################################################################################ +# +# xilinx-embeddedsw +# +################################################################################ + +XILINX_EMBEDDEDSW_VERSION = $(call qstrip,$(BR2_TARGET_XILINX_EMBEDDEDSW_VERSION)) +XILINX_EMBEDDEDSW_SITE = $(call github,Xilinx,embeddedsw,$(XILINX_EMBEDDEDSW_VERSION)) +XILINX_EMBEDDEDSW_LICENSE = MIT +XILINX_EMBEDDEDSW_LICENSE_FILES = license.txt +XILINX_EMBEDDEDSW_INSTALL_TARGET = NO +XILINX_EMBEDDEDSW_INSTALL_IMAGES = YES +XILINX_EMBEDDEDSW_DEPENDENCIES = toolchain-bare-metal-buildroot + +# ZYNQMP_PMUFW application allows users to add cflags +XILINX_EMBEDDEDSW_ZYNQMP_PMUFW_USER_CFLAGS = \ + $(call qstrip,$(BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW_USER_CFLAGS)) +XILINX_EMBEDDEDSW_ZYNQMP_PMUFW_CFLAGS = \ + "-Os -flto -ffat-lto-objects $(XILINX_EMBEDDEDSW_ZYNQMP_PMUFW_USER_CFLAGS)" + +XILINX_EMBEDDEDSW_CFLAGS = "-Os -flto -ffat-lto-objects" + +ifeq ($(BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PLM),y) +define XILINX_EMBEDDEDSW_BUILD_VERSAL_PLM + $(MAKE) -C $(@D)/lib/sw_apps/versal_plm/src/versal \ + COMPILER=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc \ + ARCHIVER=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc-ar \ + CC=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc \ + CFLAGS=$(XILINX_EMBEDDEDSW_CFLAGS) +endef + +define XILINX_EMBEDDEDSW_INSTALL_VERSAL_PLM + $(INSTALL) -D -m 0755 $(@D)/lib/sw_apps/versal_plm/src/versal/plm.elf \ + $(BINARIES_DIR)/plm.elf +endef +endif # BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PLM + +ifeq ($(BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PSMFW),y) +define XILINX_EMBEDDEDSW_BUILD_VERSAL_PSMFW + $(MAKE) -C $(@D)/lib/sw_apps/versal_psmfw/src/versal \ + COMPILER=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc \ + ARCHIVER=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc-ar \ + CC=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc \ + CFLAGS=$(XILINX_EMBEDDEDSW_CFLAGS) +endef + +define XILINX_EMBEDDEDSW_INSTALL_VERSAL_PSMFW + $(INSTALL) -D -m 0755 $(@D)/lib/sw_apps/versal_psmfw/src/versal/psmfw.elf \ + $(BINARIES_DIR)/psmfw.elf +endef +endif # BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PSMFW + +ifeq ($(BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW),y) +define XILINX_EMBEDDEDSW_BUILD_ZYNQMP_PMUFW + $(MAKE) -C $(@D)/lib/sw_apps/zynqmp_pmufw/src \ + COMPILER=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc \ + ARCHIVER=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc-ar \ + CC=$(HOST_DIR)/bin/microblazeel-xilinx-elf-gcc \ + CFLAGS=$(XILINX_EMBEDDEDSW_ZYNQMP_PMUFW_CFLAGS) +endef + +define XILINX_EMBEDDEDSW_INSTALL_ZYNQMP_PMUFW + $(INSTALL) -D -m 0755 $(@D)/lib/sw_apps/zynqmp_pmufw/src/executable.elf \ + $(BINARIES_DIR)/pmufw.elf +endef +endif # BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW + +define XILINX_EMBEDDEDSW_BUILD_CMDS + $(XILINX_EMBEDDEDSW_BUILD_VERSAL_PLM) + $(XILINX_EMBEDDEDSW_BUILD_VERSAL_PSMFW) + $(XILINX_EMBEDDEDSW_BUILD_ZYNQMP_PMUFW) +endef + +define XILINX_EMBEDDEDSW_INSTALL_IMAGES_CMDS + $(XILINX_EMBEDDEDSW_INSTALL_VERSAL_PLM) + $(XILINX_EMBEDDEDSW_INSTALL_VERSAL_PSMFW) + $(XILINX_EMBEDDEDSW_INSTALL_ZYNQMP_PMUFW) +endef + +$(eval $(generic-package)) diff --git a/boot/xilinx-prebuilt/Config.in b/boot/xilinx-prebuilt/Config.in index 94ef3dd111..793baa116f 100644 --- a/boot/xilinx-prebuilt/Config.in +++ b/boot/xilinx-prebuilt/Config.in @@ -4,6 +4,14 @@ config BR2_TARGET_XILINX_PREBUILT help Pre-built firmware files for Xilinx boards. + The pre-built firmware applications will only be installed + if they are not being built by the xilinx-embeddedsw + package. + + Users can mix and match applications to build with + xilinx-embeddedsw and applications to simply install with + xilinx-prebuilt. + https://github.com/Xilinx/soc-prebuilt-firmware if BR2_TARGET_XILINX_PREBUILT diff --git a/boot/xilinx-prebuilt/xilinx-prebuilt.mk b/boot/xilinx-prebuilt/xilinx-prebuilt.mk index 9f36ee7285..d0817d3cc7 100644 --- a/boot/xilinx-prebuilt/xilinx-prebuilt.mk +++ b/boot/xilinx-prebuilt/xilinx-prebuilt.mk @@ -46,23 +46,38 @@ XILINX_PREBUILT_PSMFW = $(XILINX_PREBUILT_BOARD_DIR)/psmfw.elf XILINX_PREBUILT_PDI = $(XILINX_PREBUILT_BOARD_DIR)/*.pdi endif # BR2_TARGET_XILINX_PREBUILT_VERSAL_XSA -define XILINX_PREBUILT_INSTALL +ifneq ($(BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PLM),y) +define XILINX_PREBUILT_INSTALL_VERSAL_PLM $(INSTALL) -D -m 0755 $(XILINX_PREBUILT_PLM) \ $(BINARIES_DIR)/plm.elf +endef +endif # !BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PLM + +ifneq ($(BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PSMFW),y) +define XILINX_PREBUILT_INSTALL_VERSAL_PSMFW $(INSTALL) -D -m 0755 $(XILINX_PREBUILT_PSMFW) \ $(BINARIES_DIR)/psmfw.elf +endef +endif # !BR2_TARGET_XILINX_EMBEDDEDSW_VERSAL_PSMFW + +define XILINX_PREBUILT_INSTALL_VERSAL_PDI $(INSTALL) -D -m 0755 $(XILINX_PREBUILT_PDI) \ $(BINARIES_DIR)/vpl_gen_fixed.pdi endef else # BR2_TARGET_XILINX_PREBUILT_VERSAL -define XILINX_PREBUILT_INSTALL +ifneq ($(BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW),y) +define XILINX_PREBUILT_INSTALL_ZYNQMP_PMUFW $(INSTALL) -D -m 0755 $(XILINX_PREBUILT_BOARD_DIR)/pmufw.elf \ $(BINARIES_DIR)/pmufw.elf endef +endif # !BR2_TARGET_XILINX_EMBEDDEDSW_ZYNQMP_PMUFW endif # BR2_TARGET_XILINX_PREBUILT_VERSAL define XILINX_PREBUILT_INSTALL_IMAGES_CMDS - $(XILINX_PREBUILT_INSTALL) + $(XILINX_PREBUILT_INSTALL_VERSAL_PLM) + $(XILINX_PREBUILT_INSTALL_VERSAL_PSMFW) + $(XILINX_PREBUILT_INSTALL_VERSAL_PDI) + $(XILINX_PREBUILT_INSTALL_ZYNQMP_PMUFW) endef $(eval $(generic-package))