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:
parent
105eabfd51
commit
a1dc4b59fa
1 changed files with 37 additions and 34 deletions
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue