summaryrefslogtreecommitdiff
path: root/target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch
diff options
context:
space:
mode:
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-02-21 17:47:15 +0000
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-02-21 17:47:15 +0000
commit14ba941bf14ddb1d6b66a7fdbb583bb000c726c5 (patch)
treeb66e38d9adb7fc703bd859d53128f1466017e3c6 /target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch
parent14d8e68c1c33b29b1ee996b183684b4e3b471d2b (diff)
ar71xx: add support for 3.8
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35728 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch')
-rw-r--r--target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch b/target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch
new file mode 100644
index 0000000000..84a8ca36fc
--- /dev/null
+++ b/target/linux/ar71xx/patches-3.8/210-MIPS-ath79-simplify-misc-irq-handling.patch
@@ -0,0 +1,66 @@
+--- a/arch/mips/ath79/irq.c
++++ b/arch/mips/ath79/irq.c
+@@ -35,44 +35,17 @@ static void ath79_misc_irq_handler(unsig
+ pending = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS) &
+ __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE);
+
+- if (pending & MISC_INT_UART)
+- generic_handle_irq(ATH79_MISC_IRQ_UART);
+-
+- else if (pending & MISC_INT_DMA)
+- generic_handle_irq(ATH79_MISC_IRQ_DMA);
+-
+- else if (pending & MISC_INT_PERFC)
+- generic_handle_irq(ATH79_MISC_IRQ_PERFC);
+-
+- else if (pending & MISC_INT_TIMER)
+- generic_handle_irq(ATH79_MISC_IRQ_TIMER);
+-
+- else if (pending & MISC_INT_TIMER2)
+- generic_handle_irq(ATH79_MISC_IRQ_TIMER2);
+-
+- else if (pending & MISC_INT_TIMER3)
+- generic_handle_irq(ATH79_MISC_IRQ_TIMER3);
+-
+- else if (pending & MISC_INT_TIMER4)
+- generic_handle_irq(ATH79_MISC_IRQ_TIMER4);
+-
+- else if (pending & MISC_INT_OHCI)
+- generic_handle_irq(ATH79_MISC_IRQ_OHCI);
+-
+- else if (pending & MISC_INT_ERROR)
+- generic_handle_irq(ATH79_MISC_IRQ_ERROR);
+-
+- else if (pending & MISC_INT_GPIO)
+- generic_handle_irq(ATH79_MISC_IRQ_GPIO);
+-
+- else if (pending & MISC_INT_WDOG)
+- generic_handle_irq(ATH79_MISC_IRQ_WDOG);
++ if (!pending) {
++ spurious_interrupt();
++ return;
++ }
+
+- else if (pending & MISC_INT_ETHSW)
+- generic_handle_irq(ATH79_MISC_IRQ_ETHSW);
++ while (pending) {
++ int bit = __ffs(pending);
+
+- else
+- spurious_interrupt();
++ generic_handle_irq(ATH79_MISC_IRQ(bit));
++ pending &= ~BIT(bit);
++ }
+ }
+
+ static void ar71xx_misc_irq_unmask(struct irq_data *d)
+--- a/arch/mips/include/asm/mach-ath79/irq.h
++++ b/arch/mips/include/asm/mach-ath79/irq.h
+@@ -14,6 +14,7 @@
+
+ #define ATH79_MISC_IRQ_BASE 8
+ #define ATH79_MISC_IRQ_COUNT 32
++#define ATH79_MISC_IRQ(_x) (ATH79_MISC_IRQ_BASE + (_x))
+
+ #define ATH79_PCI_IRQ_BASE (ATH79_MISC_IRQ_BASE + ATH79_MISC_IRQ_COUNT)
+ #define ATH79_PCI_IRQ_COUNT 6