diff options
| author | Paul Mundt <lethal@linux-sh.org> | 2010-10-01 11:43:43 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2010-10-01 11:43:43 -0400 |
| commit | e15f6870a2f2a29abcdb910b80f9629bcf7f5566 (patch) | |
| tree | 6b43b8755cc5926692a25c6695d3cbfba360368e | |
| parent | 5924ad0d86fbc05bfb0c90afa15e20ccb7155549 (diff) | |
sh: Support userimask for all SH-X3 interrupt controllers.
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>
| -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) |
