On 6/12/25 17:32, Jerome Forissier wrote:
Add a script to help build a functional U-Boot binary for the ZynqMP
Kria KV260. Also add some documentation.

Signed-off-by: Jerome Forissier <jerome.foriss...@linaro.org>
---

  doc/board/xilinx/index.rst        |  1 +
  doc/board/xilinx/zynqmp-kv260.rst | 27 +++++++++
  tools/zynqmp_kv260_build.sh       | 43 ++++++++++++++
  tools/zynqmp_pmufw_elf_convert.py | 96 +++++++++++++++++++++++++++++++
  4 files changed, 167 insertions(+)
  create mode 100644 doc/board/xilinx/zynqmp-kv260.rst
  create mode 100755 tools/zynqmp_kv260_build.sh
  create mode 100755 tools/zynqmp_pmufw_elf_convert.py

diff --git a/doc/board/xilinx/index.rst b/doc/board/xilinx/index.rst
index 2e31fe3f3a4..3f3a85b709c 100644
--- a/doc/board/xilinx/index.rst
+++ b/doc/board/xilinx/index.rst
@@ -9,4 +9,5 @@ Xilinx
     xilinx
     zynq
     zynqmp
+   zynqmp-kv260
     zynqmp-r5
diff --git a/doc/board/xilinx/zynqmp-kv260.rst 
b/doc/board/xilinx/zynqmp-kv260.rst
new file mode 100644
index 00000000000..219bbd602e9
--- /dev/null
+++ b/doc/board/xilinx/zynqmp-kv260.rst
@@ -0,0 +1,27 @@
+.. SPDX-License-Identifier: GPL-2.0
+..  (C) Copyright 2025 Linaro Ltd.
+
+ZYNQMP KV260
+============
+
+Building
+--------
+
+To build for the KV260:
+
+   $ ./tools/zynqmp_kv260_build.sh
+
+The first invocation will fetch and build some required binaries (bl31.bin,
+pm_cfg_obj.o, pmufw.bin). Subsequently `make` can be invoked directly as
+follows:
+
+   $ export BL31=bl31.bin
+   # export CROSS_COMPILE=aarch64-linux-gnu-
+   $ make -j$(nproc) BINMAN_ALLOW_MISSING=1
+
+Flashing
+--------
+
+Press the FWUEN button on the carrier board, the press and release the RESET
+button, then release FWUEN. Connect to the embedded HTTP server and upload
+`qspi.bin`. Press and release RESET again.
diff --git a/tools/zynqmp_kv260_build.sh b/tools/zynqmp_kv260_build.sh
new file mode 100755
index 00000000000..3cf7147e3a6
--- /dev/null
+++ b/tools/zynqmp_kv260_build.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright (C) 2025 Linaro Ltd.
+
+set -ex
+
+if [ "$1" == "-c" ]; then
+  rm -f bl31.bin pmufw.elf pmufw.bin pm_cfg_obj.c pm_cfg_obj.o
+  exit 0
+fi
+[ -e bl31.bin ] || {
+  ATF_SRC=$(mktemp -d /tmp/arm-trusted-firmware.XXXXXXXXXX)
+  git clone https://github.com/ARM-software/arm-trusted-firmware ${ATF_SRC}
+  make -C ${ATF_SRC} -j$(nproc) bl31 CROSS_COMPILE=aarch64-linux-gnu- \
+         LOG_LEVEL=40 ZYNQMP_CONSOLE=cadence1 CONSOLE_RUNTIME=cadence1 \
+         RESET_TO_BL31=1 PLAT=zynqmp ZYNQMP_ATF_MEM_BASE=0x10000 \
+         ZYNQMP_ATF_MEM_SIZE=0x2ffff ENABLE_LTO=1

As I told you this is shortcut. Recommendation is to put TF-A to OCM with FSBL.
That's why there are some challenges in connection to fit both of them there.

Another thing is that none is creating reservation for TFA in DT. When you boot Linux than there is big chance that user application will rewrite TF-A and you break your platform because of missing protection.


+  cp ${ATF_SRC}/build/zynqmp/release/bl31.bin .
+  rm -rf ${ATF_SRC}
+}
+[ -e pmufw.bin ] || {
+  wget 
https://github.com/Xilinx/soc-prebuilt-firmware/raw/refs/heads/xlnx_rel_v2023.1/kv260-kria/pmufw.elf

Better to use 2025.1 version.

+  ./tools/zynqmp_pmufw_elf_convert.py pmufw.elf pmufw.bin
+}
+[ -e pm_cfg_obj.o ] || {
+  wget 
https://github.com/Xilinx/embeddedsw/raw/refs/heads/xlnx_rel_v2023.1/lib/sw_apps/zynqmp_fsbl/misc/pm_cfg_obj.c

This is any generic configuration which is not aligned with standard firmware. It means yes you can use it but it is missing SOM specific configuration. It means for example power off don't need to work. Also this can work on kv260 only but don't need to work on kr260.

My way is to extract it from released fsbl instead but up2you.

M

Reply via email to