When we made some experiments with a newly bought Raspberry Pi 4 with 8 GB DRAM, we faced some troubles during the boot process of U-boot. We had to migrate U-boot from 2019.10 to a recent version (2021.07-rc5) from a branch (
tc-2-history) where the support for vExpress has been re-integrated (we still need this QEMU machine to have 32-bit emulation). Then, we got another problem during the boot of the agency; the avz hypervisor didn’t boot anymore. It was due to a renamed property in the ITB file (
load instead of
load-addr), and the property passed to 64-bit.
Indeed, avz need to find the ITB nodes to get a loadable module which contain the Linux domain.
Once we got a successful boot of avz, we also noticed that the circuitry of RPi4 8 GB was also changed in order support more that 32-bit bus address in DMA access of some components like the SD-card emmc device. Now, the firmware patches the DT which is loaded at the first stage bootloader to get the correct address ranges according to the type of SoC (4 GB, 8 GB, etc.).
Since the framework supports static DTB which is given in the ITB file, we need to patch it according to the version received from the 1st-stage bootloader (gd->fdt_blob).
Finally, we have now a unique DT for both 4 GB and 8 GB version of Raspberry Pi 4, leading to a successful boot of the platform.