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 | ||
