diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2007-05-12 10:25:50 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2007-05-12 10:25:50 -0400 |
commit | 641e79129a56a4c50be1aed0fa713f440b46a440 (patch) | |
tree | 41831a6b7927d2d392f5dad8cad7ddd38c363315 /include/asm-arm/hardware | |
parent | 3b938be69e46b64a516b6e3ed6d93c40c091f22c (diff) |
[ARM] Use new get_irqnr_preamble
Use the new get_irqnr_preamble macro to move the address of the IRQ
controller outside the IRQ handling loop.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'include/asm-arm/hardware')
-rw-r--r-- | include/asm-arm/hardware/entry-macro-iomd.S | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/include/asm-arm/hardware/entry-macro-iomd.S b/include/asm-arm/hardware/entry-macro-iomd.S index fbed08f298d0..9bb580a5b15e 100644 --- a/include/asm-arm/hardware/entry-macro-iomd.S +++ b/include/asm-arm/hardware/entry-macro-iomd.S | |||
@@ -11,8 +11,6 @@ | |||
11 | /* IOC / IOMD based hardware */ | 11 | /* IOC / IOMD based hardware */ |
12 | #include <asm/hardware/iomd.h> | 12 | #include <asm/hardware/iomd.h> |
13 | 13 | ||
14 | .equ ioc_base_high, IOC_BASE & 0xff000000 | ||
15 | .equ ioc_base_low, IOC_BASE & 0x00ff0000 | ||
16 | .macro disable_fiq | 14 | .macro disable_fiq |
17 | mov r12, #ioc_base_high | 15 | mov r12, #ioc_base_high |
18 | .if ioc_base_low | 16 | .if ioc_base_low |
@@ -22,33 +20,29 @@ | |||
22 | .endm | 20 | .endm |
23 | 21 | ||
24 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | 22 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp |
25 | mov r4, #ioc_base_high @ point at IOC | 23 | ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first |
26 | .if ioc_base_low | 24 | ldr \tmp, =irq_prio_h |
27 | orr r4, r4, #ioc_base_low | ||
28 | .endif | ||
29 | ldrb \irqstat, [r4, #IOMD_IRQREQB] @ get high priority first | ||
30 | ldr \base, =irq_prio_h | ||
31 | teq \irqstat, #0 | 25 | teq \irqstat, #0 |
32 | #ifdef IOMD_BASE | 26 | #ifdef IOMD_BASE |
33 | ldreqb \irqstat, [r4, #IOMD_DMAREQ] @ get dma | 27 | ldreqb \irqstat, [\base, #IOMD_DMAREQ] @ get dma |
34 | addeq \base, \base, #256 @ irq_prio_h table size | 28 | addeq \tmp, \tmp, #256 @ irq_prio_h table size |
35 | teqeq \irqstat, #0 | 29 | teqeq \irqstat, #0 |
36 | bne 2406f | 30 | bne 2406f |
37 | #endif | 31 | #endif |
38 | ldreqb \irqstat, [r4, #IOMD_IRQREQA] @ get low priority | 32 | ldreqb \irqstat, [\base, #IOMD_IRQREQA] @ get low priority |
39 | addeq \base, \base, #256 @ irq_prio_d table size | 33 | addeq \tmp, \tmp, #256 @ irq_prio_d table size |
40 | teqeq \irqstat, #0 | 34 | teqeq \irqstat, #0 |
41 | #ifdef IOMD_IRQREQC | 35 | #ifdef IOMD_IRQREQC |
42 | ldreqb \irqstat, [r4, #IOMD_IRQREQC] | 36 | ldreqb \irqstat, [\base, #IOMD_IRQREQC] |
43 | addeq \base, \base, #256 @ irq_prio_l table size | 37 | addeq \tmp, \tmp, #256 @ irq_prio_l table size |
44 | teqeq \irqstat, #0 | 38 | teqeq \irqstat, #0 |
45 | #endif | 39 | #endif |
46 | #ifdef IOMD_IRQREQD | 40 | #ifdef IOMD_IRQREQD |
47 | ldreqb \irqstat, [r4, #IOMD_IRQREQD] | 41 | ldreqb \irqstat, [\base, #IOMD_IRQREQD] |
48 | addeq \base, \base, #256 @ irq_prio_lc table size | 42 | addeq \tmp, \tmp, #256 @ irq_prio_lc table size |
49 | teqeq \irqstat, #0 | 43 | teqeq \irqstat, #0 |
50 | #endif | 44 | #endif |
51 | 2406: ldrneb \irqnr, [\base, \irqstat] @ get IRQ number | 45 | 2406: ldrneb \irqnr, [\tmp, \irqstat] @ get IRQ number |
52 | .endm | 46 | .endm |
53 | 47 | ||
54 | /* | 48 | /* |