[EXTERNAL] Re: Device Tree Overlays and FIT Images - Are they supported together fully?
Marcel Ziswiler
marcel.ziswiler at toradex.com
Sat Feb 19 00:37:42 CET 2022
Hi Olli
On Fri, 2022-02-11 at 08:13 +0000, Westermann, Oliver wrote:
[snip]
> My current setup uses bootm ${loadaddr}#${fit_config} which works fine, fit_config containing a configuration
> node name. When calling bootm ${loadaddr}#${fit_config}#bar to apply the bar overlay to ${fit_config}, I get
> the "Overlayed FDT requires relocation" error from boot/image-fit.c#L2341 out of function boot_get_fdt_fit().
>
> I might be doing something wrong, but I did some classic printf debugging to understand the codepath leading
> up to this location. I could not find any code that would copy the dtb contained in my configuration out of
> the fit image, which means the check in L2339 should always trigger. I'm wondering if there is some "copy dtb
> out of FIT" step in overlay-fdt-boot.txt which I'm not seeing, but I feel like I triple checked that document
> by now ;-) So for me the base dtb sits in the FIT and u-boot declines to apply an overlay. The check itself
> makes sense to me as we can't check if there is sufficent padding beyond the base-dtb to prevent growing it
> into the next blob.
I am not sure whether I fully understand the issue(s) you are having. I only know that we are using a similar
technique to actually boot our Toradex Easy Installer. Anyway, I hope you find this helpful.
We do use a script there to get this going. Let me just post the (hopefully) relevant excerpts:
env set fdtfile ${fdt_prefix}imx8mp-verdin-wifi-dev.dtb
env set ramdisk_addr_r 0x47400000
# Re-enable fdt relocation since in place fdt edits corrupt the ramdisk
# in a FIT image...
env set fdt_high
env set fdt_resize true
env set fitconf_fdt_overlays
env set set_default_overlays 'env set fdt_overlays "verdin-imx8mp_native-hdmi_overlay.dtbo verdin-
imx8mp_lt8912_overlay.dtbo"'
env set set_load_overlays_file 'env set load_overlays_file "env import -t 0x42e10000 0x200"'
env set set_apply_overlays 'env set apply_overlays "for overlay_file in \"\\${fdt_overlays}\"; do env set
fitconf_fdt_overlays \"\\"\\${fitconf_fdt_overlays}#config@\\${overlay_file}\\"\"; env set overlay_file; done;
true"'
env set bootcmd_run 'echo "Bootargs: \${bootargs}" && bootm
${ramdisk_addr_r}#config at freescale_\${fdtfile}\${fitconf_fdt_overlays}'
run set_load_overlays_file
run set_apply_overlays
run load_overlays_file
run apply_overlays
run bootcmd
And that is how that whole thing then looks upon boot:
## Executing script at 42e00000
Bootargs: quiet drm.edid_firmware=edid/1280x720.bin video=HDMI-A-1:1280x720-16 at 6
0D video=HDMI-A-2:1280x720-16 at 60D initcall_blacklist=vpu_driver_init rootfstype=
squashfs root=/dev/ram autoinstall clk_ignore_unused pci=nomsi
## Loading kernel from FIT Image at 47400000 ...
Using 'config at freescale_imx8mp-verdin-wifi-dev.dtb' configuration
Trying 'kernel at 1' kernel subimage
Description: Linux kernel
Type: Kernel Image
Compression: gzip compressed
Data Start: 0x47400108
Data Size: 10389245 Bytes = 9.9 MiB
Architecture: AArch64
OS: Linux
Load Address: 0x40000000
Entry Point: 0x40000000
Hash algo: sha1
Hash value: 039972cffe32d2806cff06f64707f56ecb214806
Verifying Hash Integrity ... sha1+ OK
## Loading ramdisk from FIT Image at 47400000 ...
Using 'config at freescale_imx8mp-verdin-wifi-dev.dtb' configuration
Trying 'ramdisk at 1' ramdisk subimage
Description: tezi-initramfs
Type: RAMDisk Image
Compression: uncompressed
Data Start: 0x47e440ec
Data Size: 35405824 Bytes = 33.8 MiB
Architecture: AArch64
OS: Linux
Load Address: 0x60000000
Entry Point: unavailable
Hash algo: sha1
Hash value: d6acbdc4dbce430542b0ebc98cf78c8f1596fb6e
Verifying Hash Integrity ... sha1+ OK
Loading ramdisk from 0x47e440ec to 0x60000000
## Loading fdt from FIT Image at 47400000 ...
Using 'config at freescale_imx8mp-verdin-wifi-dev.dtb' configuration
Trying 'fdt at freescale_imx8mp-verdin-wifi-dev.dtb' fdt subimage
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x47e27800
Data Size: 86327 Bytes = 84.3 KiB
Architecture: AArch64
Load Address: 0x44000000
Hash algo: sha1
Hash value: f0830ff873080ac797feaea43bcff0c365abfc37
Verifying Hash Integrity ... sha1+ OK
Loading fdt from 0x47e27800 to 0x44000000
## Loading fdt from FIT Image at 47400000 ...
Using 'config at verdin-imx8mp_native-hdmi_overlay.dtbo' configuration
Trying 'fdt at verdin-imx8mp_native-hdmi_overlay.dtbo' fdt subimage
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x47e41e44
Data Size: 1860 Bytes = 1.8 KiB
Architecture: AArch64
Load Address: 0x46000000
Hash algo: sha1
Hash value: e012dc61089de5a93eecd9cf4b0bb3b6cb58bec6
Verifying Hash Integrity ... sha1+ OK
Loading fdt from 0x47e41e44 to 0x46000000
## Loading fdt from FIT Image at 47400000 ...
Using 'config at verdin-imx8mp_lt8912_overlay.dtbo' configuration
Trying 'fdt at verdin-imx8mp_lt8912_overlay.dtbo' fdt subimage
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x47e3ea40
Data Size: 1987 Bytes = 1.9 KiB
Architecture: AArch64
Load Address: 0x46000000
Hash algo: sha1
Hash value: 5a8add06641fe0b39df350cb658d54d295d69a3a
Verifying Hash Integrity ... sha1+ OK
Loading fdt from 0x47e3ea40 to 0x46000000
Booting using the fdt blob at 0x44000000
Uncompressing Kernel Image
Loading Device Tree to 00000000fdbdd000, end 00000000fdbf5245 ... OK
Starting kernel ...
> > U-Boot relocates itself to the top of memory. The available memory is
> > shown by command bdinfo.
> >
> > Run 'printenv' to see which other memory addresses are defined.
>
> Thanks, I will check that for my testing, though I'm still wondering what I'm doing wrong.
I hope that gives you some ideas how to overcome your struggle. Good luck!
> Best regards, Olli
Cheers
Marcel
More information about the U-Boot
mailing list