]> err.no Git - linux-2.6/blobdiff - include/asm-arm/arch-iop33x/entry-macro.S
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux...
[linux-2.6] / include / asm-arm / arch-iop33x / entry-macro.S
index 980ec9b1ac8379703fd981fbd1abd0ee4dac64e6..b8e3d449e88276fb271430cd7315b8848417e2be 100644 (file)
@@ -3,32 +3,35 @@
  *
  * Low-level IRQ helper macros for IOP33x-based platforms
  *
- * This file is licensed under  the terms of the GNU General Public
+ * This file is licensed under the terms of the GNU General Public
  * License version 2. This program is licensed "as is" without any
  * warranty of any kind, whether express or implied.
  */
-#include <asm/arch/irqs.h>
+#include <asm/arch/iop33x.h>
 
-               .macro  disable_fiq
-               .endm
+       .macro  disable_fiq
+       .endm
 
-               /*
-                * Note: only deal with normal interrupts, not FIQ
-                */
-               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
-               mov     \irqnr, #0
-               mrc     p6, 0, \irqstat, c4, c0, 0      @ Read IINTSRC0
-               cmp     \irqstat, #0
-               bne     1002f
-               mrc     p6, 0, \irqstat, c5, c0, 0      @ Read IINTSRC1
-               cmp     \irqstat, #0
-               beq     1001f
-               clz     \irqnr, \irqstat
-               rsbs    \irqnr,\irqnr,#31   @ recommend by RMK
-               add     \irqnr,\irqnr,#IRQ_IOP331_XINT8
-               b       1001f
-1002:          clz     \irqnr, \irqstat
-               rsbs    \irqnr,\irqnr,#31   @ recommend by RMK
-               add     \irqnr,\irqnr,#IRQ_IOP331_DMA0_EOT
-1001:
-               .endm
+       .macro get_irqnr_preamble, base, tmp
+       mrc     p15, 0, \tmp, c15, c1, 0
+       orr     \tmp, \tmp, #(1 << 6)
+       mcr     p15, 0, \tmp, c15, c1, 0        @ Enable cp6 access
+       mrc     p15, 0, \tmp, c15, c1, 0
+       mov     \tmp, \tmp
+       sub     pc, pc, #4                      @ cp_wait
+       .endm
+
+       .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
+       mrc     p6, 0, \irqstat, c14, c0, 0     @ Read IINTVEC
+       cmp     \irqstat, #0
+       mrceq   p6, 0, \irqstat, c14, c0, 0     @ erratum 63 workaround
+       adds    \irqnr, \irqstat, #1
+       movne   \irqnr, \irqstat, lsr #2
+       .endm
+
+       .macro arch_ret_to_user, tmp1, tmp2
+       mrc     p15, 0, \tmp1, c15, c1, 0
+       ands    \tmp2, \tmp1, #(1 << 6)
+       bicne   \tmp1, \tmp1, #(1 << 6)
+       mcrne   p15, 0, \tmp1, c15, c1, 0       @ Disable cp6 access
+       .endm