Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8d607d5 authored by Ralf Baechle's avatar Ralf Baechle
Browse files

MIPS: BCM63xx: Convert timer locks to raw spinlocks.

parent c45ef44f
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -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 {
@@ -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;
@@ -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;
@@ -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;
}

@@ -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;
@@ -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;
}

@@ -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;
@@ -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;
}

@@ -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);
@@ -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)
@@ -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;
}