diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2008-11-27 11:49:49 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2008-11-27 11:49:49 +0000 |
commit | 23e59f20bf3651d1cf3dcedc08ddc10de9827f3d (patch) | |
tree | 4ad611bac9484f1b46cc705186ba33463bd388f2 /firmware/target | |
parent | b4fb3cd8bde877b514eace287ff4f3096ff6f176 (diff) | |
download | rockbox-23e59f20bf3651d1cf3dcedc08ddc10de9827f3d.tar.gz rockbox-23e59f20bf3651d1cf3dcedc08ddc10de9827f3d.zip |
Gigabeats S: Simply ignore that occasional spurious unknown IRQ (-1) that goes through irq_handler even if the AVIC is used. If no pending interrupt is indicated (anything else should be vectored), simply returning from the handler appears to have no ill effect. The cause for entering irq_handler is unknown for now (or I missed something important :\).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19245 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/avic-imx31.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c b/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c index ba7ed3314c..a135889e6e 100644 --- a/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c +++ b/firmware/target/arm/imx31/gigabeat-s/avic-imx31.c | |||
@@ -67,9 +67,20 @@ void UIE_VECTOR(void) | |||
67 | } | 67 | } |
68 | 68 | ||
69 | /* We use the AVIC */ | 69 | /* We use the AVIC */ |
70 | void __attribute__((naked)) irq_handler(void) | 70 | void __attribute__((interrupt("IRQ"))) irq_handler(void) |
71 | { | 71 | { |
72 | const int offset = (int32_t)NIVECSR >> 16; | 72 | const int offset = (int32_t)NIVECSR >> 16; |
73 | |||
74 | if (offset == -1) | ||
75 | { | ||
76 | /* This is called occasionally for some unknown reason even with the | ||
77 | * avic enabled but returning normally appears to cause no harm. The | ||
78 | * KPP and ATA seem to have a part in it (common but multiplexed pins | ||
79 | * that can interfere). It will be investigated more thoroughly but | ||
80 | * for now it is simply an occasional irritant. */ | ||
81 | return; | ||
82 | } | ||
83 | |||
73 | disable_interrupt(IRQ_FIQ_STATUS); | 84 | disable_interrupt(IRQ_FIQ_STATUS); |
74 | panicf("Unhandled IRQ %d in irq_handler: %s", offset, | 85 | panicf("Unhandled IRQ %d in irq_handler: %s", offset, |
75 | offset >= 0 ? avic_int_names[offset] : "<Unknown>"); | 86 | offset >= 0 ? avic_int_names[offset] : "<Unknown>"); |