[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