On Tue, 02 Aug 2016 12:44:33 +1000
Benjamin Herrenschmidt <b...@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 <b...@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 <b...@kernel.crashing.org>  
> > >         Signed-off-by: Michael Ellerman <m...@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
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to