MPC5200 does not boot

Nicholas Piggin npiggin at gmail.com
Tue Aug 2 13:16:43 AEST 2016


On Tue, 02 Aug 2016 12:44:33 +1000
Benjamin Herrenschmidt <benh at kernel.crashing.org> wrote:

> On Tue, 2016-08-02 at 00:44 +0200, Michal Sojka wrote:
> > Hi Benjamin,
> > 
> > the following commit causes my MPC5200 not to boot.
> > 
> >     commit 9402c684613163888714df0955fa1f17142b08bf  
> > >     Author: Benjamin Herrenschmidt <benh at kernel.crashing.org>  
> >     Date:   Tue Jul 5 15:03:41 2016 +1000
> >      
> >         powerpc: Factor do_feature_fixup calls
> >         
> >         32 and 64-bit do a similar set of calls early on, we move it all to
> >         a single common function to make the boot code more readable.
> >         
> >         Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>  
> > >         Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>  
> > 
> > I suspect that the cause will be similar as described in commit
> > 1cd03890ea64795e53f17a94928cca22495acb2a. Unfortunately, I don't have
> > much time to debug this, but I can easily test patches.  
> 
> Are you sure of your bisection ? Did you verify that reverting that one
> patch fixes it ? Because all this does is move code to a function,
> the code is functionally the same and called in the same place...

+	struct cpu_spec *spec = *PTRRELOC(&cur_cpu_spec);
+
+	/*
+	 * Apply the CPU-specific and firmware specific fixups to kernel text
+	 * (nop out sections not relevant to this CPU or this firmware).
+	 */
+	do_feature_fixups(spec->cpu_features,
+			  PTRRELOC(&__start___ftr_fixup),
+			  PTRRELOC(&__stop___ftr_fixup));

Shouldn't these be PTRRELOC(spec)->cpu_features ? You are relocating
access to the pointer word, but not the address it contains.
identify_cpu() returns the relocated pointer which is what 32-bit used
to use.

Thanks,
Nick


More information about the Linuxppc-dev mailing list