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/clocksource | |
| 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/clocksource')
| -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 | } |
