boot/xilinx-embeddedsw: new boot package

This patch adds a new boot package to Buildroot for building boot firmware
applications from the https://github.com/Xilinx/embeddedsw repo.

If a user chooses to build a boot firmware application, it will not be
installed by the xilinx-prebuilt package since it will come from the
xilinx-embeddedsw package.  In this way, users can mix and match applications
to be built by the xilinx-embeddedsw package and applications to be copied
from the xilinx-prebuilt package.  This is necessary for the versal platform
because the pdi file can only be built by AMD Vivado.

Support for additional applications in the https://github.com/Xilinx/embeddedsw
repo can always be added to this package as needed or requested.

The xilinx-embeddedsw package replaces previous solutions including
zynqmp-firmware, versal-firmware and xilinx-source.

Signed-off-by: Neal Frager <neal.frager@amd.com>
Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
[Luca: Tested on Kria KV260 starter kit]
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Neal Frager
2025-01-21 10:22:19 +00:00
committed by Julien Olivain
parent bfd91965dd
commit 1cbd222150
7 changed files with 181 additions and 3 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,5 @@
# Locally calculated
sha256 550ba0b206848adb0085bc1ca5a6b6731681335c92912afb4a6a8dbb4c489a0c xilinx-embeddedsw-xilinx_v2024.2.tar.gz
# Locally calculated
sha256 12bf8dad928a59644758825758b0c9d42d54478f5b04c8beb714d6f792450849 license.txt

View File

@@ -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))

View File

@@ -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

View File

@@ -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))