[PATCH 2/6] ARM: rockchip: atf: make all memory banks available

Sascha Hauer s.hauer at pengutronix.de
Fri Mar 20 01:31:18 PDT 2026


The FDT we pass to OP-TEE needs all memory banks, not only the first
one. Passing such a FDT to OP-TEE is currently only implemented for
RK3588, but in preparation to support that for other SoCs make all
memory banks available to atf.c

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 arch/arm/mach-rockchip/atf.c | 42 ++++++++++++++++++++++--------------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/arch/arm/mach-rockchip/atf.c b/arch/arm/mach-rockchip/atf.c
index cf232e4f6e..4d90aeff49 100644
--- a/arch/arm/mach-rockchip/atf.c
+++ b/arch/arm/mach-rockchip/atf.c
@@ -127,6 +127,9 @@ static uintptr_t rk_load_optee(uintptr_t bl32, struct fwobj *bl32_fw)
 	return bl32;
 }
 
+static phys_addr_t membase[ROCKCHIP_MAX_DRAM_RESOURCES];
+static resource_size_t memsize[ROCKCHIP_MAX_DRAM_RESOURCES];
+static int n_mem_resources;
 static uintptr_t barebox_load_address; /* where barebox is loaded and started */
 static uintptr_t optee_load_address; /* standard SoC specific OP-TEE load address */
 static struct fwobj bl31; /* TF-A in barebox image */
@@ -168,11 +171,11 @@ void rk3562_atf_load_bl31(void *fdt)
 
 void __noreturn rk3562_barebox_entry(void *fdt)
 {
-	phys_addr_t membase, memend;
-	resource_size_t memsize;
+	phys_addr_t memend;
 
-	rk3562_ram_sizes(&membase, &memsize, 1);
-	memend = membase + memsize;
+	n_mem_resources = rk3562_ram_sizes(membase, memsize, ROCKCHIP_MAX_DRAM_RESOURCES);
+
+	memend = membase[0] + memsize[0];
 
 	rk_scratch = (void *)arm_mem_scratch(memend);
 
@@ -196,7 +199,7 @@ void __noreturn rk3562_barebox_entry(void *fdt)
 	}
 
 	optee_set_membase(rk_scratch_get_optee_hdr());
-	barebox_arm_entry(membase, memsize, fdt);
+	barebox_arm_entry(membase[0], memsize[0], fdt);
 }
 
 void rk3568_atf_load_bl31(void *fdt)
@@ -207,11 +210,11 @@ void rk3568_atf_load_bl31(void *fdt)
 
 void __noreturn rk3568_barebox_entry(void *fdt)
 {
-	phys_addr_t membase, memend;
-	resource_size_t memsize;
+	phys_addr_t memend;
+
+	n_mem_resources = rk3568_ram_sizes(membase, memsize, ROCKCHIP_MAX_DRAM_RESOURCES);
 
-	rk3568_ram_sizes(&membase, &memsize, 1);
-	memend = membase + memsize;
+	memend = membase[0] + memsize[0];
 
 	rk_scratch = (void *)arm_mem_scratch(memend);
 
@@ -235,7 +238,7 @@ void __noreturn rk3568_barebox_entry(void *fdt)
 	}
 
 	optee_set_membase(rk_scratch_get_optee_hdr());
-	barebox_arm_entry(membase, memsize, fdt);
+	barebox_arm_entry(membase[0], memsize[0], fdt);
 }
 
 void rk3588_atf_load_bl31(void *fdt)
@@ -278,12 +281,11 @@ static int rk3588_open_fdt(const void *fdt, void *buf, int bufsize)
 
 void __noreturn rk3588_barebox_entry(void *fdt)
 {
-	phys_addr_t membase, memend;
-	resource_size_t memsize;
+	phys_addr_t memend;
 
-	rk3588_ram_sizes(&membase, &memsize, 1);
+	n_mem_resources = rk3588_ram_sizes(membase, memsize, ROCKCHIP_MAX_DRAM_RESOURCES);
 
-	memend = membase + memsize;
+	memend = membase[0] + memsize[0];
 
 	rk_scratch = (void *)arm_mem_scratch(memend);
 
@@ -309,7 +311,7 @@ void __noreturn rk3588_barebox_entry(void *fdt)
 	}
 
 	optee_set_membase(rk_scratch_get_optee_hdr());
-	barebox_arm_entry(membase, memsize, fdt);
+	barebox_arm_entry(membase[0], memsize[0], fdt);
 }
 
 void rk3576_atf_load_bl31(void *fdt)
@@ -320,11 +322,11 @@ void rk3576_atf_load_bl31(void *fdt)
 
 void __noreturn rk3576_barebox_entry(void *fdt)
 {
-	phys_addr_t membase, memend;
-	resource_size_t memsize;
+	phys_addr_t memend;
+
+	n_mem_resources = rk3576_ram_sizes(membase, memsize, ROCKCHIP_MAX_DRAM_RESOURCES);
 
-	rk3576_ram_sizes(&membase, &memsize, 1);
-	memend = membase + memsize;
+	memend = membase[0] + memsize[0];
 
 	rk_scratch = (void *)arm_mem_scratch(memend);
 
@@ -348,5 +350,5 @@ void __noreturn rk3576_barebox_entry(void *fdt)
 	}
 
 	optee_set_membase(rk_scratch_get_optee_hdr());
-	barebox_arm_entry(membase, memsize, fdt);
+	barebox_arm_entry(membase[0], memsize[0], fdt);
 }

-- 
2.47.3




More information about the barebox mailing list