]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
sh: Support userimask for all SH-X3 interrupt controllers.
authorPaul Mundt <lethal@linux-sh.org>
Fri, 1 Oct 2010 15:43:43 +0000 (00:43 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 1 Oct 2010 15:43:43 +0000 (00:43 +0900)
This shuffles some of the shared bits out of the 7786 code and in to a
shared SH-X3 support file. Presently just for userimask, but also a good
place for the IRQ balancing wrappers.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/sh4a/Makefile
arch/sh/kernel/cpu/sh4a/intc-shx3.c [new file with mode: 0644]
arch/sh/kernel/cpu/sh4a/setup-sh7786.c

index b144e8af89dc696b8285bbb5e60fbb032a1d2bb6..f2d654295771c1b9ef84b2917daa4e043fbf4d0a 100644 (file)
@@ -8,13 +8,13 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7763)      += setup-sh7763.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7770)       += setup-sh7770.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7780)       += setup-sh7780.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7785)       += setup-sh7785.o
-obj-$(CONFIG_CPU_SUBTYPE_SH7786)       += setup-sh7786.o
+obj-$(CONFIG_CPU_SUBTYPE_SH7786)       += setup-sh7786.o intc-shx3.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7343)       += setup-sh7343.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7722)       += setup-sh7722.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7723)       += setup-sh7723.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7724)       += setup-sh7724.o
 obj-$(CONFIG_CPU_SUBTYPE_SH7366)       += setup-sh7366.o
-obj-$(CONFIG_CPU_SUBTYPE_SHX3)         += setup-shx3.o
+obj-$(CONFIG_CPU_SUBTYPE_SHX3)         += setup-shx3.o intc-shx3.o
 
 # SMP setup
 smp-$(CONFIG_CPU_SHX3)                 := smp-shx3.o
diff --git a/arch/sh/kernel/cpu/sh4a/intc-shx3.c b/arch/sh/kernel/cpu/sh4a/intc-shx3.c
new file mode 100644 (file)
index 0000000..78c9714
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Shared support for SH-X3 interrupt controllers.
+ *
+ *  Copyright (C) 2009 - 2010  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/irq.h>
+#include <linux/io.h>
+#include <linux/init.h>
+
+#define INTACK         0xfe4100b8
+#define INTACKCLR      0xfe4100bc
+#define INTC_USERIMASK 0xfe411000
+
+#ifdef CONFIG_INTC_BALANCING
+unsigned int irq_lookup(unsigned int irq)
+{
+       return __raw_readl(INTACK) & 1 ? irq : NO_IRQ_IGNORE;
+}
+
+void irq_finish(unsigned int irq)
+{
+       __raw_writel(irq2evt(irq), INTACKCLR);
+}
+#endif
+
+static int __init shx3_irq_setup(void)
+{
+       return register_intc_userimask(INTC_USERIMASK);
+}
+arch_initcall(shx3_irq_setup);
index 8797723231ea0dde8429778274fa4c7cc7670ad4..bbc0a974da04d6bbaada0c87076746e708abbcc7 100644 (file)
@@ -756,8 +756,6 @@ static struct intc_vect vectors[] __initdata = {
 
 #define INTDISTCR0     0xfe4100b0
 #define INTDISTCR1     0xfe4100b4
-#define INTACK         0xfe4100b8
-#define INTACKCLR      0xfe4100bc
 #define INT2DISTCR0    0xfe410900
 #define INT2DISTCR1    0xfe410904
 #define INT2DISTCR2    0xfe410908
@@ -920,19 +918,6 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7786-irl4567", vectors_irl4567,
 #define INTC_INTMSK2   INTMSK2
 #define INTC_INTMSKCLR1        CnINTMSKCLR1
 #define INTC_INTMSKCLR2        INTMSKCLR2
-#define INTC_USERIMASK 0xfe411000
-
-#ifdef CONFIG_INTC_BALANCING
-unsigned int irq_lookup(unsigned int irq)
-{
-       return __raw_readl(INTACK) & 1 ? irq : NO_IRQ_IGNORE;
-}
-
-void irq_finish(unsigned int irq)
-{
-       __raw_writel(irq2evt(irq), INTACKCLR);
-}
-#endif
 
 void __init plat_irq_setup(void)
 {
@@ -947,7 +932,6 @@ void __init plat_irq_setup(void)
        __raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
 
        register_intc_controller(&intc_desc);
-       register_intc_userimask(INTC_USERIMASK);
 }
 
 void __init plat_irq_setup_pins(int mode)