]> err.no Git - linux-2.6/commitdiff
[ARM] Clean up save_and_disable_irqs macro and allow use of ARMv6 CPSID
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Wed, 9 Nov 2005 15:04:22 +0000 (15:04 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 9 Nov 2005 15:04:22 +0000 (15:04 +0000)
save_and_disable_irqs does not need to use mov + msr (which was
introduced to work around a documentation bug which was propagated
into binutils.)  Use msr with an immediate constant, and if we're
building for ARMv6 or later, use the new CPSID instruction.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/lib/bitops.h
include/asm-arm/assembler.h

index f35d91fbe11742dcd91d0ad9fdf76d796f3b7548..b8c14e93669711d2c52f20ca06c41980eaf791b0 100644 (file)
@@ -34,7 +34,7 @@
        and     r2, r0, #7
        mov     r3, #1
        mov     r3, r3, lsl r2
-       save_and_disable_irqs ip, r2
+       save_and_disable_irqs ip
        ldrb    r2, [r1, r0, lsr #3]
        \instr  r2, r2, r3
        strb    r2, [r1, r0, lsr #3]
@@ -54,7 +54,7 @@
        add     r1, r1, r0, lsr #3
        and     r3, r0, #7
        mov     r0, #1
-       save_and_disable_irqs ip, r2
+       save_and_disable_irqs ip
        ldrb    r2, [r1]
        tst     r2, r0, lsl r3
        \instr  r2, r2, r0, lsl r3
index 69a28f96bee2ee14994a11d9fba1516306496534..f31ac92b6c7f1c0f69dc90e861a0bad367ff6c5e 100644 (file)
  * Save the current IRQ state and disable IRQs.  Note that this macro
  * assumes FIQs are enabled, and that the processor is in SVC mode.
  */
-       .macro  save_and_disable_irqs, oldcpsr, temp
+       .macro  save_and_disable_irqs, oldcpsr
        mrs     \oldcpsr, cpsr
-       mov     \temp, #PSR_I_BIT | MODE_SVC
-       msr     cpsr_c, \temp
+#if __LINUX_ARM_ARCH__ >= 6
+       cpsid   i
+#else
+       msr     cpsr_c, #PSR_I_BIT | MODE_SVC
+#endif
        .endm
 
 /*