diff options
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/Makefile | 4 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/intc-shx3.c | 34 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7786.c | 16 |
3 files changed, 36 insertions, 18 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/Makefile b/arch/sh/kernel/cpu/sh4a/Makefile index b144e8af89dc..f2d654295771 100644 --- a/arch/sh/kernel/cpu/sh4a/Makefile +++ b/arch/sh/kernel/cpu/sh4a/Makefile | |||
@@ -8,13 +8,13 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7763) += setup-sh7763.o | |||
8 | obj-$(CONFIG_CPU_SUBTYPE_SH7770) += setup-sh7770.o | 8 | obj-$(CONFIG_CPU_SUBTYPE_SH7770) += setup-sh7770.o |
9 | obj-$(CONFIG_CPU_SUBTYPE_SH7780) += setup-sh7780.o | 9 | obj-$(CONFIG_CPU_SUBTYPE_SH7780) += setup-sh7780.o |
10 | obj-$(CONFIG_CPU_SUBTYPE_SH7785) += setup-sh7785.o | 10 | obj-$(CONFIG_CPU_SUBTYPE_SH7785) += setup-sh7785.o |
11 | obj-$(CONFIG_CPU_SUBTYPE_SH7786) += setup-sh7786.o | 11 | obj-$(CONFIG_CPU_SUBTYPE_SH7786) += setup-sh7786.o intc-shx3.o |
12 | obj-$(CONFIG_CPU_SUBTYPE_SH7343) += setup-sh7343.o | 12 | obj-$(CONFIG_CPU_SUBTYPE_SH7343) += setup-sh7343.o |
13 | obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o | 13 | obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o |
14 | obj-$(CONFIG_CPU_SUBTYPE_SH7723) += setup-sh7723.o | 14 | obj-$(CONFIG_CPU_SUBTYPE_SH7723) += setup-sh7723.o |
15 | obj-$(CONFIG_CPU_SUBTYPE_SH7724) += setup-sh7724.o | 15 | obj-$(CONFIG_CPU_SUBTYPE_SH7724) += setup-sh7724.o |
16 | obj-$(CONFIG_CPU_SUBTYPE_SH7366) += setup-sh7366.o | 16 | obj-$(CONFIG_CPU_SUBTYPE_SH7366) += setup-sh7366.o |
17 | obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o | 17 | obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o intc-shx3.o |
18 | 18 | ||
19 | # SMP setup | 19 | # SMP setup |
20 | smp-$(CONFIG_CPU_SHX3) := smp-shx3.o | 20 | 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 index 000000000000..78c971486b4e --- /dev/null +++ b/arch/sh/kernel/cpu/sh4a/intc-shx3.c | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * Shared support for SH-X3 interrupt controllers. | ||
3 | * | ||
4 | * Copyright (C) 2009 - 2010 Paul Mundt | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | #include <linux/irq.h> | ||
11 | #include <linux/io.h> | ||
12 | #include <linux/init.h> | ||
13 | |||
14 | #define INTACK 0xfe4100b8 | ||
15 | #define INTACKCLR 0xfe4100bc | ||
16 | #define INTC_USERIMASK 0xfe411000 | ||
17 | |||
18 | #ifdef CONFIG_INTC_BALANCING | ||
19 | unsigned int irq_lookup(unsigned int irq) | ||
20 | { | ||
21 | return __raw_readl(INTACK) & 1 ? irq : NO_IRQ_IGNORE; | ||
22 | } | ||
23 | |||
24 | void irq_finish(unsigned int irq) | ||
25 | { | ||
26 | __raw_writel(irq2evt(irq), INTACKCLR); | ||
27 | } | ||
28 | #endif | ||
29 | |||
30 | static int __init shx3_irq_setup(void) | ||
31 | { | ||
32 | return register_intc_userimask(INTC_USERIMASK); | ||
33 | } | ||
34 | arch_initcall(shx3_irq_setup); | ||
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 8797723231ea..bbc0a974da04 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
@@ -756,8 +756,6 @@ static struct intc_vect vectors[] __initdata = { | |||
756 | 756 | ||
757 | #define INTDISTCR0 0xfe4100b0 | 757 | #define INTDISTCR0 0xfe4100b0 |
758 | #define INTDISTCR1 0xfe4100b4 | 758 | #define INTDISTCR1 0xfe4100b4 |
759 | #define INTACK 0xfe4100b8 | ||
760 | #define INTACKCLR 0xfe4100bc | ||
761 | #define INT2DISTCR0 0xfe410900 | 759 | #define INT2DISTCR0 0xfe410900 |
762 | #define INT2DISTCR1 0xfe410904 | 760 | #define INT2DISTCR1 0xfe410904 |
763 | #define INT2DISTCR2 0xfe410908 | 761 | #define INT2DISTCR2 0xfe410908 |
@@ -920,19 +918,6 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7786-irl4567", vectors_irl4567, | |||
920 | #define INTC_INTMSK2 INTMSK2 | 918 | #define INTC_INTMSK2 INTMSK2 |
921 | #define INTC_INTMSKCLR1 CnINTMSKCLR1 | 919 | #define INTC_INTMSKCLR1 CnINTMSKCLR1 |
922 | #define INTC_INTMSKCLR2 INTMSKCLR2 | 920 | #define INTC_INTMSKCLR2 INTMSKCLR2 |
923 | #define INTC_USERIMASK 0xfe411000 | ||
924 | |||
925 | #ifdef CONFIG_INTC_BALANCING | ||
926 | unsigned int irq_lookup(unsigned int irq) | ||
927 | { | ||
928 | return __raw_readl(INTACK) & 1 ? irq : NO_IRQ_IGNORE; | ||
929 | } | ||
930 | |||
931 | void irq_finish(unsigned int irq) | ||
932 | { | ||
933 | __raw_writel(irq2evt(irq), INTACKCLR); | ||
934 | } | ||
935 | #endif | ||
936 | 921 | ||
937 | void __init plat_irq_setup(void) | 922 | void __init plat_irq_setup(void) |
938 | { | 923 | { |
@@ -947,7 +932,6 @@ void __init plat_irq_setup(void) | |||
947 | __raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); | 932 | __raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); |
948 | 933 | ||
949 | register_intc_controller(&intc_desc); | 934 | register_intc_controller(&intc_desc); |
950 | register_intc_userimask(INTC_USERIMASK); | ||
951 | } | 935 | } |
952 | 936 | ||
953 | void __init plat_irq_setup_pins(int mode) | 937 | void __init plat_irq_setup_pins(int mode) |