#include <bcm63xx_timer.h>
#include <bcm63xx_regs.h>
-static DEFINE_SPINLOCK(timer_reg_lock);
-static DEFINE_SPINLOCK(timer_data_lock);
+static DEFINE_RAW_SPINLOCK(timer_reg_lock);
+static DEFINE_RAW_SPINLOCK(timer_data_lock);
static struct clk *periph_clk;
static struct timer_data {
u32 stat;
int i;
- spin_lock(&timer_reg_lock);
+ raw_spin_lock(&timer_reg_lock);
stat = bcm_timer_readl(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++) {
if (!(stat & TIMER_IRQSTAT_TIMER_CAUSE(i)))
continue;
- spin_lock(&timer_data_lock);
+ raw_spin_lock(&timer_data_lock);
if (!timer_data[i].cb) {
- spin_unlock(&timer_data_lock);
+ raw_spin_unlock(&timer_data_lock);
continue;
}
timer_data[i].cb(timer_data[i].data);
- spin_unlock(&timer_data_lock);
+ raw_spin_unlock(&timer_data_lock);
}
return IRQ_HANDLED;
if (id >= BCM63XX_TIMER_COUNT)
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 |= TIMER_CTL_ENABLE_MASK;
reg |= TIMER_IRQSTAT_TIMER_IR_EN(id);
bcm_timer_writel(reg, TIMER_IRQSTAT_REG);
- spin_unlock_irqrestore(&timer_reg_lock, flags);
+ raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
return 0;
}
if (id >= BCM63XX_TIMER_COUNT)
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 &= ~TIMER_CTL_ENABLE_MASK;
reg &= ~TIMER_IRQSTAT_TIMER_IR_EN(id);
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 -EINVAL;
ret = 0;
- spin_lock_irqsave(&timer_data_lock, flags);
+ raw_spin_lock_irqsave(&timer_data_lock, flags);
if (timer_data[id].cb) {
ret = -EBUSY;
goto out;
timer_data[id].data = data;
out:
- spin_unlock_irqrestore(&timer_data_lock, flags);
+ raw_spin_unlock_irqrestore(&timer_data_lock, flags);
return ret;
}
if (id >= BCM63XX_TIMER_COUNT)
return;
- spin_lock_irqsave(&timer_data_lock, flags);
+ raw_spin_lock_irqsave(&timer_data_lock, flags);
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);
if (countdown & ~TIMER_CTL_COUNTDOWN_MASK)
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));
if (monotonic)
reg |= countdown;
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;
}