Commit 0b0c4c2a authored by Mark A. Greer's avatar Mark A. Greer Committed by Kevin Hilman

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: default avatarMark A. Greer <mgreer@mvista.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent b14dc0f9
if ARCH_DAVINCI if ARCH_DAVINCI
config AINTC
bool
config CP_INTC config CP_INTC
bool bool
...@@ -9,12 +12,15 @@ comment "DaVinci Core Type" ...@@ -9,12 +12,15 @@ comment "DaVinci Core Type"
config ARCH_DAVINCI_DM644x config ARCH_DAVINCI_DM644x
bool "DaVinci 644x based system" bool "DaVinci 644x based system"
select AINTC
config ARCH_DAVINCI_DM355 config ARCH_DAVINCI_DM355
bool "DaVinci 355 based system" bool "DaVinci 355 based system"
select AINTC
config ARCH_DAVINCI_DM646x config ARCH_DAVINCI_DM646x
bool "DaVinci 646x based system" bool "DaVinci 646x based system"
select AINTC
comment "DaVinci Board Type" comment "DaVinci Board Type"
......
...@@ -4,17 +4,19 @@ ...@@ -4,17 +4,19 @@
# #
# Common objects # Common objects
obj-y := time.o irq.o clock.o serial.o io.o psc.o \ obj-y := time.o clock.o serial.o io.o psc.o \
gpio.o devices.o dma.o usb.o common.o gpio.o devices.o dma.o usb.o common.o
obj-$(CONFIG_DAVINCI_MUX) += mux.o obj-$(CONFIG_DAVINCI_MUX) += mux.o
obj-$(CONFIG_CP_INTC) += cp_intc.o
# Chip specific # Chip specific
obj-$(CONFIG_ARCH_DAVINCI_DM644x) += dm644x.o obj-$(CONFIG_ARCH_DAVINCI_DM644x) += dm644x.o
obj-$(CONFIG_ARCH_DAVINCI_DM355) += dm355.o obj-$(CONFIG_ARCH_DAVINCI_DM355) += dm355.o
obj-$(CONFIG_ARCH_DAVINCI_DM646x) += dm646x.o obj-$(CONFIG_ARCH_DAVINCI_DM646x) += dm646x.o
obj-$(CONFIG_AINTC) += irq.o
obj-$(CONFIG_CP_INTC) += cp_intc.o
# Board specific # Board specific
obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o
obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o
......
...@@ -25,6 +25,7 @@ struct davinci_soc_info davinci_soc_info; ...@@ -25,6 +25,7 @@ struct davinci_soc_info davinci_soc_info;
EXPORT_SYMBOL(davinci_soc_info); EXPORT_SYMBOL(davinci_soc_info);
void __iomem *davinci_intc_base; void __iomem *davinci_intc_base;
int davinci_intc_type;
void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context) void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context)
{ {
...@@ -99,6 +100,7 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info) ...@@ -99,6 +100,7 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
} }
davinci_intc_base = davinci_soc_info.intc_base; davinci_intc_base = davinci_soc_info.intc_base;
davinci_intc_type = davinci_soc_info.intc_type;
return; return;
err: err:
......
...@@ -18,6 +18,7 @@ extern struct sys_timer davinci_timer; ...@@ -18,6 +18,7 @@ extern struct sys_timer davinci_timer;
extern void davinci_irq_init(void); extern void davinci_irq_init(void);
extern void __iomem *davinci_intc_base; extern void __iomem *davinci_intc_base;
extern int davinci_intc_type;
/* parameters describe VBUS sourcing for host mode */ /* parameters describe VBUS sourcing for host mode */
extern void setup_usb(unsigned mA, unsigned potpgt_msec); extern void setup_usb(unsigned mA, unsigned potpgt_msec);
......
...@@ -23,9 +23,28 @@ ...@@ -23,9 +23,28 @@
.endm .endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
#if defined(CONFIG_AINTC) && defined(CONFIG_CP_INTC)
ldr \tmp, =davinci_intc_type
ldr \tmp, [\tmp]
cmp \tmp, #DAVINCI_INTC_TYPE_CP_INTC
beq 1001f
#endif
#if defined(CONFIG_AINTC)
ldr \tmp, [\base, #0x14] ldr \tmp, [\base, #0x14]
movs \tmp, \tmp, lsr #2 movs \tmp, \tmp, lsr #2
sub \irqnr, \tmp, #1 sub \irqnr, \tmp, #1
b 1002f
#endif
#if defined(CONFIG_CP_INTC)
1001: ldr \irqnr, [\base, #0x80] /* get irq number */
and \irqnr, \irqnr, #0xff /* irq is in bits 0-9 */
mov \tmp, \irqnr, lsr #3
and \tmp, \tmp, #0xfc
add \tmp, \tmp, #0x280 /* get the register offset */
ldr \irqstat, [\base, \tmp] /* get the intc status */
cmp \irqstat, #0x0
#endif
1002:
.endm .endm
.macro irq_prio_table .macro irq_prio_table
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment