Message ID | 1457437036-22938-1-git-send-email-yamada.masahiro@socionext.com |
---|---|
State | New |
Headers | show |
Hi Tom, 2016-03-09 8:23 GMT+09:00 Tom Rini <trini@konsulko.com>: > On Tue, Mar 08, 2016 at 08:37:16PM +0900, Masahiro Yamada wrote: > >> We are generally supposed to implement SoC/board-specific SPL init >> code in spl_board_init(), but it is called after spl_init() where the >> FDT is setup and devices are bound. >> >> This new stub spl_early_board_init() would be useful to put something >> really SoC-specific, for example, debug_uart_init(). >> >> In fact, I was hit by some problems on FDT setup when I was tackling >> on a completely new platform. I wished I could use the debug UART >> earlier in situations like that. >> >> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > This is usually done with s_init() and uniphier opts out of that. Yes, ARM32 UniPhier needs to do some tricky initialization right after the start-up, so it has its own lowlevel_init. ARM64 UniPhier is more like the standard ARM architecture, so hopefully I will be able to reuse more common code. > I > would conceed however that things could use some further clean-up and > organization here. As Simon pointed out, an alternative would be to override board_init_f(). I can live with that, too. -- Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Hi Simon, 2016-03-09 8:33 GMT+09:00 Simon Glass <sjg@chromium.org>: > Hi Masahiro, > > On 8 March 2016 at 04:37, Masahiro Yamada <yamada.masahiro@socionext.com> wrote: >> We are generally supposed to implement SoC/board-specific SPL init >> code in spl_board_init(), but it is called after spl_init() where the >> FDT is setup and devices are bound. >> >> This new stub spl_early_board_init() would be useful to put something >> really SoC-specific, for example, debug_uart_init(). >> >> In fact, I was hit by some problems on FDT setup when I was tackling >> on a completely new platform. I wished I could use the debug UART >> earlier in situations like that. >> >> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> >> --- >> >> common/spl/spl.c | 6 ++++++ >> include/spl.h | 1 + >> 2 files changed, 7 insertions(+) >> >> diff --git a/common/spl/spl.c b/common/spl/spl.c >> index e5167bf..df85b09 100644 >> --- a/common/spl/spl.c >> +++ b/common/spl/spl.c >> @@ -150,6 +150,10 @@ static int spl_ram_load_image(void) >> } >> #endif >> >> +void __weak spl_early_board_init(void) >> +{ >> +} >> + >> int spl_init(void) >> { >> int ret; >> @@ -344,6 +348,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2) >> { >> int i; >> >> + spl_early_board_init(); > > Why not put this in board_init_f()? That is a little earlier. The reason is board_init_f() for SPL is not placed in the common place. We can move it there if it is OK to deal with it per arch. > In fact you can replace that function with your own version. Right. This is an alternative. The definition of board_init_f() in arch/arm/lib/spl.c is short enough. I can copy it into arch/arm/mach-uniphier/ and adjust it for my own use. > (although it would be better if we had a single board_init_f() and > called out to board-specific code from there.) > >> + >> debug(">>spl:board_init_r()\n"); >> So, what shall we do about this? -- Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
diff --git a/common/spl/spl.c b/common/spl/spl.c index e5167bf..df85b09 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -150,6 +150,10 @@ static int spl_ram_load_image(void) } #endif +void __weak spl_early_board_init(void) +{ +} + int spl_init(void) { int ret; @@ -344,6 +348,8 @@ void board_init_r(gd_t *dummy1, ulong dummy2) { int i; + spl_early_board_init(); + debug(">>spl:board_init_r()\n"); #if defined(CONFIG_SYS_SPL_MALLOC_START) diff --git a/include/spl.h b/include/spl.h index 92cdc04..e3c1873 100644 --- a/include/spl.h +++ b/include/spl.h @@ -93,6 +93,7 @@ int spl_load_image_ext_os(block_dev_desc_t *block_dev, int partition); */ int spl_init(void); +void spl_early_board_init(void); #ifdef CONFIG_SPL_BOARD_INIT void spl_board_init(void); #endif
We are generally supposed to implement SoC/board-specific SPL init code in spl_board_init(), but it is called after spl_init() where the FDT is setup and devices are bound. This new stub spl_early_board_init() would be useful to put something really SoC-specific, for example, debug_uart_init(). In fact, I was hit by some problems on FDT setup when I was tackling on a completely new platform. I wished I could use the debug UART earlier in situations like that. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> --- common/spl/spl.c | 6 ++++++ include/spl.h | 1 + 2 files changed, 7 insertions(+) -- 1.9.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot