[U-Boot] [PATCH] SPL: Add spl_early_board_init() generic function

Marek Vasut marex at denx.de
Mon Jan 16 00:03:26 CET 2017


On 01/15/2017 11:46 PM, Lukasz Majewski wrote:
> Some boards do require early adjustments (due to e.g. HW fix) in SPL code.
> In this particular case such operations must be performed just before ANY
> external IC is accessed (good example here is the I2C early bus access).

Shouldn't such stuff be done in board_init_f or so then ?
board_init_r is pretty late ...

btw I'm not a big fan of adding more and more callbacks, what is the
usecase here ?

> Signed-off-by: Lukasz Majewski <lukma at denx.de>
> ---
>  common/spl/Kconfig | 8 ++++++++
>  common/spl/spl.c   | 6 ++++++
>  include/spl.h      | 4 ++++
>  3 files changed, 18 insertions(+)
> 
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index bb99f1f..7e6f9c4 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -185,6 +185,14 @@ config SPL_SAVEENV
>  	  "reboot_image" and act accordingly and change the reboot_image
>  	  to default mode using setenv and save the environemnt.
>  
> +config SPL_EARLY_BOARD_INIT
> +	bool "Support early board init code"
> +	depends on SPL
> +	help
> +	  Enable support for very early SPL board code adjustments.
> +	  Some boards require having adjustements done before any
> +	  peripherals being operational (e.g. I2C, SPI, UART).
> +
>  config SPL_ETH_SUPPORT
>  	bool "Support Ethernet"
>  	depends on SPL_ENV_SUPPORT
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index bdb165a..a15647b 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -393,6 +393,12 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>  	struct spl_image_info spl_image;
>  	int i;
>  
> +#ifdef CONFIG_SPL_EARLY_BOARD_INIT
> +	debug(">>spl:early_board_init()\n");
> +
> +	spl_early_board_init();
> +#endif
> +
>  	debug(">>spl:board_init_r()\n");
>  
>  #if defined(CONFIG_SYS_SPL_MALLOC_START)
> diff --git a/include/spl.h b/include/spl.h
> index e080a82..00a2058 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -215,6 +215,10 @@ int spl_init(void);
>  void spl_board_init(void);
>  #endif
>  
> +#ifdef CONFIG_SPL_EARLY_BOARD_INIT
> +void spl_early_board_init(void);
> +#endif
> +
>  /**
>   * spl_was_boot_source() - check if U-Boot booted from SPL
>   *
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list