[U-Boot] [PATCH] powerpc: Add cpu_secondary_init_r to allow for initialization post env setup

Kumar Gala galak at kernel.crashing.org
Thu Feb 3 16:27:34 CET 2011


On Feb 2, 2011, at 12:21 PM, Kumar Gala wrote:

> We can simplify some cpu/SoC level initialization by moving it to be
> after the environment and non-volatile storage is setup as there might
> be dependancies on such things in various boot configurations.
> 
> For example for FSL SoC's with QE if we boot from NAND we need it setup
> to extra the ucode image to initialize the QE.  If we always do this
> after environment & non-volatile storage is working we can have the code
> be the same regardless of NOR, NAND, SPI, MMC boot.
> 
> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
> ---
> * This is really second version of the cpu_late_init_r patch
>  - changed where we call cpu_secondary_init_r to be right after env_relocate
> 
> arch/powerpc/cpu/mpc85xx/cpu_init.c |   15 +++++++++------
> arch/powerpc/lib/board.c            |   14 ++++++++++++++
> 2 files changed, 23 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c
> index 8ece970..215b7b3 100644
> --- a/arch/powerpc/cpu/mpc85xx/cpu_init.c
> +++ b/arch/powerpc/cpu/mpc85xx/cpu_init.c
> @@ -384,12 +384,6 @@ int cpu_init_r(void)
> 
> 	enable_cpc();
> 
> -#ifdef CONFIG_QE
> -	uint qe_base = CONFIG_SYS_IMMR + 0x00080000; /* QE immr base */
> -	qe_init(qe_base);
> -	qe_reset();
> -#endif
> -
> 	/* needs to be in ram since code uses global static vars */
> 	fsl_serdes_init();
> 
> @@ -449,3 +443,12 @@ int sata_initialize(void)
> 	return 1;
> }
> #endif
> +
> +void cpu_secondary_init_r(void)
> +{
> +#ifdef CONFIG_QE
> +	uint qe_base = CONFIG_SYS_IMMR + 0x00080000; /* QE immr base */
> +	qe_init(qe_base);
> +	qe_reset();
> +#endif
> +}
> diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c
> index b88cf6b..38ca1f8 100644
> --- a/arch/powerpc/lib/board.c
> +++ b/arch/powerpc/lib/board.c
> @@ -186,6 +186,12 @@ int __board_flash_wp_on(void)
> }
> int board_flash_wp_on(void) __attribute__((weak, alias("__board_flash_wp_on")));
> 
> +void __cpu_secondary_init_r(void)
> +{
> +}
> +void cpu_secondary_init_r(void)
> +__attribute__((weak, alias("__cpu_secondary_init_r")));
> +
> static int init_func_ram (void)
> {
> #ifdef	CONFIG_BOARD_TYPES
> @@ -798,6 +804,14 @@ void board_init_r (gd_t *id, ulong dest_addr)
> 	env_relocate ();
> 
> 	/*
> +	 * after non-volatile devices & environment is setup and cpu code have
> +	 * another round to deal with any initialization that might require
> +	 * full access to the environment or loading of some image (firmware)
> +	 * from a non-volatile device
> +	 */
> +	cpu_secondary_init_r();
> +
> +	/*
> 	 * Fill in missing fields of bd_info.
> 	 * We do this here, where we have "normal" access to the
> 	 * environment; we used to do this still running from ROM,
> -- 
> 1.6.0.6

Wolfgang,

Any comments on this, based on the discussion here:

http://lists.denx.de/pipermail/u-boot/2011-January/086567.html
http://lists.denx.de/pipermail/u-boot/2011-February/086711.html

- k


More information about the U-Boot mailing list