summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/crt0.S
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-02 04:24:40 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:14:24 +0100
commitf7efa925fd570f87e3fb04a7f776a9130953f366 (patch)
tree3ccc371ae0996b034fae761ad38872c291e82c19 /firmware/target/arm/imx233/crt0.S
parentcefaabfe9d284e3eaa049819be0c06ac6c37a29b (diff)
downloadrockbox-f7efa925fd570f87e3fb04a7f776a9130953f366.tar.gz
rockbox-f7efa925fd570f87e3fb04a7f776a9130953f366.zip
imx233: add support for nested IRQ
Rewrite IRQ handling to allow nested IRQs: on each IRQ entry, we save the parameters on the (IRQ) stack and then switch to SVC mode (with its own stack) and renable interrupts. Make sure interrupt is properly acknowledged by using the read side-effect (RSE) mode and handle priority levels as well. Change-Id: I3fd68289b430c56bdd256868939238ff268e42b4
Diffstat (limited to 'firmware/target/arm/imx233/crt0.S')
-rw-r--r--firmware/target/arm/imx233/crt0.S11
1 files changed, 7 insertions, 4 deletions
diff --git a/firmware/target/arm/imx233/crt0.S b/firmware/target/arm/imx233/crt0.S
index ffc58d56fc..0a71da5d08 100644
--- a/firmware/target/arm/imx233/crt0.S
+++ b/firmware/target/arm/imx233/crt0.S
@@ -132,11 +132,12 @@ remap:
132 132
133 /* Set up stack for FIQ mode */ 133 /* Set up stack for FIQ mode */
134 msr cpsr_c, #0xd1 134 msr cpsr_c, #0xd1
135 ldr sp, =fiq_stack 135 ldr sp, =irq_stack
136 136
137 /* Let svc, abort and undefined modes use irq stack */ 137 /* Let abort and undefined modes use irq stack, svc uses its own stack
138 * for interrupt processing */
138 msr cpsr_c, #0xd3 139 msr cpsr_c, #0xd3
139 ldr sp, =irq_stack 140 ldr sp, =svc_stack
140 msr cpsr_c, #0xd7 141 msr cpsr_c, #0xd7
141 ldr sp, =irq_stack 142 ldr sp, =irq_stack
142 msr cpsr_c, #0xdb 143 msr cpsr_c, #0xdb
@@ -161,11 +162,13 @@ remap:
1611: 1621:
162 b 1b 163 b 1b
163 164
165/* Cache-align interrupt stacks */
166 .balign 32
164/* 256 words of IRQ stack */ 167/* 256 words of IRQ stack */
165 .space 256*4 168 .space 256*4
166irq_stack: 169irq_stack:
167 170
168/* 256 words of FIQ stack */ 171/* 256 words of FIQ stack */
169 .space 256*4 172 .space 256*4
170fiq_stack: 173svc_stack:
171end: 174end: