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); |
