diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c index 8ece970097246c2fe1b102935ad78b439fe7ce3a..215b7b3808b50017021ad456aae7f8767d6ee2eb 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 4719f8c6967a4761dd28cae35b9df9f040e70db4..83fb0744f547f576edf21264b72f46762abc012f 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 @@ -797,6 +803,14 @@ void board_init_r (gd_t *id, ulong dest_addr) /* relocate environment function pointers etc. */ 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