Archived
14
0
Fork 0

sh: intc_sh5 depends on cayman board for IRQ priority table.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
Paul Mundt 2008-04-25 16:08:37 +09:00
parent 105eabfd51
commit a1dc4b59fa

View file

@ -184,9 +184,8 @@ int intc_irq_describe(char* p, int irq)
void __init plat_irq_setup(void) void __init plat_irq_setup(void)
{ {
unsigned long long __dummy0, __dummy1=~0x00000000100000f0; unsigned long long __dummy0, __dummy1=~0x00000000100000f0;
unsigned long reg; unsigned long reg;
unsigned long data;
int i; int i;
intc_virt = onchip_remap(INTC_BASE, 1024, "INTC"); intc_virt = onchip_remap(INTC_BASE, 1024, "INTC");
@ -196,11 +195,8 @@ void __init plat_irq_setup(void)
/* Set default: per-line enable/disable, priority driven ack/eoi */ /* Set default: per-line enable/disable, priority driven ack/eoi */
for (i = 0; i < NR_INTC_IRQS; i++) { for (i = 0; i < NR_INTC_IRQS; i++)
if (platform_int_priority[i] != NO_PRIORITY) { irq_desc[i].chip = &intc_irq_type;
irq_desc[i].chip = &intc_irq_type;
}
}
/* Disable all interrupts and set all priorities to 0 to avoid trouble */ /* Disable all interrupts and set all priorities to 0 to avoid trouble */
@ -211,35 +207,42 @@ void __init plat_irq_setup(void)
ctrl_outl( NO_PRIORITY, reg); ctrl_outl( NO_PRIORITY, reg);
/* Set IRLM */ #ifdef CONFIG_SH_CAYMAN
/* If all the priorities are set to 'no priority', then {
* assume we are using encoded mode. unsigned long data;
*/
irlm = platform_int_priority[IRQ_IRL0] + platform_int_priority[IRQ_IRL1] + \
platform_int_priority[IRQ_IRL2] + platform_int_priority[IRQ_IRL3];
if (irlm == NO_PRIORITY) { /* Set IRLM */
/* IRLM = 0 */ /* If all the priorities are set to 'no priority', then
reg = INTC_ICR_CLEAR; * assume we are using encoded mode.
i = IRQ_INTA; */
printk("Trying to use encoded IRL0-3. IRLs unsupported.\n"); irlm = platform_int_priority[IRQ_IRL0] +
} else { platform_int_priority[IRQ_IRL1] +
/* IRLM = 1 */ platform_int_priority[IRQ_IRL2] +
reg = INTC_ICR_SET; platform_int_priority[IRQ_IRL3];
i = IRQ_IRL0; if (irlm == NO_PRIORITY) {
} /* IRLM = 0 */
ctrl_outl(INTC_ICR_IRLM, reg); reg = INTC_ICR_CLEAR;
i = IRQ_INTA;
/* Set interrupt priorities according to platform description */ printk("Trying to use encoded IRL0-3. IRLs unsupported.\n");
for (data = 0, reg = INTC_INTPRI_0; i < NR_INTC_IRQS; i++) { } else {
data |= platform_int_priority[i] << ((i % INTC_INTPRI_PPREG) * 4); /* IRLM = 1 */
if ((i % INTC_INTPRI_PPREG) == (INTC_INTPRI_PPREG - 1)) { reg = INTC_ICR_SET;
/* Upon the 7th, set Priority Register */ i = IRQ_IRL0;
ctrl_outl(data, reg);
data = 0;
reg += 8;
} }
} ctrl_outl(INTC_ICR_IRLM, reg);
/* Set interrupt priorities according to platform description */
for (data = 0, reg = INTC_INTPRI_0; i < NR_INTC_IRQS; i++) {
data |= platform_int_priority[i] <<
((i % INTC_INTPRI_PPREG) * 4);
if ((i % INTC_INTPRI_PPREG) == (INTC_INTPRI_PPREG - 1)) {
/* Upon the 7th, set Priority Register */
ctrl_outl(data, reg);
data = 0;
reg += 8;
}
}
#endif
/* /*
* And now let interrupts come in. * And now let interrupts come in.