Dear Kumar Gala, In message <1253307595-28655-5-git-send-email-ga...@kernel.crashing.org> you wrote: > The CoreNet platform style of bringing secondary cores out of reset is > a bit different that the PQ3 style. Mostly the registers that we use > to setup boot translation, enable time bases, and boot release the cores > have moved around. > > Signed-off-by: Kumar Gala <ga...@kernel.crashing.org> > --- > cpu/mpc85xx/mp.c | 68 > +++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 67 insertions(+), 1 deletions(-) > > diff --git a/cpu/mpc85xx/mp.c b/cpu/mpc85xx/mp.c > index fa65bed..b474218 100644 > --- a/cpu/mpc85xx/mp.c > +++ b/cpu/mpc85xx/mp.c > @@ -26,6 +26,7 @@ > #include <lmb.h> > #include <asm/io.h> > #include <asm/mmu.h> > +#include <asm/fsl_law.h> > #include "mp.h" > > DECLARE_GLOBAL_DATA_PTR; > @@ -135,6 +136,66 @@ ulong get_spin_addr(void) > return addr; > } > > +#ifdef CONFIG_FSL_CORENET > +static void corenet_mp_up(unsigned long bootpg) > +{ > + u32 up, cpu_up_mask, whoami; > + u32 *table = (u32 *)get_spin_addr(); > + volatile ccsr_gur_t *gur; > + volatile ccsr_local_t *ccm; > + volatile ccsr_rcpm_t *rcpm; > + volatile ccsr_pic_t *pic; > + int timeout = 10; > + u32 nr_cpus; > + struct law_entry e; > + > + gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); > + ccm = (void *)(CONFIG_SYS_FSL_CORENET_CCM_ADDR); > + rcpm = (void *)(CONFIG_SYS_FSL_CORENET_RCPM_ADDR); > + pic = (void *)(CONFIG_SYS_MPC85xx_PIC_ADDR); > + > + nr_cpus = ((in_be32(&pic->frr) >> 8) & 0xff) + 1; > + > + whoami = in_be32(&pic->whoami); > + cpu_up_mask = 1 << whoami; > + out_be32(&ccm->bstrl, bootpg); > + > + e = find_law(bootpg); > + out_be32(&ccm->bstrar, LAWAR_EN | e.trgt_id << 20 | LAWAR_SIZE_4K); > + > + /* disable time base at the platform */ > + out_be32(&rcpm->ctbenrl, cpu_up_mask); > + > + /* release the hounds */ > + up = ((1 << nr_cpus) - 1); > + out_be32(&gur->brrl, up); > + > + /* wait for everyone */ > + while (timeout) { > + int i; > + for (i = 0; i < nr_cpus; i++) { > + if (table[i * NUM_BOOT_ENTRY + BOOT_ENTRY_ADDR_LOWER]) > + cpu_up_mask |= (1 << i); > + }; > + > + if ((cpu_up_mask & up) == up) > + break; > + > + udelay(100); > + timeout--; > + } > + > + if (timeout == 0) > + printf("CPU up timeout. CPU up mask is %x should be %x\n", > + cpu_up_mask, up); > + > + /* enable time base at the platform */ > + out_be32(&rcpm->ctbenrl, 0); > + mtspr(SPRN_TBWU, 0); > + mtspr(SPRN_TBWL, 0); > + out_be32(&rcpm->ctbenrl, (1 << nr_cpus) - 1); > +} > +#else > static void pq3_mp_up(unsigned long bootpg) > { > u32 up, cpu_up_mask, whoami; > @@ -196,6 +257,7 @@ static void pq3_mp_up(unsigned long bootpg) > devdisr &= ~(MPC85xx_DEVDISR_TB0 | MPC85xx_DEVDISR_TB1); > out_be32(&gur->devdisr, devdisr); > } > +#endif
This is becoming a terrible mess of #ifdef's. Would it not make sense to move the new code into separate files? Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de "Pull the wool over your own eyes!" - J.R. "Bob" Dobbs _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot