Commit d8d607d5 authored by Ralf Baechle's avatar Ralf Baechle

MIPS: BCM63xx: Convert timer locks to raw spinlocks.

Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent c45ef44f
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
#include <bcm63xx_timer.h> #include <bcm63xx_timer.h>
#include <bcm63xx_regs.h> #include <bcm63xx_regs.h>
static DEFINE_SPINLOCK(timer_reg_lock); static DEFINE_RAW_SPINLOCK(timer_reg_lock);
static DEFINE_SPINLOCK(timer_data_lock); static DEFINE_RAW_SPINLOCK(timer_data_lock);
static struct clk *periph_clk; static struct clk *periph_clk;
static struct timer_data { static struct timer_data {
...@@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id) ...@@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
u32 stat; u32 stat;
int i; int i;
spin_lock(&timer_reg_lock); raw_spin_lock(&timer_reg_lock);
stat = bcm_timer_readl(TIMER_IRQSTAT_REG); stat = bcm_timer_readl(TIMER_IRQSTAT_REG);
bcm_timer_writel(stat, TIMER_IRQSTAT_REG); bcm_timer_writel(stat, TIMER_IRQSTAT_REG);
spin_unlock(&timer_reg_lock); raw_spin_unlock(&timer_reg_lock);
for (i = 0; i < BCM63XX_TIMER_COUNT; i++) { for (i = 0; i < BCM63XX_TIMER_COUNT; i++) {
if (!(stat & TIMER_IRQSTAT_TIMER_CAUSE(i))) if (!(stat & TIMER_IRQSTAT_TIMER_CAUSE(i)))
continue; continue;
spin_lock(&timer_data_lock); raw_spin_lock(&timer_data_lock);
if (!timer_data[i].cb) { if (!timer_data[i].cb) {
spin_unlock(&timer_data_lock); raw_spin_unlock(&timer_data_lock);
continue; continue;
} }
timer_data[i].cb(timer_data[i].data); timer_data[i].cb(timer_data[i].data);
spin_unlock(&timer_data_lock); raw_spin_unlock(&timer_data_lock);
} }
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id) ...@@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id)
if (id >= BCM63XX_TIMER_COUNT) if (id >= BCM63XX_TIMER_COUNT)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&timer_reg_lock, flags); raw_spin_lock_irqsave(&timer_reg_lock, flags);
reg = bcm_timer_readl(TIMER_CTLx_REG(id)); reg = bcm_timer_readl(TIMER_CTLx_REG(id));
reg |= TIMER_CTL_ENABLE_MASK; reg |= TIMER_CTL_ENABLE_MASK;
...@@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id) ...@@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id)
reg |= TIMER_IRQSTAT_TIMER_IR_EN(id); reg |= TIMER_IRQSTAT_TIMER_IR_EN(id);
bcm_timer_writel(reg, TIMER_IRQSTAT_REG); bcm_timer_writel(reg, TIMER_IRQSTAT_REG);
spin_unlock_irqrestore(&timer_reg_lock, flags); raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
return 0; return 0;
} }
...@@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id) ...@@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id)
if (id >= BCM63XX_TIMER_COUNT) if (id >= BCM63XX_TIMER_COUNT)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&timer_reg_lock, flags); raw_spin_lock_irqsave(&timer_reg_lock, flags);
reg = bcm_timer_readl(TIMER_CTLx_REG(id)); reg = bcm_timer_readl(TIMER_CTLx_REG(id));
reg &= ~TIMER_CTL_ENABLE_MASK; reg &= ~TIMER_CTL_ENABLE_MASK;
...@@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id) ...@@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id)
reg &= ~TIMER_IRQSTAT_TIMER_IR_EN(id); reg &= ~TIMER_IRQSTAT_TIMER_IR_EN(id);
bcm_timer_writel(reg, TIMER_IRQSTAT_REG); bcm_timer_writel(reg, TIMER_IRQSTAT_REG);
spin_unlock_irqrestore(&timer_reg_lock, flags); raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
return 0; return 0;
} }
...@@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data) ...@@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
return -EINVAL; return -EINVAL;
ret = 0; ret = 0;
spin_lock_irqsave(&timer_data_lock, flags); raw_spin_lock_irqsave(&timer_data_lock, flags);
if (timer_data[id].cb) { if (timer_data[id].cb) {
ret = -EBUSY; ret = -EBUSY;
goto out; goto out;
...@@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data) ...@@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
timer_data[id].data = data; timer_data[id].data = data;
out: out:
spin_unlock_irqrestore(&timer_data_lock, flags); raw_spin_unlock_irqrestore(&timer_data_lock, flags);
return ret; return ret;
} }
...@@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id) ...@@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id)
if (id >= BCM63XX_TIMER_COUNT) if (id >= BCM63XX_TIMER_COUNT)
return; return;
spin_lock_irqsave(&timer_data_lock, flags); raw_spin_lock_irqsave(&timer_data_lock, flags);
timer_data[id].cb = NULL; timer_data[id].cb = NULL;
spin_unlock_irqrestore(&timer_data_lock, flags); raw_spin_unlock_irqrestore(&timer_data_lock, flags);
} }
EXPORT_SYMBOL(bcm63xx_timer_unregister); EXPORT_SYMBOL(bcm63xx_timer_unregister);
...@@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us) ...@@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
if (countdown & ~TIMER_CTL_COUNTDOWN_MASK) if (countdown & ~TIMER_CTL_COUNTDOWN_MASK)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&timer_reg_lock, flags); raw_spin_lock_irqsave(&timer_reg_lock, flags);
reg = bcm_timer_readl(TIMER_CTLx_REG(id)); reg = bcm_timer_readl(TIMER_CTLx_REG(id));
if (monotonic) if (monotonic)
...@@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us) ...@@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
reg |= countdown; reg |= countdown;
bcm_timer_writel(reg, TIMER_CTLx_REG(id)); bcm_timer_writel(reg, TIMER_CTLx_REG(id));
spin_unlock_irqrestore(&timer_reg_lock, flags); raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
return 0; return 0;
} }
......
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