@@ -2283,6 +2283,7 @@ N: Neal Frager <neal.frager@amd.com>
F: board/versal/
F: board/zynq/
F: board/zynqmp/
+F: boot/versal-firmware/
F: boot/zynqmp-firmware/
F: configs/versal_vck190_defconfig
F: configs/zynq_zc702_defconfig
@@ -23,6 +23,7 @@ source "boot/ti-k3-boot-firmware/Config.in"
source "boot/ti-k3-image-gen/Config.in"
source "boot/ti-k3-r5-loader/Config.in"
source "boot/uboot/Config.in"
+source "boot/versal-firmware/Config.in"
source "boot/vexpress-firmware/Config.in"
source "boot/zynqmp-firmware/Config.in"
new file mode 100644
@@ -0,0 +1,38 @@
+config BR2_TARGET_VERSAL_FIRMWARE
+ bool "versal-firmware"
+ select BR2_PACKAGE_HOST_BOOTGEN
+ select BR2_TOOLCHAIN_BARE_METAL_BUILDROOT
+ help
+ This package builds the boot firmware apps for Xilinx versal
+ boards, so that they can boot u-boot and Linux.
+
+if BR2_TARGET_VERSAL_FIRMWARE
+
+config BR2_TARGET_VERSAL_FIRMWARE_VERSION
+ string "firmware version"
+ default "xilinx_v2023.2"
+ help
+ Release version of versal firmware.
+ Only versions xilinx_v2023.2 and newer are supported.
+
+config BR2_TARGET_VERSAL_FIRMWARE_CUSTOM_CFLAGS
+ string "custom cflags"
+ help
+ Adds additional CFLAGS for building versal firmware.
+
+config BR2_TARGET_VERSAL_FIRMWARE_PDI
+ string "pdi file location"
+ default "https://github.com/Xilinx/soc-prebuilt-firmware/raw/xilinx_v2023.2/vck190-versal/vpl_gen_fixed.pdi"
+ help
+ The PDI file defines everything which is board specific for versal.
+ It gets parsed by the plm.elf during boot. To boot a custom target
+ based on versal, this should be configured to point to your Vivado
+ generated PDI file.
+
+ The location of the PDI can be either a URL for download or a file
+ in the local repository.
+
+ This config should never be undefined, so default configuration is
+ for the vck190 evaluation board.
+
+endif # BR2_TARGET_VERSAL_FIRMWARE
new file mode 100644
@@ -0,0 +1,52 @@
+################################################################################
+#
+# versal-firmware
+#
+################################################################################
+
+VERSAL_FIRMWARE_VERSION = $(call qstrip,$(BR2_TARGET_VERSAL_FIRMWARE_VERSION))
+VERSAL_FIRMWARE_SITE = \
+ $(call github,Xilinx,embeddedsw,$(VERSAL_FIRMWARE_VERSION))
+VERSAL_FIRMWARE_LICENSE = MIT
+VERSAL_FIRMWARE_LICENSE_FILES = license.txt
+VERSAL_FIRMWARE_INSTALL_IMAGES = YES
+VERSAL_FIRMWARE_INSTALL_TARGET = NO
+VERSAL_FIRMWARE_DEPENDENCIES = toolchain-bare-metal-buildroot
+
+CUSTOM_CFLAGS = $(call qstrip,$(BR2_TARGET_VERSAL_FIRMWARE_CUSTOM_CFLAGS))
+VERSAL_FIRMWARE_CFLAGS = "-Os -flto -ffat-lto-objects $(CUSTOM_CFLAGS)"
+
+VERSAL_FIRMWARE_PDI = $(call qstrip,$(BR2_TARGET_VERSAL_FIRMWARE_PDI))
+
+ifneq ($(findstring ://,$(VERSAL_FIRMWARE_PDI)),)
+VERSAL_FIRMWARE_EXTRA_DOWNLOADS = $(VERSAL_FIRMWARE_PDI)
+BR_NO_CHECK_HASH_FOR += $(notdir $(VERSAL_FIRMWARE_PDI))
+VERSAL_PDI = $(VERSAL_FIRMWARE_DL_DIR)/$(notdir $(VERSAL_FIRMWARE_PDI))
+else ifneq ($(VERSAL_FIRMWARE_PDI),)
+VERSAL_PDI = $(shell readlink -f $(VERSAL_FIRMWARE_PDI))
+endif #VERSAL_FIRMWARE_PDI
+
+define VERSAL_FIRMWARE_BUILD_CMDS
+ $(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=$(VERSAL_FIRMWARE_CFLAGS)
+
+ $(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=$(VERSAL_FIRMWARE_CFLAGS)
+endef
+
+VERSAL_PLM = $(@D)/lib/sw_apps/versal_plm/src/versal/plm.elf
+VERSAL_PSMFW = $(@D)/lib/sw_apps/versal_psmfw/src/versal/psmfw.elf
+
+define VERSAL_FIRMWARE_INSTALL_IMAGES_CMDS
+ $(INSTALL) -D -m 0755 $(VERSAL_PLM) $(BINARIES_DIR)/plm.elf
+ $(INSTALL) -D -m 0755 $(VERSAL_PSMFW) $(BINARIES_DIR)/psmfw.elf
+ $(INSTALL) -D -m 0755 $(VERSAL_PDI) $(BINARIES_DIR)/vpl_gen_fixed.pdi
+endef
+
+$(eval $(generic-package))
@@ -2,6 +2,7 @@ if BR2_TOOLCHAIN_BARE_METAL_BUILDROOT
config BR2_TOOLCHAIN_BARE_METAL_BUILDROOT_ARCH
string "architecture tuple"
+ default "microblazeel-xilinx-elf" if BR2_TARGET_VERSAL_FIRMWARE
default "microblazeel-xilinx-elf" if BR2_TARGET_ZYNQMP_FIRMWARE
help
This option allows to define the architecture tuple for the
This patch adds a new boot firmware to buildroot for building the versal plm and psmfw. It requires the toolchain-bare-metal package that includes a bare-metal binutils, gcc and newlib which can be built for the microblaze architecture. Signed-off-by: Neal Frager <neal.frager@amd.com> --- V4->V5: - automatically select bootgen as a needed tool - reduce all lines to <80 chars - add help for PDI file location which could be URL or local V5->V6: - migrated to toolchain-bare-metal-buildroot V6->V7: - removed patch numbers - changed dependency to toolchain-bare-metal-buildroot - removed hash since version is configurable V7->V9: - no changes V9->V10: - removed patches for supporting versions older than xilinx_v2023.2 V10-V11: - set default BR2_TOOLCHAIN_BARE_METAL_BUILDROOT_ARCH to "microblazeel-xilinx-elf" to avoid stand-alone build failure --- DEVELOPERS | 1 + boot/Config.in | 1 + boot/versal-firmware/Config.in | 38 ++++++++++++++ boot/versal-firmware/versal-firmware.mk | 52 +++++++++++++++++++ .../toolchain-bare-metal-buildroot/Config.in | 1 + 5 files changed, 93 insertions(+) create mode 100644 boot/versal-firmware/Config.in create mode 100644 boot/versal-firmware/versal-firmware.mk