ARM: at91: fix external interrupts in non-DT case

Management of external interrupts has changed but the
non-DT code has not integrated these changes.
Add a mask to pass external irq specification from SoC
specific code to the at91_aic_init() function.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: stable <stable@vger.kernel.org> [v3.6]
This commit is contained in:
Nicolas Ferre 2012-10-24 16:09:57 +02:00
parent 3d9a0183dd
commit 738a0fd752
3 changed files with 10 additions and 4 deletions

View File

@ -26,7 +26,8 @@ extern void __init at91_dt_initialize(void);
extern void __init at91_init_irq_default(void); extern void __init at91_init_irq_default(void);
extern void __init at91_init_interrupts(unsigned int priority[]); extern void __init at91_init_interrupts(unsigned int priority[]);
extern void __init at91x40_init_interrupts(unsigned int priority[]); extern void __init at91x40_init_interrupts(unsigned int priority[]);
extern void __init at91_aic_init(unsigned int priority[]); extern void __init at91_aic_init(unsigned int priority[],
unsigned int ext_irq_mask);
extern int __init at91_aic_of_init(struct device_node *node, extern int __init at91_aic_of_init(struct device_node *node,
struct device_node *parent); struct device_node *parent);
extern int __init at91_aic5_of_init(struct device_node *node, extern int __init at91_aic5_of_init(struct device_node *node,

View File

@ -502,14 +502,19 @@ int __init at91_aic5_of_init(struct device_node *node,
/* /*
* Initialize the AIC interrupt controller. * Initialize the AIC interrupt controller.
*/ */
void __init at91_aic_init(unsigned int *priority) void __init at91_aic_init(unsigned int *priority, unsigned int ext_irq_mask)
{ {
unsigned int i; unsigned int i;
int irq_base; int irq_base;
if (at91_aic_pm_init()) at91_extern_irq = kzalloc(BITS_TO_LONGS(n_irqs)
* sizeof(*at91_extern_irq), GFP_KERNEL);
if (at91_aic_pm_init() || at91_extern_irq == NULL)
panic("Unable to allocate bit maps\n"); panic("Unable to allocate bit maps\n");
*at91_extern_irq = ext_irq_mask;
at91_aic_base = ioremap(AT91_AIC, 512); at91_aic_base = ioremap(AT91_AIC, 512);
if (!at91_aic_base) if (!at91_aic_base)
panic("Unable to ioremap AIC registers\n"); panic("Unable to ioremap AIC registers\n");

View File

@ -47,7 +47,7 @@ void __init at91_init_irq_default(void)
void __init at91_init_interrupts(unsigned int *priority) void __init at91_init_interrupts(unsigned int *priority)
{ {
/* Initialize the AIC interrupt controller */ /* Initialize the AIC interrupt controller */
at91_aic_init(priority); at91_aic_init(priority, at91_extern_irq);
/* Enable GPIO interrupts */ /* Enable GPIO interrupts */
at91_gpio_irq_setup(); at91_gpio_irq_setup();