aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ifxmips
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2010-08-21 15:58:44 +0000
committerLars-Peter Clausen <lars@metafoo.de>2010-08-21 15:58:44 +0000
commit8e61ac4c5ae7969942224775d68092c1c1f2ba92 (patch)
tree8a853d94460626711a989869bb7f42e357a4588c /target/linux/ifxmips
parentb63a7ded093e285d5b2f1fe3cffd26445701845a (diff)
downloadupstream-8e61ac4c5ae7969942224775d68092c1c1f2ba92.tar.gz
upstream-8e61ac4c5ae7969942224775d68092c1c1f2ba92.tar.bz2
upstream-8e61ac4c5ae7969942224775d68092c1c1f2ba92.zip
[ifxmips] Danube: Fix irq ack
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22748 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ifxmips')
-rw-r--r--target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c b/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c
index 18b8d01d42..ce198e321c 100644
--- a/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c
+++ b/target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/irq.c
@@ -55,6 +55,26 @@ ifxmips_mask_and_ack_irq(unsigned int irq_nr)
}
EXPORT_SYMBOL(ifxmips_mask_and_ack_irq);
+static void
+ifxmips_ack_irq(unsigned int irq_nr)
+{
+ int i;
+ u32 *isr = IFXMIPS_ICU_IM0_ISR;
+
+ irq_nr -= INT_NUM_IRQ0;
+ for (i = 0; i <= 4; i++)
+ {
+ if (irq_nr < INT_NUM_IM_OFFSET)
+ {
+ ifxmips_w32((1 << irq_nr), isr);
+ return;
+ }
+ isr += IFXMIPS_ICU_OFFSET;
+ irq_nr -= INT_NUM_IM_OFFSET;
+ }
+}
+
+
void
ifxmips_enable_irq(unsigned int irq_nr)
{
@@ -96,7 +116,7 @@ ifxmips_irq_type = {
.enable = ifxmips_enable_irq,
.disable = ifxmips_disable_irq,
.unmask = ifxmips_enable_irq,
- .ack = ifxmips_end_irq,
+ .ack = ifxmips_ack_irq,
.mask = ifxmips_disable_irq,
.mask_ack = ifxmips_mask_and_ack_irq,
.end = ifxmips_end_irq,