aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/bcm63xx/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/bcm63xx/timer.c')
-rw-r--r--arch/mips/bcm63xx/timer.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/arch/mips/bcm63xx/timer.c b/arch/mips/bcm63xx/timer.c
index ba522bdcde4b..5f1135981568 100644
--- a/arch/mips/bcm63xx/timer.c
+++ b/arch/mips/bcm63xx/timer.c
@@ -17,8 +17,8 @@
17#include <bcm63xx_timer.h> 17#include <bcm63xx_timer.h>
18#include <bcm63xx_regs.h> 18#include <bcm63xx_regs.h>
19 19
20static DEFINE_SPINLOCK(timer_reg_lock); 20static DEFINE_RAW_SPINLOCK(timer_reg_lock);
21static DEFINE_SPINLOCK(timer_data_lock); 21static DEFINE_RAW_SPINLOCK(timer_data_lock);
22static struct clk *periph_clk; 22static struct clk *periph_clk;
23 23
24static struct timer_data { 24static struct timer_data {
@@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
31 u32 stat; 31 u32 stat;
32 int i; 32 int i;
33 33
34 spin_lock(&timer_reg_lock); 34 raw_spin_lock(&timer_reg_lock);
35 stat = bcm_timer_readl(TIMER_IRQSTAT_REG); 35 stat = bcm_timer_readl(TIMER_IRQSTAT_REG);
36 bcm_timer_writel(stat, TIMER_IRQSTAT_REG); 36 bcm_timer_writel(stat, TIMER_IRQSTAT_REG);
37 spin_unlock(&timer_reg_lock); 37 raw_spin_unlock(&timer_reg_lock);
38 38
39 for (i = 0; i < BCM63XX_TIMER_COUNT; i++) { 39 for (i = 0; i < BCM63XX_TIMER_COUNT; i++) {
40 if (!(stat & TIMER_IRQSTAT_TIMER_CAUSE(i))) 40 if (!(stat & TIMER_IRQSTAT_TIMER_CAUSE(i)))
41 continue; 41 continue;
42 42
43 spin_lock(&timer_data_lock); 43 raw_spin_lock(&timer_data_lock);
44 if (!timer_data[i].cb) { 44 if (!timer_data[i].cb) {
45 spin_unlock(&timer_data_lock); 45 raw_spin_unlock(&timer_data_lock);
46 continue; 46 continue;
47 } 47 }
48 48
49 timer_data[i].cb(timer_data[i].data); 49 timer_data[i].cb(timer_data[i].data);
50 spin_unlock(&timer_data_lock); 50 raw_spin_unlock(&timer_data_lock);
51 } 51 }
52 52
53 return IRQ_HANDLED; 53 return IRQ_HANDLED;
@@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id)
61 if (id >= BCM63XX_TIMER_COUNT) 61 if (id >= BCM63XX_TIMER_COUNT)
62 return -EINVAL; 62 return -EINVAL;
63 63
64 spin_lock_irqsave(&timer_reg_lock, flags); 64 raw_spin_lock_irqsave(&timer_reg_lock, flags);
65 65
66 reg = bcm_timer_readl(TIMER_CTLx_REG(id)); 66 reg = bcm_timer_readl(TIMER_CTLx_REG(id));
67 reg |= TIMER_CTL_ENABLE_MASK; 67 reg |= TIMER_CTL_ENABLE_MASK;
@@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id)
71 reg |= TIMER_IRQSTAT_TIMER_IR_EN(id); 71 reg |= TIMER_IRQSTAT_TIMER_IR_EN(id);
72 bcm_timer_writel(reg, TIMER_IRQSTAT_REG); 72 bcm_timer_writel(reg, TIMER_IRQSTAT_REG);
73 73
74 spin_unlock_irqrestore(&timer_reg_lock, flags); 74 raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
75 return 0; 75 return 0;
76} 76}
77 77
@@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id)
85 if (id >= BCM63XX_TIMER_COUNT) 85 if (id >= BCM63XX_TIMER_COUNT)
86 return -EINVAL; 86 return -EINVAL;
87 87
88 spin_lock_irqsave(&timer_reg_lock, flags); 88 raw_spin_lock_irqsave(&timer_reg_lock, flags);
89 89
90 reg = bcm_timer_readl(TIMER_CTLx_REG(id)); 90 reg = bcm_timer_readl(TIMER_CTLx_REG(id));
91 reg &= ~TIMER_CTL_ENABLE_MASK; 91 reg &= ~TIMER_CTL_ENABLE_MASK;
@@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id)
95 reg &= ~TIMER_IRQSTAT_TIMER_IR_EN(id); 95 reg &= ~TIMER_IRQSTAT_TIMER_IR_EN(id);
96 bcm_timer_writel(reg, TIMER_IRQSTAT_REG); 96 bcm_timer_writel(reg, TIMER_IRQSTAT_REG);
97 97
98 spin_unlock_irqrestore(&timer_reg_lock, flags); 98 raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
99 return 0; 99 return 0;
100} 100}
101 101
@@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
110 return -EINVAL; 110 return -EINVAL;
111 111
112 ret = 0; 112 ret = 0;
113 spin_lock_irqsave(&timer_data_lock, flags); 113 raw_spin_lock_irqsave(&timer_data_lock, flags);
114 if (timer_data[id].cb) { 114 if (timer_data[id].cb) {
115 ret = -EBUSY; 115 ret = -EBUSY;
116 goto out; 116 goto out;
@@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
120 timer_data[id].data = data; 120 timer_data[id].data = data;
121 121
122out: 122out:
123 spin_unlock_irqrestore(&timer_data_lock, flags); 123 raw_spin_unlock_irqrestore(&timer_data_lock, flags);
124 return ret; 124 return ret;
125} 125}
126 126
@@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id)
133 if (id >= BCM63XX_TIMER_COUNT) 133 if (id >= BCM63XX_TIMER_COUNT)
134 return; 134 return;
135 135
136 spin_lock_irqsave(&timer_data_lock, flags); 136 raw_spin_lock_irqsave(&timer_data_lock, flags);
137 timer_data[id].cb = NULL; 137 timer_data[id].cb = NULL;
138 spin_unlock_irqrestore(&timer_data_lock, flags); 138 raw_spin_unlock_irqrestore(&timer_data_lock, flags);
139} 139}
140 140
141EXPORT_SYMBOL(bcm63xx_timer_unregister); 141EXPORT_SYMBOL(bcm63xx_timer_unregister);
@@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
159 if (countdown & ~TIMER_CTL_COUNTDOWN_MASK) 159 if (countdown & ~TIMER_CTL_COUNTDOWN_MASK)
160 return -EINVAL; 160 return -EINVAL;
161 161
162 spin_lock_irqsave(&timer_reg_lock, flags); 162 raw_spin_lock_irqsave(&timer_reg_lock, flags);
163 reg = bcm_timer_readl(TIMER_CTLx_REG(id)); 163 reg = bcm_timer_readl(TIMER_CTLx_REG(id));
164 164
165 if (monotonic) 165 if (monotonic)
@@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
171 reg |= countdown; 171 reg |= countdown;
172 bcm_timer_writel(reg, TIMER_CTLx_REG(id)); 172 bcm_timer_writel(reg, TIMER_CTLx_REG(id));
173 173
174 spin_unlock_irqrestore(&timer_reg_lock, flags); 174 raw_spin_unlock_irqrestore(&timer_reg_lock, flags);
175 return 0; 175 return 0;
176} 176}
177 177