can't boot mpc5200, powerpc: Enable AT_BASE_PLATFORM aux vector
Jon Smirl
jonsmirl at gmail.com
Sat Jul 26 08:51:26 EST 2008
On 7/25/08, Jon Smirl <jonsmirl at gmail.com> wrote:
> On 7/25/08, Benjamin Herrenschmidt <benh at kernel.crashing.org> wrote:
> > On Fri, 2008-07-25 at 17:00 -0500, Nathan Lynch wrote:
> > > Jon Smirl wrote:
> > > > I've lost my ability to boot on the mpc5200. Reverting this patch fixes it.
> > >
> > > How does it fail?
> > >
> > >
> > > > @@ -1652,6 +1655,14 @@ struct cpu_spec * __init identify_cpu(unsigned
> > > > long offset, unsigned int pvr)
> > > > } else
> > > > *t = *s;
> > > > *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
> > > > +
> > > > + /*
> > > > + * Set the base platform string once; assumes
> > > > + * we're called with real pvr first.
> > > > + */
> > > > + if (powerpc_base_platform == NULL)
> > > > + powerpc_base_platform = t->platform;
> > > > +
> > >
> > > Hmm, maybe this needs RELOC/PTRRELOC tricks?
> >
> >
> > Hrm... indeed.
> >
> > if (RELOC(powerpc_base_platform))
> > RELOC(powerpc_base_platform) = t->platform;
This boots:
#define RELOC(x) (*PTRRELOC(&(x)))
if (RELOC(powerpc_base_platform))
RELOC(powerpc_base_platform) = t->platform;
>
>
> It completely fails booting, no console or anything.
>
> Where is RELOC defined, prom_init.c?
>
> #ifdef CONFIG_PPC64
> #define RELOC(x) (*PTRRELOC(&(x)))
> #define ADDR(x) (u32) add_reloc_offset((unsigned long)(x))
> #define OF_WORKAROUNDS 0
> #else
> #define RELOC(x) (x)
> #define ADDR(x) (u32) (x)
> #define OF_WORKAROUNDS of_workarounds
> int of_workarounds;
> #endif
>
>
>
> >
> > try that.
> >
> > Ben.
>
> >
> >
> >
>
>
> --
> Jon Smirl
> jonsmirl at gmail.com
>
--
Jon Smirl
jonsmirl at gmail.com
More information about the Linuxppc-dev
mailing list