Commit d36773e5 authored by Florian Fainelli's avatar Florian Fainelli Committed by Ralf Baechle
Browse files

MIPS: RB532: Check irq number when handling GPIO interrupts



This patch makes sure that we are not going to clear
or change the interrupt status of a GPIO interrupt
superior to 13 as this is the maximum number of GPIO
interrupt source (p.232 of the RC32434 reference manual).
Signed-off-by: default avatarFlorian Fainelli <florian@openwrt.org>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 1c99dac8
...@@ -151,7 +151,8 @@ static void rb532_disable_irq(unsigned int irq_nr) ...@@ -151,7 +151,8 @@ static void rb532_disable_irq(unsigned int irq_nr)
mask |= intr_bit; mask |= intr_bit;
WRITE_MASK(addr, mask); WRITE_MASK(addr, mask);
if (group == GPIO_MAPPED_IRQ_GROUP) /* There is a maximum of 14 GPIO interrupts */
if (group == GPIO_MAPPED_IRQ_GROUP && irq_nr <= (GROUP4_IRQ_BASE + 13))
rb532_gpio_set_istat(0, irq_nr - GPIO_MAPPED_IRQ_BASE); rb532_gpio_set_istat(0, irq_nr - GPIO_MAPPED_IRQ_BASE);
/* /*
...@@ -174,7 +175,7 @@ static int rb532_set_type(unsigned int irq_nr, unsigned type) ...@@ -174,7 +175,7 @@ static int rb532_set_type(unsigned int irq_nr, unsigned type)
int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE; int gpio = irq_nr - GPIO_MAPPED_IRQ_BASE;
int group = irq_to_group(irq_nr); int group = irq_to_group(irq_nr);
if (group != GPIO_MAPPED_IRQ_GROUP) if (group != GPIO_MAPPED_IRQ_GROUP || irq_nr > (GROUP4_IRQ_BASE + 13))
return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL; return (type == IRQ_TYPE_LEVEL_HIGH) ? 0 : -EINVAL;
switch (type) { switch (type) {
......
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