README.md | 5 ++++- scripts/uboot-script-gen | 29 +++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-)
There are systems where device tree binary is passed by the U-Boot as
$fdtcontroladdr. In such cases, no external device tree binary is provided
during uboot script generation.
This is an enhancement on top of the following commit:-
uboot-script-gen: Dynamically compute addr and size when loading bina…
When DEVICE_TREE is not present, user should provide '-s' as the addresses and
sizes should be computed dynamically from U-Boot.
Also, fixed uboot-script-gen to set host_kernel_addr when BOOT_CMD="none" and
'-s' is not used.
Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com>
---
This patch should be applied after the previous patch.
"[ImageBuilder v2] Add config option to use separate load commands for..."
Changes from :-
v1 :- 1. Check that user provides '-s' when DEVICE_TREE is not set, instead of
setting CALC silently.
2. Set 'host_fdt_addr' to '\${fdtcontroladdr}' when DEVICE_TREE is not set.
3. Add a fix for BOOT_CMD="none".
README.md | 5 ++++-
scripts/uboot-script-gen | 29 +++++++++++++++++++++++------
2 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 59919df..fc448e0 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,10 @@ Where:
DTB are stored in 'host_kernel_addr' and 'host_fdt_addr' u-boot
env variables respectively, to be used manually when booting.
-- DEVICE_TREE specifies the DTB file to load.
+- DEVICE_TREE specifies the DTB file to load. If not set, then $fdtcontroladdr
+ is used as the address of the DTB loaded by u-boot. If user does not set this
+ option, then '-s' should be provided to ensure that addresses and sizes are
+ calculated dynamically by uboot.
- XEN specifies the Xen hypervisor binary to load. Note that it has to
be a regular Xen binary, not a u-boot binary.
diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
index 656de72..be61fc4 100755
--- a/scripts/uboot-script-gen
+++ b/scripts/uboot-script-gen
@@ -591,7 +591,7 @@ function device_tree_editing()
function fill_reserved_spaces_from_dtb()
{
- if [ ! -f $DEVICE_TREE ]
+ if test ! -f $DEVICE_TREE || test -z "$DEVICE_TREE"
then
if test "$CALC"; then
return
@@ -1674,6 +1674,16 @@ fi
rm -f $UBOOT_SOURCE $UBOOT_SCRIPT
+if test -z "$DEVICE_TREE"
+then
+ if test -z "$CALC"
+ then
+ echo "DEVICE_TREE is unset and -s is not specified"
+ exit 1
+ fi
+ echo "setenv host_fdt_addr \${fdtcontroladdr}" >> $UBOOT_SOURCE
+fi
+
if test "$FIT"
then
echo 'fit_addr=$fileaddr' >> $UBOOT_SOURCE
@@ -1721,9 +1731,13 @@ then
done
fi
-check_file_type $DEVICE_TREE "Device Tree Blob"
-device_tree_addr=$memaddr
-load_file $DEVICE_TREE "host_fdt" "$XEN_LOAD"
+if test "$DEVICE_TREE"
+then
+ check_file_type $DEVICE_TREE "Device Tree Blob"
+ device_tree_addr=$memaddr
+ load_file $DEVICE_TREE "host_fdt" "$XEN_LOAD"
+fi
+
bitstream_load_and_config # bitstream is loaded last but used first
device_tree_editing $device_tree_addr
@@ -1751,8 +1765,11 @@ then
fi
else
# skip boot command but store load addresses to be used later
- echo "setenv host_kernel_addr $kernel_addr" >> $UBOOT_SOURCE
- echo "setenv host_fdt_addr $device_tree_addr" >> $UBOOT_SOURCE
+ if test -z "$CALC"
+ then
+ echo "setenv host_kernel_addr $kernel_addr" >> $UBOOT_SOURCE
+ echo "setenv host_fdt_addr $device_tree_addr" >> $UBOOT_SOURCE
+ fi
fi
if test "$FIT"
--
2.25.1
On Tue, 12 Aug 2025, Ayan Kumar Halder wrote:
> There are systems where device tree binary is passed by the U-Boot as
> $fdtcontroladdr. In such cases, no external device tree binary is provided
> during uboot script generation.
>
> This is an enhancement on top of the following commit:-
> uboot-script-gen: Dynamically compute addr and size when loading bina…
>
> When DEVICE_TREE is not present, user should provide '-s' as the addresses and
> sizes should be computed dynamically from U-Boot.
>
> Also, fixed uboot-script-gen to set host_kernel_addr when BOOT_CMD="none" and
> '-s' is not used.
>
> Signed-off-by: Ayan Kumar Halder <ayan.kumar.halder@amd.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
> ---
> This patch should be applied after the previous patch.
> "[ImageBuilder v2] Add config option to use separate load commands for..."
>
> Changes from :-
>
> v1 :- 1. Check that user provides '-s' when DEVICE_TREE is not set, instead of
> setting CALC silently.
>
> 2. Set 'host_fdt_addr' to '\${fdtcontroladdr}' when DEVICE_TREE is not set.
>
> 3. Add a fix for BOOT_CMD="none".
>
> README.md | 5 ++++-
> scripts/uboot-script-gen | 29 +++++++++++++++++++++++------
> 2 files changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/README.md b/README.md
> index 59919df..fc448e0 100644
> --- a/README.md
> +++ b/README.md
> @@ -92,7 +92,10 @@ Where:
> DTB are stored in 'host_kernel_addr' and 'host_fdt_addr' u-boot
> env variables respectively, to be used manually when booting.
>
> -- DEVICE_TREE specifies the DTB file to load.
> +- DEVICE_TREE specifies the DTB file to load. If not set, then $fdtcontroladdr
> + is used as the address of the DTB loaded by u-boot. If user does not set this
> + option, then '-s' should be provided to ensure that addresses and sizes are
> + calculated dynamically by uboot.
>
> - XEN specifies the Xen hypervisor binary to load. Note that it has to
> be a regular Xen binary, not a u-boot binary.
> diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
> index 656de72..be61fc4 100755
> --- a/scripts/uboot-script-gen
> +++ b/scripts/uboot-script-gen
> @@ -591,7 +591,7 @@ function device_tree_editing()
>
> function fill_reserved_spaces_from_dtb()
> {
> - if [ ! -f $DEVICE_TREE ]
> + if test ! -f $DEVICE_TREE || test -z "$DEVICE_TREE"
> then
> if test "$CALC"; then
> return
> @@ -1674,6 +1674,16 @@ fi
>
> rm -f $UBOOT_SOURCE $UBOOT_SCRIPT
>
> +if test -z "$DEVICE_TREE"
> +then
> + if test -z "$CALC"
> + then
> + echo "DEVICE_TREE is unset and -s is not specified"
> + exit 1
> + fi
> + echo "setenv host_fdt_addr \${fdtcontroladdr}" >> $UBOOT_SOURCE
> +fi
> +
> if test "$FIT"
> then
> echo 'fit_addr=$fileaddr' >> $UBOOT_SOURCE
> @@ -1721,9 +1731,13 @@ then
> done
> fi
>
> -check_file_type $DEVICE_TREE "Device Tree Blob"
> -device_tree_addr=$memaddr
> -load_file $DEVICE_TREE "host_fdt" "$XEN_LOAD"
> +if test "$DEVICE_TREE"
> +then
> + check_file_type $DEVICE_TREE "Device Tree Blob"
> + device_tree_addr=$memaddr
> + load_file $DEVICE_TREE "host_fdt" "$XEN_LOAD"
> +fi
> +
> bitstream_load_and_config # bitstream is loaded last but used first
> device_tree_editing $device_tree_addr
>
> @@ -1751,8 +1765,11 @@ then
> fi
> else
> # skip boot command but store load addresses to be used later
> - echo "setenv host_kernel_addr $kernel_addr" >> $UBOOT_SOURCE
> - echo "setenv host_fdt_addr $device_tree_addr" >> $UBOOT_SOURCE
> + if test -z "$CALC"
> + then
> + echo "setenv host_kernel_addr $kernel_addr" >> $UBOOT_SOURCE
> + echo "setenv host_fdt_addr $device_tree_addr" >> $UBOOT_SOURCE
> + fi
> fi
>
> if test "$FIT"
> --
> 2.25.1
>
© 2016 - 2025 Red Hat, Inc.