diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-03-05 11:46:31 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-03-05 11:46:31 -0500 |
commit | 9ab2b7f3acfa5490f36c9e5774a2bfecd01943db (patch) | |
tree | 2dace8accf2d326c7d1b0e08231fe3a27403a9ec | |
parent | 13a7a6ac0a11197edcd0f756a035f472b42cdf8b (diff) | |
parent | 1096be084ac59927158ce80ff1d31c33eed0e565 (diff) |
Merge branch 'clockevents/4.0-rc2' of http://git.linaro.org/people/daniel.lezcano/linux into timers/urgent
Pull clockevents fixes from Daniel Lezcano:
" These two patches fix a potential crash at boot time.
- Fix setup_irq / clockevents_config_and_register init ordering in order to
prevent to have an interrupt to be fired before the handler is set for sun5i
and efm32. (Yongbae Park)"
Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r-- | drivers/clocksource/time-efm32.c | 4 | ||||
-rw-r--r-- | drivers/clocksource/timer-sun5i.c | 8 |
2 files changed, 6 insertions, 6 deletions
diff --git a/drivers/clocksource/time-efm32.c b/drivers/clocksource/time-efm32.c index bba62f9deefb..ec57ba2bbd87 100644 --- a/drivers/clocksource/time-efm32.c +++ b/drivers/clocksource/time-efm32.c | |||
@@ -225,12 +225,12 @@ static int __init efm32_clockevent_init(struct device_node *np) | |||
225 | clock_event_ddata.base = base; | 225 | clock_event_ddata.base = base; |
226 | clock_event_ddata.periodic_top = DIV_ROUND_CLOSEST(rate, 1024 * HZ); | 226 | clock_event_ddata.periodic_top = DIV_ROUND_CLOSEST(rate, 1024 * HZ); |
227 | 227 | ||
228 | setup_irq(irq, &efm32_clock_event_irq); | ||
229 | |||
230 | clockevents_config_and_register(&clock_event_ddata.evtdev, | 228 | clockevents_config_and_register(&clock_event_ddata.evtdev, |
231 | DIV_ROUND_CLOSEST(rate, 1024), | 229 | DIV_ROUND_CLOSEST(rate, 1024), |
232 | 0xf, 0xffff); | 230 | 0xf, 0xffff); |
233 | 231 | ||
232 | setup_irq(irq, &efm32_clock_event_irq); | ||
233 | |||
234 | return 0; | 234 | return 0; |
235 | 235 | ||
236 | err_get_irq: | 236 | err_get_irq: |
diff --git a/drivers/clocksource/timer-sun5i.c b/drivers/clocksource/timer-sun5i.c index 02268448dc85..5dcbf90b8015 100644 --- a/drivers/clocksource/timer-sun5i.c +++ b/drivers/clocksource/timer-sun5i.c | |||
@@ -178,10 +178,6 @@ static void __init sun5i_timer_init(struct device_node *node) | |||
178 | 178 | ||
179 | ticks_per_jiffy = DIV_ROUND_UP(rate, HZ); | 179 | ticks_per_jiffy = DIV_ROUND_UP(rate, HZ); |
180 | 180 | ||
181 | ret = setup_irq(irq, &sun5i_timer_irq); | ||
182 | if (ret) | ||
183 | pr_warn("failed to setup irq %d\n", irq); | ||
184 | |||
185 | /* Enable timer0 interrupt */ | 181 | /* Enable timer0 interrupt */ |
186 | val = readl(timer_base + TIMER_IRQ_EN_REG); | 182 | val = readl(timer_base + TIMER_IRQ_EN_REG); |
187 | writel(val | TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_EN_REG); | 183 | writel(val | TIMER_IRQ_EN(0), timer_base + TIMER_IRQ_EN_REG); |
@@ -191,6 +187,10 @@ static void __init sun5i_timer_init(struct device_node *node) | |||
191 | 187 | ||
192 | clockevents_config_and_register(&sun5i_clockevent, rate, | 188 | clockevents_config_and_register(&sun5i_clockevent, rate, |
193 | TIMER_SYNC_TICKS, 0xffffffff); | 189 | TIMER_SYNC_TICKS, 0xffffffff); |
190 | |||
191 | ret = setup_irq(irq, &sun5i_timer_irq); | ||
192 | if (ret) | ||
193 | pr_warn("failed to setup irq %d\n", irq); | ||
194 | } | 194 | } |
195 | CLOCKSOURCE_OF_DECLARE(sun5i_a13, "allwinner,sun5i-a13-hstimer", | 195 | CLOCKSOURCE_OF_DECLARE(sun5i_a13, "allwinner,sun5i-a13-hstimer", |
196 | sun5i_timer_init); | 196 | sun5i_timer_init); |