On 6/13/25 14:30, Jerome Forissier wrote:
Hi Michal,
On 6/13/25 09:59, Michal Simek wrote:
On 6/13/25 09:38, Jerome Forissier wrote:
On 6/12/25 18:49, Tom Rini wrote:
On Thu, Jun 12, 2025 at 05:32:41PM +0200, 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
Helper build scripts don't belong in the tools directory. If they're
super helpful, I don't object to adding them to
u-boot-extras/contrib/<you>/ directory.
OK
But there's a number of
documented examples already on checkout and build TF-A then do ... for
your platform.
There is doc/board/xilinx/zynqmp.rst which deals with quite few ZynqMP
boards but not the KV260. In addition, it has a number of shortcomings:
- It mentions pmu.bin but does not say where to get if from
- It doesn't say how to build TF-A (bl31.bin), some very specific build
options are needed.
- I consider that detailed build instructions belong in things called
scripts or Makefiles, that were invented long ago exactly for that
purpose :) IMO the documentation should tell the bare minimum and ideally
be unnecessary.
I am not particularly proud of the fact that I spent more than a whole
day trying to get U-Boot master to boot on my KV260, and without the help
of Michal, no doubt I would still be trying... So, how about I submit the
zynqmp_kv260_build.sh script to the u-boot-extras/contrib/<me>/ directory
and just point to it in doc/board/xilinx/zynqmp.rst?
no issue from my side.
OK so here you go:
From a429f6563fc5f1433a2df8eabe6a42a98864701b Mon Sep 17 00:00:00 2001
From: Jerome Forissier <jerome.foriss...@linaro.org>
Date: Fri, 13 Jun 2025 13:39:10 +0200
Subject: [PATCH] contrib/jforissier: add zynqmp_kv260_build.sh
Add a build script for the AMD/Xilinx ZynqMP Kria KV260 board.
Signed-off-by: Jerome Forissier <jerome.foriss...@linaro.org>
---
contrib/jforissier/zynqmp_kv260_build.sh | 42 ++++++++++++++++++++++++
1 file changed, 42 insertions(+)
create mode 100755 contrib/jforissier/zynqmp_kv260_build.sh
diff --git a/contrib/jforissier/zynqmp_kv260_build.sh
b/contrib/jforissier/zynqmp_kv260_build.sh
new file mode 100755
index 0000000..967c946
--- /dev/null
+++ b/contrib/jforissier/zynqmp_kv260_build.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright (C) 2025 Linaro Ltd.
+
+set -ex
+
+if [ "$1" == "-c" ]; then
+ # Clean: remove downloaded/converted files
+ rm -f bl31.elf bl31.bin pmufw.elf pmufw.bin zynqmp_fsbl.elf pmu_obj.bin
+ exit 0
+fi
+[ -e bl31.bin ] || {
+ wget
https://github.com/Xilinx/soc-prebuilt-firmware/raw/refs/heads/xlnx_rel_v2025.1/kv260-kria/bl31.elf
I would create one variable to keep xlnx_rel_v2025.1 string that you can change
one location to get new versions.
+ aarch64-linux-gnu-objcopy -O binary bl31.elf bl31.bin
+ BL31_LOAD_ADDR=$(aarch64-linux-gnu-readelf -l bl31.elf | awk '/Entry point/
{ print $3 }')
here you have bug. Your script works fine on the first run.
You can try this
./zynqmp_kv260_build.sh
make mrproper
./zynqmp_kv260_build.sh
and look at
CONFIG_BL31_LOAD_ADDR
you are all the time getting default Kconfig address which is wrong.
+}
+[ -e pmufw.bin ] || {
+ wget
https://github.com/Xilinx/soc-prebuilt-firmware/raw/refs/heads/xlnx_rel_v2025.1/kv260-kria/pmufw.elf
+ llvm-objcopy -O binary pmufw.elf pmufw.bin
+}
+[ -e pmu_obj.bin ] || {
+ wget
https://github.com/Xilinx/soc-prebuilt-firmware/raw/refs/heads/xlnx_rel_v2025.1/kv260-kria/zynqmp_fsbl.elf
+ aarch64-linux-gnu-objcopy --dump-section .sys_cfg_data=pmu_obj.bin
zynqmp_fsbl.elf
+}
+[ -e .config ] || {
+ make xilinx_zynqmp_kria_defconfig
+ cat << EOF >> .config
+CONFIG_PMUFW_INIT_FILE="pmufw.bin"
+CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE="pmu_obj.bin"
+CONFIG_BL31_LOAD_ADDR=${BL31_LOAD_ADDR}
+CONFIG_BL32_LOAD_ADDR=0
+EOF
+}
+export BL31=bl31.bin
+export BL32=
+export TEE=
+export CROSS_COMPILE=aarch64-linux-gnu-
+make -j$(nproc) BINMAN_ALLOW_MISSING=1
+set +x
+echo Build was successful:
+ls -l qspi.bin
The rest is fine.
M