summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2008-12-04 21:35:47 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2008-12-04 21:35:47 +0000
commit9f76f23ca52ec48b5a006d74a7d424956a277ed3 (patch)
tree70d4fd8a7d510f456e8a1541cd1221b198a409b5 /firmware/target/mips/ingenic_jz47xx/system-jz4740.c
parentcea285d64e34f8c2ecce676f6239b59608597019 (diff)
downloadrockbox-9f76f23ca52ec48b5a006d74a7d424956a277ed3.tar.gz
rockbox-9f76f23ca52ec48b5a006d74a7d424956a277ed3.zip
Oops, logic error! Interrupts enabled != in interrupt mode
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19336 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/system-jz4740.c')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/system-jz4740.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/system-jz4740.c b/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
index bde8e1df6a..f733582d70 100644
--- a/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/system-jz4740.c
@@ -27,7 +27,6 @@
27#include "system-target.h" 27#include "system-target.h"
28#include <string.h> 28#include <string.h>
29#include "kernel.h" 29#include "kernel.h"
30#include "system.h"
31 30
32#define NUM_DMA 6 31#define NUM_DMA 6
33#define NUM_GPIO 128 32#define NUM_GPIO 128
@@ -323,15 +322,26 @@ static int get_irq_number(void)
323 return irq; 322 return irq;
324} 323}
325 324
325static bool intr_mode = false;
326
327bool in_interrupt_mode(void)
328{
329 return intr_mode;
330}
331
326void intr_handler(void) 332void intr_handler(void)
327{ 333{
328 irq = get_irq_number(); /* irq is defined static at UIRQ() */ 334 int irq = get_irq_number();
329 if(UNLIKELY(irq < 0)) 335 if(irq < 0)
330 return; 336 return;
331 337
332 ack_irq(irq); 338 ack_irq(irq);
333 if(LIKELY(irq > 0)) 339 if(irq > 0)
340 {
341 intr_mode = true;
334 irqvector[irq-1](); 342 irqvector[irq-1]();
343 intr_mode = false;
344 }
335} 345}
336 346
337#define EXC(x,y) if(_cause == (x)) return (y); 347#define EXC(x,y) if(_cause == (x)) return (y);
@@ -368,6 +378,7 @@ void exception_handler(void* stack_ptr, unsigned int cause, unsigned int epc)
368 378
369static const int FR2n[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32}; 379static const int FR2n[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32};
370static unsigned int iclk; 380static unsigned int iclk;
381
371static void detect_clock(void) 382static void detect_clock(void)
372{ 383{
373 unsigned int cfcr, pllout; 384 unsigned int cfcr, pllout;