aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2010-04-13 01:43:03 -0400
committerPaul Mundt <lethal@linux-sh.org>2010-04-13 01:43:03 -0400
commit43b8774dc409ea5d9369b978e2e7bc79289f0522 (patch)
tree13aa346ff8f30786e8ce3ccfdd8341d182ce4c87 /arch/sh/kernel
parent12129fea50edcd696a9556523b058d6c445f21d8 (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.c3
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
911void __init plat_irq_setup(void) 913void __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
926void __init plat_irq_setup_pins(int mode) 929void __init plat_irq_setup_pins(int mode)