[PATCH] ARM: Implement cpu_v7_reset.
Russell King - ARM Linux
linux at arm.linux.org.uk
Thu Sep 2 08:18:38 EDT 2010
On Thu, Sep 02, 2010 at 02:52:06PM +0300, Mika Westerberg wrote:
> On Thu, Sep 02, 2010 at 11:39:57AM +0100, Russell King - ARM Linux wrote:
> >
> > Well, as the current v6 and v7 cpu_reset() code is broken, it's hardly
> > surprising that it doesn't work. It needs to be something like this
> > (I haven't tested it yet.)
>
> Thanks.
>
> > diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
> > index 6a8506d..3542ee0 100644
> > --- a/arch/arm/mm/proc-v7.S
> > +++ b/arch/arm/mm/proc-v7.S
> > @@ -63,6 +63,16 @@ ENDPROC(cpu_v7_proc_fin)
> > */
> > .align 5
> > ENTRY(cpu_v7_reset)
> > + mov ip, #0
> > + mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches
>
> I guess this is not anymore supported in ARMv7, it causes undefined
> instruction trap.
>
> > + dsb
> > +#ifdef CONFIG_MMU
> > + mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs
> > +#endif
> > + mrc p15, 0, ip, c1, c0, 0 @ ctrl register
> > + bic ip, ip, #0x000f @ ............wcam
> > + bic ip, ip, #0x1100 @ ...i...s........
> > + mcr p15, 0, ip, c1, c0, 0 @ ctrl register
> > mov pc, r0
> > ENDPROC(cpu_v7_reset)
>
> I tested this patch without that cache invalidate instruction + dsb
> and it still hangs. Exactly the same code works perfectly when it is run
> via 1:1 mapping.
Where are you ultimately jumping to?
More information about the linux-arm-kernel
mailing list