[U-Boot] [PATCH 1/2] rockchip: allow DRAM init in SPL and fix ordering
Tom Hebb
tommyhebb at gmail.com
Fri Nov 15 01:22:49 UTC 2019
Thank you for the review! I will split the patch and send a v2.
On Thu, Nov 14, 2019, 17:17 Kever Yang <kever.yang at rock-chips.com> wrote:
> Hi Thomas,
> On 2019/11/15 上午12:09, Tom Hebb wrote:
>
> Hi Kever,
>
> On Thu, Nov 14, 2019 at 1:25 AM Kever Yang <kever.yang at rock-chips.com>
> wrote:
>
>> Hi Thomas,
>>
>> On 2019/11/11 上午12:25, Thomas Hebb wrote:
>> > b7abef2ecbcc ("rockchip: rk3399: Migrate to use common spl board file")
>> > removed SoC-specific code for RK3399's SPL and in the process introduced
>> > two regressions:
>> >
>> > 1. It caused the previously-unconditional DRAM initialization in
>> > board_init_f() to only happen when compiling a configuration that
>> > did not support TPL, meaning DRAM would never get initialized if
>> TPL
>> > was supported but disabled.
>>
>>
>> If the board support TPL, that means the dram init should be done in
>> TPL, no matter the really
>>
>> implement is the U-Boot TPL or use rockchip rkbin instead. In this case,
>> enable DRAM driver in SPL
>>
>> make no sense, for dram driver itself would only get dram size which do
>> not have any use other
>>
>> than the case CONFIG_SPL_OS_BOOT.
>>
>
> I would like to boot my RK3399 board with only an SPL, loaded directly by
> the.
> BootROM into IRAM. I have no need for a three-stage bootloader, and adding
> only increases boot time and adds complexity. Is there a reason not to
> support
> this use case?
>
>
> OK, I understand it now, you update is necessary, thanks.
>
> Well, it will be better to make this patch into two patches.
>
>
> I do realize that this will add an unnecessary call if someone uses rkbin
> for DDR
> init and SPL for the second stage. Do any boards actually do that, though?
>
> > 2. It reordered the DRAM initialization before rockchip_stimer_init(),
>> > which as far as I can tell causes RK3399 to lock up completely.
>>
>>
>> The stimer_init should goes before dram_init.
>>
>> So please only update the order.
>>
>
> Should timer_init() also go before dram_init(), like I have it now? Or
> should I put
> dram_init() between rockchip_stimer_init() and timer_init()?
>
>
> timer_init() goes before dram_init, because the dram_init() will use
> udelay().
>
>
> Thanks,
>
> - Kever
>
>
> Thanks,
>>
>> - Kever
>>
>> >
>> > Fix both of these issues in the common code so that we can again boot
>> > RK3399 without a TPL. This fixes custom configurations that have
>> > disabled TPL, and it should also unbreak the "ficus-rk3399",
>> > "rock960-rk3399", and "chromebook_bob" defconfigs, although since I
>> > don't have any of those devices I can't confirm they're broken now.
>> >
>> > Signed-off-by: Thomas Hebb <tommyhebb at gmail.com>
>> > ---
>> > arch/arm/mach-rockchip/spl.c | 18 +++++++++---------
>> > 1 file changed, 9 insertions(+), 9 deletions(-)
>> >
>> > diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c
>> > index 92102b39e7..089f0a5258 100644
>> > --- a/arch/arm/mach-rockchip/spl.c
>> > +++ b/arch/arm/mach-rockchip/spl.c
>> > @@ -103,7 +103,7 @@ __weak int arch_cpu_init(void)
>> > void board_init_f(ulong dummy)
>> > {
>> > int ret;
>> > -#if !defined(CONFIG_SUPPORT_TPL) || defined(CONFIG_SPL_OS_BOOT)
>> > +#if !defined(CONFIG_TPL) || defined(CONFIG_SPL_OS_BOOT)
>> > struct udevice *dev;
>> > #endif
>> >
>> > @@ -128,20 +128,20 @@ void board_init_f(ulong dummy)
>> > hang();
>> > }
>> > arch_cpu_init();
>> > -#if !defined(CONFIG_SUPPORT_TPL) || defined(CONFIG_SPL_OS_BOOT)
>> > - debug("\nspl:init dram\n");
>> > - ret = uclass_get_device(UCLASS_RAM, 0, &dev);
>> > - if (ret) {
>> > - printf("DRAM init failed: %d\n", ret);
>> > - return;
>> > - }
>> > -#endif
>> > #if !defined(CONFIG_ROCKCHIP_RK3188)
>> > rockchip_stimer_init();
>> > #endif
>> > #ifdef CONFIG_SYS_ARCH_TIMER
>> > /* Init ARM arch timer in arch/arm/cpu/armv7/arch_timer.c */
>> > timer_init();
>> > +#endif
>> > +#if !defined(CONFIG_TPL) || defined(CONFIG_SPL_OS_BOOT)
>> > + debug("\nspl:init dram\n");
>> > + ret = uclass_get_device(UCLASS_RAM, 0, &dev);
>> > + if (ret) {
>> > + printf("DRAM init failed: %d\n", ret);
>> > + return;
>> > + }
>> > #endif
>> > preloader_console_init();
>> > }
>>
>>
>>
More information about the U-Boot
mailing list