aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-pxa/include/mach/entry-macro.S25
-rw-r--r--arch/arm/mach-pxa/irq.c8
2 files changed, 16 insertions, 17 deletions
diff --git a/arch/arm/mach-pxa/include/mach/entry-macro.S b/arch/arm/mach-pxa/include/mach/entry-macro.S
index f6b4bf3e73d2..241880608ac6 100644
--- a/arch/arm/mach-pxa/include/mach/entry-macro.S
+++ b/arch/arm/mach-pxa/include/mach/entry-macro.S
@@ -24,34 +24,27 @@
24 mov \tmp, \tmp, lsr #13 24 mov \tmp, \tmp, lsr #13
25 and \tmp, \tmp, #0x7 @ Core G 25 and \tmp, \tmp, #0x7 @ Core G
26 cmp \tmp, #1 26 cmp \tmp, #1
27 bhi 1004f 27 bhi 1002f
28 28
29 @ Core Generation 1 (PXA25x)
29 mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000 30 mov \base, #io_p2v(0x40000000) @ IIR Ctl = 0x40d00000
30 add \base, \base, #0x00d00000 31 add \base, \base, #0x00d00000
31 ldr \irqstat, [\base, #0] @ ICIP 32 ldr \irqstat, [\base, #0] @ ICIP
32 ldr \irqnr, [\base, #4] @ ICMR 33 ldr \irqnr, [\base, #4] @ ICMR
33 b 1002f
34 34
351004:
36 mrc p6, 0, \irqstat, c6, c0, 0 @ ICIP2
37 mrc p6, 0, \irqnr, c7, c0, 0 @ ICMR2
38 ands \irqnr, \irqstat, \irqnr 35 ands \irqnr, \irqstat, \irqnr
39 beq 1003f 36 beq 1001f
40 rsb \irqstat, \irqnr, #0 37 rsb \irqstat, \irqnr, #0
41 and \irqstat, \irqstat, \irqnr 38 and \irqstat, \irqstat, \irqnr
42 clz \irqnr, \irqstat 39 clz \irqnr, \irqstat
43 rsb \irqnr, \irqnr, #31 40 rsb \irqnr, \irqnr, #(31 + PXA_IRQ(0))
44 add \irqnr, \irqnr, #(32 + PXA_IRQ(0))
45 b 1001f 41 b 1001f
461003:
47 mrc p6, 0, \irqstat, c0, c0, 0 @ ICIP
48 mrc p6, 0, \irqnr, c1, c0, 0 @ ICMR
491002: 421002:
50 ands \irqnr, \irqstat, \irqnr 43 @ Core Generation 2 (PXA27x) or Core Generation 3 (PXA3xx)
44 mrc p6, 0, \irqstat, c5, c0, 0 @ ICHP
45 tst \irqstat, #0x80000000
51 beq 1001f 46 beq 1001f
52 rsb \irqstat, \irqnr, #0 47 bic \irqstat, \irqstat, #0x80000000
53 and \irqstat, \irqstat, \irqnr 48 mov \irqnr, \irqstat, lsr #16
54 clz \irqnr, \irqstat
55 rsb \irqnr, \irqnr, #(31 + PXA_IRQ(0))
561001: 491001:
57 .endm 50 .endm
diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c
index f6e0300e4f64..d694ce289668 100644
--- a/arch/arm/mach-pxa/irq.c
+++ b/arch/arm/mach-pxa/irq.c
@@ -120,7 +120,7 @@ static void __init pxa_init_low_gpio_irq(set_wake_t fn)
120 120
121void __init pxa_init_irq(int irq_nr, set_wake_t fn) 121void __init pxa_init_irq(int irq_nr, set_wake_t fn)
122{ 122{
123 int irq; 123 int irq, i;
124 124
125 pxa_internal_irq_nr = irq_nr; 125 pxa_internal_irq_nr = irq_nr;
126 126
@@ -129,6 +129,12 @@ void __init pxa_init_irq(int irq_nr, set_wake_t fn)
129 _ICLR(irq) = 0; /* all IRQs are IRQ, not FIQ */ 129 _ICLR(irq) = 0; /* all IRQs are IRQ, not FIQ */
130 } 130 }
131 131
132 /* initialize interrupt priority */
133 if (cpu_is_pxa27x() || cpu_is_pxa3xx()) {
134 for (i = 0; i < irq_nr; i++)
135 IPR(i) = i | (1 << 31);
136 }
137
132 /* only unmasked interrupts kick us out of idle */ 138 /* only unmasked interrupts kick us out of idle */
133 ICCR = 1; 139 ICCR = 1;
134 140