From 9f76f23ca52ec48b5a006d74a7d424956a277ed3 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Thu, 4 Dec 2008 21:35:47 +0000 Subject: Oops, logic error! Interrupts enabled != in interrupt mode git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19336 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/mips/ingenic_jz47xx/system-jz4740.c | 19 +++++++++++++++---- firmware/target/mips/ingenic_jz47xx/system-target.h | 6 +----- 2 files changed, 16 insertions(+), 9 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 @@ #include "system-target.h" #include #include "kernel.h" -#include "system.h" #define NUM_DMA 6 #define NUM_GPIO 128 @@ -323,15 +322,26 @@ static int get_irq_number(void) return irq; } +static bool intr_mode = false; + +bool in_interrupt_mode(void) +{ + return intr_mode; +} + void intr_handler(void) { - irq = get_irq_number(); /* irq is defined static at UIRQ() */ - if(UNLIKELY(irq < 0)) + int irq = get_irq_number(); + if(irq < 0) return; ack_irq(irq); - if(LIKELY(irq > 0)) + if(irq > 0) + { + intr_mode = true; irqvector[irq-1](); + intr_mode = false; + } } #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) static const int FR2n[] = {1, 2, 3, 4, 6, 8, 12, 16, 24, 32}; static unsigned int iclk; + static void detect_clock(void) { unsigned int cfcr, pllout; diff --git a/firmware/target/mips/ingenic_jz47xx/system-target.h b/firmware/target/mips/ingenic_jz47xx/system-target.h index eab517fa5d..a8133140fa 100644 --- a/firmware/target/mips/ingenic_jz47xx/system-target.h +++ b/firmware/target/mips/ingenic_jz47xx/system-target.h @@ -56,11 +56,6 @@ static inline void disable_interrupt(void) clear_c0_status(ST0_IE); } -static inline bool in_interrupt_mode(void) -{ - return (read_c0_status() & ST0_IE) ? true : false; -} - #define disable_irq() \ disable_interrupt() @@ -106,6 +101,7 @@ void udelay(unsigned int usec); void mdelay(unsigned int msec); void power_off(void); void system_reboot(void); +bool in_interrupt_mode(void); #define DMA_LCD_CHANNEL 0 #define DMA_NAND_CHANNEL 1 -- cgit v1.2.3