Loading arch/mips/bcm63xx/timer.c +17 −17 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ #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 { Loading @@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id) 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; Loading @@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id) 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; Loading @@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id) 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; } Loading @@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id) 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; Loading @@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id) 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; } Loading @@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data) 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; Loading @@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data) timer_data[id].data = data; out: spin_unlock_irqrestore(&timer_data_lock, flags); raw_spin_unlock_irqrestore(&timer_data_lock, flags); return ret; } Loading @@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id) 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); Loading @@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us) 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) Loading @@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us) 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; } Loading Loading
arch/mips/bcm63xx/timer.c +17 −17 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ #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 { Loading @@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id) 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; Loading @@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id) 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; Loading @@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id) 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; } Loading @@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id) 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; Loading @@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id) 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; } Loading @@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data) 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; Loading @@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data) timer_data[id].data = data; out: spin_unlock_irqrestore(&timer_data_lock, flags); raw_spin_unlock_irqrestore(&timer_data_lock, flags); return ret; } Loading @@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id) 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); Loading @@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us) 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) Loading @@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us) 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; } Loading