diff options
author | Ke Wei <kewei@marvell.com> | 2008-05-23 04:23:22 -0400 |
---|---|---|
committer | Lennert Buytenhek <buytenh@marvell.com> | 2008-06-22 16:45:01 -0400 |
commit | 1219715de70956557b9dedf3ee021a73d4f4ec52 (patch) | |
tree | 8d778c742bb7e5a0f087e8f8f88a210da6f0125a | |
parent | ab6d15d50637fc25ee941710b23fed09ceb28db3 (diff) |
[ARM] Orion: add a separate BRIDGE_INT_TIMER1_CLR define
Some Feroceon-based SoCs have an MBUS bridge interrupt controller
that requires writing a one instead of a zero to clear edge
interrupt sources such as timer expiry.
This patch adds a new BRIDGE_INT_TIMER1_CLR define, which platform
code can set to either ~BRIDGE_INT_TIMER1 (write-zero-to-clear) or
BRIDGE_INT_TIMER1 (write-one-to-clear) depending on the platform.
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
-rw-r--r-- | arch/arm/plat-orion/time.c | 6 | ||||
-rw-r--r-- | include/asm-arm/arch-orion5x/orion5x.h | 1 |
2 files changed, 4 insertions, 3 deletions
diff --git a/arch/arm/plat-orion/time.c b/arch/arm/plat-orion/time.c index 28b5285446e8..93c4ef9f0067 100644 --- a/arch/arm/plat-orion/time.c +++ b/arch/arm/plat-orion/time.c | |||
@@ -74,7 +74,7 @@ orion_clkevt_next_event(unsigned long delta, struct clock_event_device *dev) | |||
74 | /* | 74 | /* |
75 | * Clear and enable clockevent timer interrupt. | 75 | * Clear and enable clockevent timer interrupt. |
76 | */ | 76 | */ |
77 | writel(~BRIDGE_INT_TIMER1, BRIDGE_CAUSE); | 77 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); |
78 | 78 | ||
79 | u = readl(BRIDGE_MASK); | 79 | u = readl(BRIDGE_MASK); |
80 | u |= BRIDGE_INT_TIMER1; | 80 | u |= BRIDGE_INT_TIMER1; |
@@ -138,7 +138,7 @@ orion_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
138 | /* | 138 | /* |
139 | * ACK pending timer interrupt. | 139 | * ACK pending timer interrupt. |
140 | */ | 140 | */ |
141 | writel(~BRIDGE_INT_TIMER1, BRIDGE_CAUSE); | 141 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); |
142 | 142 | ||
143 | } | 143 | } |
144 | local_irq_restore(flags); | 144 | local_irq_restore(flags); |
@@ -159,7 +159,7 @@ static irqreturn_t orion_timer_interrupt(int irq, void *dev_id) | |||
159 | /* | 159 | /* |
160 | * ACK timer interrupt and call event handler. | 160 | * ACK timer interrupt and call event handler. |
161 | */ | 161 | */ |
162 | writel(~BRIDGE_INT_TIMER1, BRIDGE_CAUSE); | 162 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); |
163 | orion_clkevt.event_handler(&orion_clkevt); | 163 | orion_clkevt.event_handler(&orion_clkevt); |
164 | 164 | ||
165 | return IRQ_HANDLED; | 165 | return IRQ_HANDLED; |
diff --git a/include/asm-arm/arch-orion5x/orion5x.h b/include/asm-arm/arch-orion5x/orion5x.h index 20f7b406a798..10257f5c5e9e 100644 --- a/include/asm-arm/arch-orion5x/orion5x.h +++ b/include/asm-arm/arch-orion5x/orion5x.h | |||
@@ -154,6 +154,7 @@ | |||
154 | #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) | 154 | #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) |
155 | #define BRIDGE_INT_TIMER0 0x0002 | 155 | #define BRIDGE_INT_TIMER0 0x0002 |
156 | #define BRIDGE_INT_TIMER1 0x0004 | 156 | #define BRIDGE_INT_TIMER1 0x0004 |
157 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
157 | #define MAIN_IRQ_CAUSE ORION5X_BRIDGE_REG(0x200) | 158 | #define MAIN_IRQ_CAUSE ORION5X_BRIDGE_REG(0x200) |
158 | #define MAIN_IRQ_MASK ORION5X_BRIDGE_REG(0x204) | 159 | #define MAIN_IRQ_MASK ORION5X_BRIDGE_REG(0x204) |
159 | 160 | ||