[RFC PATCH] tools: zynqmp: add build script and documentation for ZynqMP KV260
Michal Simek
michal.simek at amd.com
Fri Jun 13 14:50:58 CEST 2025
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.forissier at 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.forissier at 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.forissier at 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
More information about the U-Boot
mailing list