This makes it easier to reference the scratch area in PBL without having to compute the end of memory every time. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- arch/arm/mach-rockchip/atf.c | 22 ++++++++++++++-------- include/mach/rockchip/bootrom.h | 13 +++++++------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/arch/arm/mach-rockchip/atf.c b/arch/arm/mach-rockchip/atf.c index 4c16ec3bc66a..2649b80af9e2 100644 --- a/arch/arm/mach-rockchip/atf.c +++ b/arch/arm/mach-rockchip/atf.c @@ -12,6 +12,8 @@ #include <mach/rockchip/rk3568-regs.h> #include <mach/rockchip/rk3588-regs.h> +struct rockchip_scratch_space *rk_scratch; + static unsigned long load_elf64_image_phdr(const void *elf) { const Elf64_Ehdr *ehdr; /* Elf header structure pointer */ @@ -78,14 +80,16 @@ void rk3568_atf_load_bl31(void *fdt) void __noreturn rk3568_barebox_entry(void *fdt) { - unsigned long membase, memsize; + unsigned long membase, endmem; membase = RK3568_DRAM_BOTTOM; - memsize = rk3568_ram0_size() - RK3568_DRAM_BOTTOM; + endmem = rk3568_ram0_size(); + + rk_scratch = (void *)arm_mem_scratch(endmem); if (current_el() == 3) { rk3568_lowlevel_init(); - rockchip_store_bootrom_iram(membase, memsize, IOMEM(RK3568_IRAM_BASE)); + rockchip_store_bootrom_iram(IOMEM(RK3568_IRAM_BASE)); /* * The downstream TF-A doesn't cope with our device tree when @@ -102,7 +106,7 @@ void __noreturn rk3568_barebox_entry(void *fdt) /* not reached when CONFIG_ARCH_ROCKCHIP_ATF */ } - barebox_arm_entry(membase, memsize, fdt); + barebox_arm_entry(membase, endmem - membase, fdt); } void rk3588_atf_load_bl31(void *fdt) @@ -112,14 +116,16 @@ void rk3588_atf_load_bl31(void *fdt) void __noreturn rk3588_barebox_entry(void *fdt) { - unsigned long membase, memsize; + unsigned long membase, endmem; membase = RK3588_DRAM_BOTTOM; - memsize = rk3588_ram0_size() - RK3588_DRAM_BOTTOM; + endmem = rk3588_ram0_size(); + + rk_scratch = (void *)arm_mem_scratch(endmem); if (current_el() == 3) { rk3588_lowlevel_init(); - rockchip_store_bootrom_iram(membase, memsize, IOMEM(RK3588_IRAM_BASE)); + rockchip_store_bootrom_iram(IOMEM(RK3588_IRAM_BASE)); /* * The downstream TF-A doesn't cope with our device tree when @@ -136,5 +142,5 @@ void __noreturn rk3588_barebox_entry(void *fdt) /* not reached when CONFIG_ARCH_ROCKCHIP_ATF */ } - barebox_arm_entry(membase, memsize, fdt); + barebox_arm_entry(membase, endmem - membase, fdt); } diff --git a/include/mach/rockchip/bootrom.h b/include/mach/rockchip/bootrom.h index 5b999fc6068a..06450829b99a 100644 --- a/include/mach/rockchip/bootrom.h +++ b/include/mach/rockchip/bootrom.h @@ -5,23 +5,24 @@ #include <linux/compiler.h> #include <linux/string.h> +#include <pbl.h> #include <asm/barebox-arm.h> struct rockchip_scratch_space { u32 irom[16]; }; -static inline void rockchip_store_bootrom_iram(ulong membase, - ulong memsize, - const void *iram) +extern struct rockchip_scratch_space *rk_scratch; + +static inline void rockchip_store_bootrom_iram(const void *iram) { - void *dst = (void *)arm_mem_scratch(membase + memsize); - memcpy(dst, iram, sizeof(struct rockchip_scratch_space)); + if (rk_scratch) + memcpy(rk_scratch, iram, sizeof(struct rockchip_scratch_space)); } static inline const struct rockchip_scratch_space *rockchip_scratch_space(void) { - return arm_mem_scratch_get(); + return IN_PBL ? rk_scratch : arm_mem_scratch_get(); } void rockchip_parse_bootrom_iram(const void *iram); -- 2.39.5