Message ID | 20200512103446.1533277-2-heiko@sntech.de |
---|---|
State | Superseded |
Headers | show |
Series | [1/2] rockchip: spl: do full dram_init instead of only probing | expand |
On 2020/5/12 ??6:34, Heiko Stuebner wrote: > From: Heiko Stuebner <heiko.stuebner at theobroma-systems.com> > > In a loading chain SPL -> ATF (->OP-TEE) -> U-Boot, ATF and a subsequent > OP-TEE will re-use the same fdt as the U-Boot target and may need the > information about usable memory ranges. > > Especially OP-TEE needs this to initialize dynamic shared memory > (the only type U-Boot implements when talking to OP-TEE). > > So allow spl_fixup_fdt() to take a fdt_blob argument, falling back to > the existing CONFIG_SYS_SPL_ARGS_ADDR if needed and call it from the > ATF path as well. > > Signed-off-by: Heiko Stuebner <heiko.stuebner at theobroma-systems.com> > Change-Id: I95d555e170534ad7fd03b183773e0b1f2d90d486 Remove this Change-Id. For other parts: Reviewed-by: Kever Yang <kever.yang at rock-chips.com> Thanks, - Kever > --- > common/spl/spl.c | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/common/spl/spl.c b/common/spl/spl.c > index b0f0e1557b..90d8bfd058 100644 > --- a/common/spl/spl.c > +++ b/common/spl/spl.c > @@ -58,7 +58,8 @@ static bd_t bdata __attribute__ ((section(".data"))); > */ > __weak void show_boot_progress(int val) {} > > -#if defined(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF) > +#if defined(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF) || \ > + defined(CONFIG_SPL_ATF) > /* weak, default platform-specific function to initialize dram banks */ > __weak int dram_init_banksize(void) > { > @@ -100,12 +101,14 @@ void __weak spl_perform_fixups(struct spl_image_info *spl_image) > { > } > > -void spl_fixup_fdt(void) > +void spl_fixup_fdt(void *fdt_blob) > { > -#if defined(CONFIG_SPL_OF_LIBFDT) && defined(CONFIG_SYS_SPL_ARGS_ADDR) > - void *fdt_blob = (void *)CONFIG_SYS_SPL_ARGS_ADDR; > +#if defined(CONFIG_SPL_OF_LIBFDT) > int err; > > + if (!fdt_blob) > + return; > + > err = fdt_check_header(fdt_blob); > if (err < 0) { > printf("fdt_root: %s\n", fdt_strerror(err)); > @@ -638,7 +641,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > initr_watchdog(); > #endif > > - if (IS_ENABLED(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF)) > + if (IS_ENABLED(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF) || > + IS_ENABLED(CONFIG_SPL_ATF)) > dram_init_banksize(); > > bootcount_inc(); > @@ -680,6 +684,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > #if CONFIG_IS_ENABLED(ATF) > case IH_OS_ARM_TRUSTED_FIRMWARE: > debug("Jumping to U-Boot via ARM Trusted Firmware\n"); > + spl_fixup_fdt(spl_image.fdt_addr); > spl_invoke_atf(&spl_image); > break; > #endif > @@ -699,7 +704,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2) > #ifdef CONFIG_SPL_OS_BOOT > case IH_OS_LINUX: > debug("Jumping to Linux\n"); > - spl_fixup_fdt(); > +#if defined(CONFIG_SYS_SPL_ARGS_ADDR) > + spl_fixup_fdt((void *)CONFIG_SYS_SPL_ARGS_ADDR); > +#endif > spl_board_prepare_for_linux(); > jump_to_image_linux(&spl_image); > #endif
diff --git a/common/spl/spl.c b/common/spl/spl.c index b0f0e1557b..90d8bfd058 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -58,7 +58,8 @@ static bd_t bdata __attribute__ ((section(".data"))); */ __weak void show_boot_progress(int val) {} -#if defined(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF) +#if defined(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF) || \ + defined(CONFIG_SPL_ATF) /* weak, default platform-specific function to initialize dram banks */ __weak int dram_init_banksize(void) { @@ -100,12 +101,14 @@ void __weak spl_perform_fixups(struct spl_image_info *spl_image) { } -void spl_fixup_fdt(void) +void spl_fixup_fdt(void *fdt_blob) { -#if defined(CONFIG_SPL_OF_LIBFDT) && defined(CONFIG_SYS_SPL_ARGS_ADDR) - void *fdt_blob = (void *)CONFIG_SYS_SPL_ARGS_ADDR; +#if defined(CONFIG_SPL_OF_LIBFDT) int err; + if (!fdt_blob) + return; + err = fdt_check_header(fdt_blob); if (err < 0) { printf("fdt_root: %s\n", fdt_strerror(err)); @@ -638,7 +641,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2) initr_watchdog(); #endif - if (IS_ENABLED(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF)) + if (IS_ENABLED(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF) || + IS_ENABLED(CONFIG_SPL_ATF)) dram_init_banksize(); bootcount_inc(); @@ -680,6 +684,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2) #if CONFIG_IS_ENABLED(ATF) case IH_OS_ARM_TRUSTED_FIRMWARE: debug("Jumping to U-Boot via ARM Trusted Firmware\n"); + spl_fixup_fdt(spl_image.fdt_addr); spl_invoke_atf(&spl_image); break; #endif @@ -699,7 +704,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2) #ifdef CONFIG_SPL_OS_BOOT case IH_OS_LINUX: debug("Jumping to Linux\n"); - spl_fixup_fdt(); +#if defined(CONFIG_SYS_SPL_ARGS_ADDR) + spl_fixup_fdt((void *)CONFIG_SYS_SPL_ARGS_ADDR); +#endif spl_board_prepare_for_linux(); jump_to_image_linux(&spl_image); #endif