diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-04-13 01:43:03 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-04-13 01:43:03 -0400 |
commit | 43b8774dc409ea5d9369b978e2e7bc79289f0522 (patch) | |
tree | 13aa346ff8f30786e8ce3ccfdd8341d182ce4c87 /arch/sh/kernel | |
parent | 12129fea50edcd696a9556523b058d6c445f21d8 (diff) |
sh: intc: userimask support.
This adds support for hardware-assisted userspace irq masking for
special priority levels. Due to the SR.IMASK interactivity, only some
platforms implement this in hardware (including but not limited to
SH-4A interrupt controllers, and ARM-based SH-Mobile CPUs). Each CPU
needs to wire this up on its own, for now only SH7786 is wired up as an
example.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7786.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 61e549190873..235edf8065df 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/dma-mapping.h> | 22 | #include <linux/dma-mapping.h> |
23 | #include <linux/sh_timer.h> | 23 | #include <linux/sh_timer.h> |
24 | #include <linux/sh_intc.h> | ||
24 | #include <cpu/dma-register.h> | 25 | #include <cpu/dma-register.h> |
25 | #include <asm/mmzone.h> | 26 | #include <asm/mmzone.h> |
26 | #include <asm/dmaengine.h> | 27 | #include <asm/dmaengine.h> |
@@ -907,6 +908,7 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7786-irl4567", vectors_irl4567, | |||
907 | #define INTC_INTMSK2 INTMSK2 | 908 | #define INTC_INTMSK2 INTMSK2 |
908 | #define INTC_INTMSKCLR1 CnINTMSKCLR1 | 909 | #define INTC_INTMSKCLR1 CnINTMSKCLR1 |
909 | #define INTC_INTMSKCLR2 INTMSKCLR2 | 910 | #define INTC_INTMSKCLR2 INTMSKCLR2 |
911 | #define INTC_USERIMASK 0xfe411000 | ||
910 | 912 | ||
911 | void __init plat_irq_setup(void) | 913 | void __init plat_irq_setup(void) |
912 | { | 914 | { |
@@ -921,6 +923,7 @@ void __init plat_irq_setup(void) | |||
921 | __raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); | 923 | __raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); |
922 | 924 | ||
923 | register_intc_controller(&intc_desc); | 925 | register_intc_controller(&intc_desc); |
926 | register_intc_userimask(INTC_USERIMASK); | ||
924 | } | 927 | } |
925 | 928 | ||
926 | void __init plat_irq_setup_pins(int mode) | 929 | void __init plat_irq_setup_pins(int mode) |