diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/crt0-pp.S | 17 | ||||
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/ata-e200.c | 3 |
2 files changed, 19 insertions, 1 deletions
diff --git a/firmware/target/arm/crt0-pp.S b/firmware/target/arm/crt0-pp.S index e0d1034f74..bbeace1b60 100644 --- a/firmware/target/arm/crt0-pp.S +++ b/firmware/target/arm/crt0-pp.S | |||
@@ -222,6 +222,19 @@ cop_init: | |||
222 | strhi r4, [r2], #4 | 222 | strhi r4, [r2], #4 |
223 | bhi 2b | 223 | bhi 2b |
224 | 224 | ||
225 | /* Set up stack for IRQ mode */ | ||
226 | msr cpsr_c, #0xd2 | ||
227 | ldr sp, =cop_irq_stack | ||
228 | /* Set up stack for FIQ mode */ | ||
229 | msr cpsr_c, #0xd1 | ||
230 | ldr sp, =fiq_stack | ||
231 | |||
232 | /* Let abort and undefined modes use IRQ stack */ | ||
233 | msr cpsr_c, #0xd7 | ||
234 | ldr sp, =cop_irq_stack | ||
235 | msr cpsr_c, #0xdb | ||
236 | ldr sp, =cop_irq_stack | ||
237 | |||
225 | ldr sp, =cop_stackend | 238 | ldr sp, =cop_stackend |
226 | 239 | ||
227 | /* Run cop_main() in apps/main.c */ | 240 | /* Run cop_main() in apps/main.c */ |
@@ -307,6 +320,10 @@ UIE: | |||
307 | .space 256*4 | 320 | .space 256*4 |
308 | irq_stack: | 321 | irq_stack: |
309 | 322 | ||
323 | /* 256 words of COP IRQ stack */ | ||
324 | .space 256*4 | ||
325 | cop_irq_stack: | ||
326 | |||
310 | /* 256 words of FIQ stack */ | 327 | /* 256 words of FIQ stack */ |
311 | .space 256*4 | 328 | .space 256*4 |
312 | fiq_stack: | 329 | fiq_stack: |
diff --git a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c index cf05397a78..73a67d1ee6 100644 --- a/firmware/target/arm/sandisk/sansa-e200/ata-e200.c +++ b/firmware/target/arm/sandisk/sansa-e200/ata-e200.c | |||
@@ -687,7 +687,8 @@ int ata_init(void) | |||
687 | { | 687 | { |
688 | queue_init(&sd_queue, true); | 688 | queue_init(&sd_queue, true); |
689 | create_thread(sd_thread, sd_stack, | 689 | create_thread(sd_thread, sd_stack, |
690 | sizeof(sd_stack), sd_thread_name IF_PRIO(, PRIORITY_SYSTEM)); | 690 | sizeof(sd_stack), sd_thread_name IF_PRIO(, PRIORITY_SYSTEM) |
691 | IF_COP(, CPU, false)); | ||
691 | initialized = true; | 692 | initialized = true; |
692 | } | 693 | } |
693 | 694 | ||