aboutsummaryrefslogtreecommitdiffstats
path: root/arch
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
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')
-rw-r--r--arch/sh/Kconfig2
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7786.c3
2 files changed, 5 insertions, 0 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
index 8d90564c2bcf..ba86bfba95ac 100644
--- a/arch/sh/Kconfig
+++ b/arch/sh/Kconfig
@@ -732,6 +732,8 @@ config GUSA_RB
732 LLSC, this should be more efficient than the other alternative of 732 LLSC, this should be more efficient than the other alternative of
733 disabling interrupts around the atomic sequence. 733 disabling interrupts around the atomic sequence.
734 734
735source "drivers/sh/Kconfig"
736
735endmenu 737endmenu
736 738
737menu "Boot options" 739menu "Boot options"
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)