diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-02 04:24:40 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-10 23:14:24 +0100 |
commit | f7efa925fd570f87e3fb04a7f776a9130953f366 (patch) | |
tree | 3ccc371ae0996b034fae761ad38872c291e82c19 /firmware/target/arm/imx233/crt0.S | |
parent | cefaabfe9d284e3eaa049819be0c06ac6c37a29b (diff) | |
download | rockbox-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.S | 11 |
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: | |||
161 | 1: | 162 | 1: |
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 |
166 | irq_stack: | 169 | irq_stack: |
167 | 170 | ||
168 | /* 256 words of FIQ stack */ | 171 | /* 256 words of FIQ stack */ |
169 | .space 256*4 | 172 | .space 256*4 |
170 | fiq_stack: | 173 | svc_stack: |
171 | end: | 174 | end: |