diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-27 19:19:22 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-27 19:19:22 -0500 |
commit | f1dd6ad599732fc89f36fdd65a2c2cf3c63a8711 (patch) | |
tree | 5092207128e47cba99dc0fe373fff6a36f4cb4b8 /arch/mips/bcm63xx/timer.c | |
parent | 8d37a371b6869920e6c40c495c68eabba1ef3909 (diff) | |
parent | e10b234b3c4e255d3300a486c4ac15b43253ac6d (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (141 commits)
MIPS: Alchemy: defconfig updates
MIPS: Alchemy: Fix Au1100 ethernet build failure
MIPS: Alchemy: Repair db1500/bosporus builds
MIPS: ARC: Cleanup unused definitions from sgialib.h
MIPS: Cobalt: convert legacy port addresses to GT-64111 bus addresses
MIPS: Alchemy: use 36bit addresses for PCMCIA resources.
MIPS: Cobalt: Fix theoretical port aliasing issue
MIPS: Use ALIGN(x, bytes) instead of __ALIGN_MASK(x, bytes - 1)
MIPS: Crazy spinlock speed test.
MIPS: Optimize spinlocks.
MIPS: Alchemy: devboard PM needs to save CPLD registers.
MIPS: PowerTV: Eliminate duplicate opcode definition macros
MIPS: Lemote 2F: Move printks out of port_access_lock.
MIPS: PNX833x: Convert IRQ controller locks to raw spinlocks.
MIPS: Octeon: Replace spinlock with raw_spinlocks in dma-octeon.c.
MIPS: Octeon: Replace rwlocks in irq_chip handlers with raw_spinlocks.
MIPS: Octeon: Convert octeon_irq_msi_lock to raw spinlock.
MIPS: Loongson: Remove pointless sample_lock from oprofile code.
MIPS: SNI: Convert sni_rm200_i8259A_lock to raw spinlock.
MIPS: i8259: Convert IRQ controller lock to raw spinlock.
...
Diffstat (limited to 'arch/mips/bcm63xx/timer.c')
-rw-r--r-- | arch/mips/bcm63xx/timer.c | 34 |
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 | ||
20 | static DEFINE_SPINLOCK(timer_reg_lock); | 20 | static DEFINE_RAW_SPINLOCK(timer_reg_lock); |
21 | static DEFINE_SPINLOCK(timer_data_lock); | 21 | static DEFINE_RAW_SPINLOCK(timer_data_lock); |
22 | static struct clk *periph_clk; | 22 | static struct clk *periph_clk; |
23 | 23 | ||
24 | static struct timer_data { | 24 | static 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 | ||
122 | out: | 122 | out: |
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 | ||
141 | EXPORT_SYMBOL(bcm63xx_timer_unregister); | 141 | EXPORT_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 | ||