[U-Boot] [PATCH 1/2 v2] 85xx: CONFIG_MP Boot Page Translation update
Peter Tyser
ptyser at xes-inc.com
Fri Aug 7 22:57:42 CEST 2009
> > diff --git a/cpu/mpc85xx/mp.c b/cpu/mpc85xx/mp.c
> > index 76f02a4..53fc3be 100644
> > --- a/cpu/mpc85xx/mp.c
> > +++ b/cpu/mpc85xx/mp.c
> > @@ -129,7 +129,7 @@ ulong get_spin_addr(void)
> >
> > ulong addr =
> > (ulong)&__spin_table - (ulong)&__secondary_start_page;
> > - addr += 0xfffff000;
> > + addr += determine_mp_bootpg();
>
> changing this has some issues. We expect the the address that the
> spin table is at to be marked cache-inhibited.
The secondary cores will be running with the spin table in
cache-inhibited memory and it looks like Linux accesses the spin table
after ioremapping it, so that flow looks OK.
I assumed the e500 Coherency Module will ensure that the cpu_status()
function should also be OK as is.
It looks like I should have added 2 cache flushes to U-Boot's
cpu_release(), like:
--- a/cpu/mpc85xx/mp.c
+++ b/cpu/mpc85xx/mp.c
@@ -106,9 +106,11 @@ int cpu_release(int nr, int argc, char *argv[])
table[BOOT_ENTRY_ADDR_UPPER] = (u32)(boot_addr >> 32);
/* ensure all table updates complete before final address write */
- eieio();
+ ppcDcbf((unsigned long)table);
+ asm("msync");
table[BOOT_ENTRY_ADDR_LOWER] = (u32)(boot_addr & 0xffffffff);
+ ppcDcbf((unsigned long)table);
return 0;
}
I'll resubmit with the change above, let me know if I'm off base.
Thanks,
Peter
More information about the U-Boot
mailing list