aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
authorMark A. Greer <mgreer@mvista.com>2009-04-15 15:41:40 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2009-05-28 18:17:47 -0400
commit0b0c4c2a6974eae7b96066cb0da35b526fe58468 (patch)
treeb5b037b86d3a08a220b6c31a67fe0005e1fa3a60 /arch/arm
parentb14dc0f9942a9c318c6c49f29511d88b3642e2d0 (diff)
davinci: Integrate cp_intc support into low-level irq code
Integrate the Common Platform Interrupt Controller (cp_intc) support into the low-level irq handling for davinci and similar platforms. Do it such that support for cp_intc and the original aintc can coexist in the same kernel binary. Signed-off-by: Mark A. Greer <mgreer@mvista.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-davinci/Kconfig6
-rw-r--r--arch/arm/mach-davinci/Makefile6
-rw-r--r--arch/arm/mach-davinci/common.c2
-rw-r--r--arch/arm/mach-davinci/include/mach/common.h1
-rw-r--r--arch/arm/mach-davinci/include/mach/entry-macro.S19
5 files changed, 32 insertions, 2 deletions
diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
index d7614a0ab2f4..76408670554d 100644
--- a/arch/arm/mach-davinci/Kconfig
+++ b/arch/arm/mach-davinci/Kconfig
@@ -1,5 +1,8 @@
1if ARCH_DAVINCI 1if ARCH_DAVINCI
2 2
3config AINTC
4 bool
5
3config CP_INTC 6config CP_INTC
4 bool 7 bool
5 8
@@ -9,12 +12,15 @@ comment "DaVinci Core Type"
9 12
10config ARCH_DAVINCI_DM644x 13config ARCH_DAVINCI_DM644x
11 bool "DaVinci 644x based system" 14 bool "DaVinci 644x based system"
15 select AINTC
12 16
13config ARCH_DAVINCI_DM355 17config ARCH_DAVINCI_DM355
14 bool "DaVinci 355 based system" 18 bool "DaVinci 355 based system"
19 select AINTC
15 20
16config ARCH_DAVINCI_DM646x 21config ARCH_DAVINCI_DM646x
17 bool "DaVinci 646x based system" 22 bool "DaVinci 646x based system"
23 select AINTC
18 24
19comment "DaVinci Board Type" 25comment "DaVinci Board Type"
20 26
diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
index a65d03bb4679..5b62d8a4b180 100644
--- a/arch/arm/mach-davinci/Makefile
+++ b/arch/arm/mach-davinci/Makefile
@@ -4,17 +4,19 @@
4# 4#
5 5
6# Common objects 6# Common objects
7obj-y := time.o irq.o clock.o serial.o io.o psc.o \ 7obj-y := time.o clock.o serial.o io.o psc.o \
8 gpio.o devices.o dma.o usb.o common.o 8 gpio.o devices.o dma.o usb.o common.o
9 9
10obj-$(CONFIG_DAVINCI_MUX) += mux.o 10obj-$(CONFIG_DAVINCI_MUX) += mux.o
11obj-$(CONFIG_CP_INTC) += cp_intc.o
12 11
13# Chip specific 12# Chip specific
14obj-$(CONFIG_ARCH_DAVINCI_DM644x) += dm644x.o 13obj-$(CONFIG_ARCH_DAVINCI_DM644x) += dm644x.o
15obj-$(CONFIG_ARCH_DAVINCI_DM355) += dm355.o 14obj-$(CONFIG_ARCH_DAVINCI_DM355) += dm355.o
16obj-$(CONFIG_ARCH_DAVINCI_DM646x) += dm646x.o 15obj-$(CONFIG_ARCH_DAVINCI_DM646x) += dm646x.o
17 16
17obj-$(CONFIG_AINTC) += irq.o
18obj-$(CONFIG_CP_INTC) += cp_intc.o
19
18# Board specific 20# Board specific
19obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o 21obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o
20obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o 22obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c
index 169ec73f8d76..61ede19c6b54 100644
--- a/arch/arm/mach-davinci/common.c
+++ b/arch/arm/mach-davinci/common.c
@@ -25,6 +25,7 @@ struct davinci_soc_info davinci_soc_info;
25EXPORT_SYMBOL(davinci_soc_info); 25EXPORT_SYMBOL(davinci_soc_info);
26 26
27void __iomem *davinci_intc_base; 27void __iomem *davinci_intc_base;
28int davinci_intc_type;
28 29
29void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context) 30void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context)
30{ 31{
@@ -99,6 +100,7 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
99 } 100 }
100 101
101 davinci_intc_base = davinci_soc_info.intc_base; 102 davinci_intc_base = davinci_soc_info.intc_base;
103 davinci_intc_type = davinci_soc_info.intc_type;
102 return; 104 return;
103 105
104err: 106err:
diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h
index b773d92e7379..22db67744875 100644
--- a/arch/arm/mach-davinci/include/mach/common.h
+++ b/arch/arm/mach-davinci/include/mach/common.h
@@ -18,6 +18,7 @@ extern struct sys_timer davinci_timer;
18 18
19extern void davinci_irq_init(void); 19extern void davinci_irq_init(void);
20extern void __iomem *davinci_intc_base; 20extern void __iomem *davinci_intc_base;
21extern int davinci_intc_type;
21 22
22/* parameters describe VBUS sourcing for host mode */ 23/* parameters describe VBUS sourcing for host mode */
23extern void setup_usb(unsigned mA, unsigned potpgt_msec); 24extern void setup_usb(unsigned mA, unsigned potpgt_msec);
diff --git a/arch/arm/mach-davinci/include/mach/entry-macro.S b/arch/arm/mach-davinci/include/mach/entry-macro.S
index ed78851fe4ae..fbdebc7cb409 100644
--- a/arch/arm/mach-davinci/include/mach/entry-macro.S
+++ b/arch/arm/mach-davinci/include/mach/entry-macro.S
@@ -23,9 +23,28 @@
23 .endm 23 .endm
24 24
25 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp 25 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
26#if defined(CONFIG_AINTC) && defined(CONFIG_CP_INTC)
27 ldr \tmp, =davinci_intc_type
28 ldr \tmp, [\tmp]
29 cmp \tmp, #DAVINCI_INTC_TYPE_CP_INTC
30 beq 1001f
31#endif
32#if defined(CONFIG_AINTC)
26 ldr \tmp, [\base, #0x14] 33 ldr \tmp, [\base, #0x14]
27 movs \tmp, \tmp, lsr #2 34 movs \tmp, \tmp, lsr #2
28 sub \irqnr, \tmp, #1 35 sub \irqnr, \tmp, #1
36 b 1002f
37#endif
38#if defined(CONFIG_CP_INTC)
391001: ldr \irqnr, [\base, #0x80] /* get irq number */
40 and \irqnr, \irqnr, #0xff /* irq is in bits 0-9 */
41 mov \tmp, \irqnr, lsr #3
42 and \tmp, \tmp, #0xfc
43 add \tmp, \tmp, #0x280 /* get the register offset */
44 ldr \irqstat, [\base, \tmp] /* get the intc status */
45 cmp \irqstat, #0x0
46#endif
471002:
29 .endm 48 .endm
30 49
31 .macro irq_prio_table 50 .macro irq_prio_table