Add the memory nodes for the detected SDRAM configuration to the fdt before passing it to the TF-A.
Signed-off-by: Michael Tretter <m.tret...@pengutronix.de> --- arch/arm/mach-rockchip/atf.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/arch/arm/mach-rockchip/atf.c b/arch/arm/mach-rockchip/atf.c index 12cf13717b6972c2eafc5a044ae8d0b4de029c32..342af302aa25089acce3c91df0ea38cbe71e0add 100644 --- a/arch/arm/mach-rockchip/atf.c +++ b/arch/arm/mach-rockchip/atf.c @@ -173,6 +173,26 @@ void rk3588_atf_load_bl31(void *fdt) rockchip_atf_load_bl31(RK3588, rk3588_bl31_bin, rk3588_bl32_bin, fdt); } +#ifdef CONFIG_ARCH_ROCKCHIP_ATF_PASS_FDT +static int rk3588_fixup_mem(void *fdt) +{ + /* Use 4 blocks since rk3588 has 3 gaps in the address space */ + unsigned long base[4]; + unsigned long size[ARRAY_SIZE(base)]; + phys_addr_t base_tmp[ARRAY_SIZE(base)]; + resource_size_t size_tmp[ARRAY_SIZE(base_tmp)]; + int i, n; + + n = rk3588_ram_sizes(base_tmp, size_tmp, ARRAY_SIZE(base_tmp)); + for (i = 0; i < n; i++) { + base[i] = base_tmp[i]; + size[i] = size_tmp[i]; + } + + return fdt_fixup_mem(fdt, base, size, i); +} +#endif + void __noreturn rk3588_barebox_entry(void *fdt) { unsigned long membase, endmem; @@ -187,6 +207,8 @@ void __noreturn rk3588_barebox_entry(void *fdt) rockchip_store_bootrom_iram(IOMEM(RK3588_IRAM_BASE)); #ifdef CONFIG_ARCH_ROCKCHIP_ATF_PASS_FDT + if (rk3588_fixup_mem(fdt) != 0) + pr_warn("Failed to fixup memory\n"); rk3588_atf_load_bl31(fdt); #else rk3588_atf_load_bl31(NULL); -- 2.39.5