diff options
author | Magnus Damm <damm@igel.co.jp> | 2009-06-17 01:04:04 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-06-17 02:39:56 -0400 |
commit | be890a1a95fb439594e796f1968f86ee9f36e718 (patch) | |
tree | 89a1107bfae107e43f544fb2041ca13a92b946b5 /drivers | |
parent | 4c7eb4ebc9001ce343969f58fa538e164e82000b (diff) |
sh: turn off irqs when disabling CMT/TMU timers
Modify the CMT and TMU drivers to disable interrupts when
disabling the timer. Only using start/stop bits is not
enough.
This fixes a bootup hang on Migo-R when the CMT is replaced
by TMU for clockevents but the CMT keeps on delivering irqs
even though the timer start bit is off.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/clocksource/sh_cmt.c | 3 | ||||
-rw-r--r-- | drivers/clocksource/sh_tmu.c | 3 |
2 files changed, 6 insertions, 0 deletions
diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c index 7135f50082d6..2964f5f4a7ef 100644 --- a/drivers/clocksource/sh_cmt.c +++ b/drivers/clocksource/sh_cmt.c | |||
@@ -184,6 +184,9 @@ static void sh_cmt_disable(struct sh_cmt_priv *p) | |||
184 | /* disable channel */ | 184 | /* disable channel */ |
185 | sh_cmt_start_stop_ch(p, 0); | 185 | sh_cmt_start_stop_ch(p, 0); |
186 | 186 | ||
187 | /* disable interrupts in CMT block */ | ||
188 | sh_cmt_write(p, CMCSR, 0); | ||
189 | |||
187 | /* stop clock */ | 190 | /* stop clock */ |
188 | clk_disable(p->clk); | 191 | clk_disable(p->clk); |
189 | } | 192 | } |
diff --git a/drivers/clocksource/sh_tmu.c b/drivers/clocksource/sh_tmu.c index 08e6ec2cb094..9ffb05f4095d 100644 --- a/drivers/clocksource/sh_tmu.c +++ b/drivers/clocksource/sh_tmu.c | |||
@@ -138,6 +138,9 @@ static void sh_tmu_disable(struct sh_tmu_priv *p) | |||
138 | /* disable channel */ | 138 | /* disable channel */ |
139 | sh_tmu_start_stop_ch(p, 0); | 139 | sh_tmu_start_stop_ch(p, 0); |
140 | 140 | ||
141 | /* disable interrupts in TMU block */ | ||
142 | sh_tmu_write(p, TCR, 0x0000); | ||
143 | |||
141 | /* stop clock */ | 144 | /* stop clock */ |
142 | clk_disable(p->clk); | 145 | clk_disable(p->clk); |
143 | } | 146 | } |