ARM: pm: avoid writing the auxillary control register for ARMv7
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 26 Aug 2011 21:44:59 +0000 (22:44 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 28 Aug 2011 09:39:54 +0000 (10:39 +0100)
For ARMv7 kernels running in the non-secure world, writing to the
auxillary control register causes an abort, so we must avoid directly
writing the auxillary control register.  If the ACR has already been
reinitialized by SoC code, don't try to restore it.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/proc-v7.S

index a773f4e2869c1f93a0efdfce96d127a97223081b..9049c0764db271cefac57824191db79e98b6df0c 100644 (file)
@@ -248,7 +248,9 @@ ENTRY(cpu_v7_do_resume)
        mcr     p15, 0, r7, c2, c0, 0   @ TTB 0
        mcr     p15, 0, r8, c2, c0, 1   @ TTB 1
        mcr     p15, 0, ip, c2, c0, 2   @ TTB control register
-       mcr     p15, 0, r10, c1, c0, 1  @ Auxiliary control register
+       mrc     p15, 0, r4, c1, c0, 1   @ Read Auxiliary control register
+       teq     r4, r10                 @ Is it already set?
+       mcrne   p15, 0, r10, c1, c0, 1  @ No, so write it
        mcr     p15, 0, r11, c1, c0, 2  @ Co-processor access control
        ldr     r4, =PRRR               @ PRRR
        ldr     r5, =NMRR               @ NMRR