Commit ef5bdccf authored by Janusz Krzysztofik's avatar Janusz Krzysztofik Committed by Tony Lindgren

ARM: OMAP1: fix ams-delta FIQ handler to work with sparse IRQ

After OMAP1 IRQ definitions have been changed by commit 685e2d08
("ARM: OMAP1: Change interrupt numbering for sparse IRQ") introduced
in v4.2, ams-delta FIQ handler which depends on them no longer works
as expected. Fix it.

Created and tested on Amstrad Delta against Linux-4.7-rc3
Signed-off-by: default avatarJanusz Krzysztofik <jmkrzyszt@gmail.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 7c64cc05
...@@ -43,8 +43,8 @@ ...@@ -43,8 +43,8 @@
#define OTHERS_MASK (MODEM_IRQ_MASK | HOOK_SWITCH_MASK) #define OTHERS_MASK (MODEM_IRQ_MASK | HOOK_SWITCH_MASK)
/* IRQ handler register bitmasks */ /* IRQ handler register bitmasks */
#define DEFERRED_FIQ_MASK (0x1 << (INT_DEFERRED_FIQ % IH2_BASE)) #define DEFERRED_FIQ_MASK OMAP_IRQ_BIT(INT_DEFERRED_FIQ)
#define GPIO_BANK1_MASK (0x1 << INT_GPIO_BANK1) #define GPIO_BANK1_MASK OMAP_IRQ_BIT(INT_GPIO_BANK1)
/* Driver buffer byte offsets */ /* Driver buffer byte offsets */
#define BUF_MASK (FIQ_MASK * 4) #define BUF_MASK (FIQ_MASK * 4)
...@@ -110,7 +110,7 @@ ENTRY(qwerty_fiqin_start) ...@@ -110,7 +110,7 @@ ENTRY(qwerty_fiqin_start)
mov r8, #2 @ reset FIQ agreement mov r8, #2 @ reset FIQ agreement
str r8, [r12, #IRQ_CONTROL_REG_OFFSET] str r8, [r12, #IRQ_CONTROL_REG_OFFSET]
cmp r10, #INT_GPIO_BANK1 @ is it GPIO bank interrupt? cmp r10, #(INT_GPIO_BANK1 - NR_IRQS_LEGACY) @ is it GPIO interrupt?
beq gpio @ yes - process it beq gpio @ yes - process it
mov r8, #1 mov r8, #1
......
...@@ -109,7 +109,8 @@ void __init ams_delta_init_fiq(void) ...@@ -109,7 +109,8 @@ void __init ams_delta_init_fiq(void)
* Since no set_type() method is provided by OMAP irq chip, * Since no set_type() method is provided by OMAP irq chip,
* switch to edge triggered interrupt type manually. * switch to edge triggered interrupt type manually.
*/ */
offset = IRQ_ILR0_REG_OFFSET + INT_DEFERRED_FIQ * 0x4; offset = IRQ_ILR0_REG_OFFSET +
((INT_DEFERRED_FIQ - NR_IRQS_LEGACY) & 0x1f) * 0x4;
val = omap_readl(DEFERRED_FIQ_IH_BASE + offset) & ~(1 << 1); val = omap_readl(DEFERRED_FIQ_IH_BASE + offset) & ~(1 << 1);
omap_writel(val, DEFERRED_FIQ_IH_BASE + offset); omap_writel(val, DEFERRED_FIQ_IH_BASE + offset);
...@@ -149,7 +150,7 @@ void __init ams_delta_init_fiq(void) ...@@ -149,7 +150,7 @@ void __init ams_delta_init_fiq(void)
/* /*
* Redirect GPIO interrupts to FIQ * Redirect GPIO interrupts to FIQ
*/ */
offset = IRQ_ILR0_REG_OFFSET + INT_GPIO_BANK1 * 0x4; offset = IRQ_ILR0_REG_OFFSET + (INT_GPIO_BANK1 - NR_IRQS_LEGACY) * 0x4;
val = omap_readl(OMAP_IH1_BASE + offset) | 1; val = omap_readl(OMAP_IH1_BASE + offset) | 1;
omap_writel(val, OMAP_IH1_BASE + offset); omap_writel(val, OMAP_IH1_BASE + offset);
} }
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
#ifndef __AMS_DELTA_FIQ_H #ifndef __AMS_DELTA_FIQ_H
#define __AMS_DELTA_FIQ_H #define __AMS_DELTA_FIQ_H
#include <mach/irqs.h>
/* /*
* Interrupt number used for passing control from FIQ to IRQ. * Interrupt number used for passing control from FIQ to IRQ.
* IRQ12, described as reserved, has been selected. * IRQ12, described as reserved, has been selected.
......
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