summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2008-04-27 22:01:25 +0000
committerMichael Sevakis <jethead71@rockbox.org>2008-04-27 22:01:25 +0000
commit39ed7087b344eaed04bae81e12e2bb3cd4264787 (patch)
tree79e8befe70f2327f4a78833581f8905d0c8cb467 /firmware
parent88451d59c41251794b59dc31d9dfaa1c7e1881eb (diff)
IMX31: Try to catch the interrupt that was the reason irq_handler was called since it never should be. The bootloader occasionally shows one but it's not saying what.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17271 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/avic-imx31.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c b/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c
index ce2932a13f..9205c2e442 100644
--- a/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c
+++ b/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c
@@ -46,7 +46,7 @@ static const char * avic_int_names[64] =
void UIE_VECTOR(void)
{
int mode;
- long offset;
+ int offset;
asm volatile (
"mrs %0, cpsr \n" /* Mask core IRQ/FIQ */
@@ -56,9 +56,10 @@ void UIE_VECTOR(void)
: "=&r"(mode)
);
- offset = mode == 0x11 ? (long)FIVECSR : ((long)NIVECSR >> 16);
+ offset = mode == 0x11 ?
+ (int32_t)FIVECSR : ((int32_t)NIVECSR >> 16);
- panicf("Unhandled %s %ld: %s",
+ panicf("Unhandled %s %d: %s",
mode == 0x11 ? "FIQ" : "IRQ", offset,
offset >= 0 ? avic_int_names[offset] : "<Unknown>");
}
@@ -66,7 +67,10 @@ void UIE_VECTOR(void)
/* We use the AVIC */
void __attribute__((naked)) irq_handler(void)
{
- panicf("Unhandled IRQ in irq_handler");
+ const int offset = (int32_t)NIVECSR >> 16;
+ disable_interrupt(IRQ_FIQ_STATUS);
+ panicf("Unhandled IRQ %d in irq_handler: %s", offset,
+ offset >= 0 ? avic_int_names[offset] : "<Unknown>");
}
/* Accoring to section 9.3.5 of the UM, the AVIC doesn't accelerate