diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-03-01 15:00:25 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-03-01 15:00:25 -0500 |
| commit | 640c0f5c57864cbc1f495509bdc879fab94d4d9d (patch) | |
| tree | ee1e68209cf3a1ad5ff6edfcc684ee3724c5af7b | |
| parent | d7b48fec3520da075a4093d3aa37ce4daff7510b (diff) | |
| parent | e3eff6fe7d8a877d94f5dbb8fea46b4f8ca4ce5a (diff) | |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Ingo Molnar:
"Three clockevents/clocksource driver fixes"
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
clocksource: pxa: Fix section mismatch
clocksource: mtk: Fix race conditions in probe code
clockevents: asm9260: Fix compilation error with sparc/sparc64 allyesconfig
| -rw-r--r-- | arch/arm/mach-asm9260/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/clocksource/Kconfig | 16 | ||||
| -rw-r--r-- | drivers/clocksource/mtk_timer.c | 9 | ||||
| -rw-r--r-- | drivers/clocksource/pxa_timer.c | 2 |
4 files changed, 13 insertions, 16 deletions
diff --git a/arch/arm/mach-asm9260/Kconfig b/arch/arm/mach-asm9260/Kconfig index 8423be76080e..52241207a82a 100644 --- a/arch/arm/mach-asm9260/Kconfig +++ b/arch/arm/mach-asm9260/Kconfig | |||
| @@ -2,5 +2,7 @@ config MACH_ASM9260 | |||
| 2 | bool "Alphascale ASM9260" | 2 | bool "Alphascale ASM9260" |
| 3 | depends on ARCH_MULTI_V5 | 3 | depends on ARCH_MULTI_V5 |
| 4 | select CPU_ARM926T | 4 | select CPU_ARM926T |
| 5 | select ASM9260_TIMER | ||
| 6 | select GENERIC_CLOCKEVENTS | ||
| 5 | help | 7 | help |
| 6 | Support for Alphascale ASM9260 based platform. | 8 | Support for Alphascale ASM9260 based platform. |
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig index 1c2506f68122..68161f7a07d6 100644 --- a/drivers/clocksource/Kconfig +++ b/drivers/clocksource/Kconfig | |||
| @@ -63,6 +63,11 @@ config VT8500_TIMER | |||
| 63 | config CADENCE_TTC_TIMER | 63 | config CADENCE_TTC_TIMER |
| 64 | bool | 64 | bool |
| 65 | 65 | ||
| 66 | config ASM9260_TIMER | ||
| 67 | bool | ||
| 68 | select CLKSRC_MMIO | ||
| 69 | select CLKSRC_OF | ||
| 70 | |||
| 66 | config CLKSRC_NOMADIK_MTU | 71 | config CLKSRC_NOMADIK_MTU |
| 67 | bool | 72 | bool |
| 68 | depends on (ARCH_NOMADIK || ARCH_U8500) | 73 | depends on (ARCH_NOMADIK || ARCH_U8500) |
| @@ -245,15 +250,4 @@ config CLKSRC_PXA | |||
| 245 | help | 250 | help |
| 246 | This enables OST0 support available on PXA and SA-11x0 | 251 | This enables OST0 support available on PXA and SA-11x0 |
| 247 | platforms. | 252 | platforms. |
| 248 | |||
| 249 | config ASM9260_TIMER | ||
| 250 | bool "Alphascale ASM9260 timer driver" | ||
| 251 | depends on GENERIC_CLOCKEVENTS | ||
| 252 | select CLKSRC_MMIO | ||
| 253 | select CLKSRC_OF | ||
| 254 | default y if MACH_ASM9260 | ||
| 255 | help | ||
| 256 | This enables build of a clocksource and clockevent driver for | ||
| 257 | the 32-bit System Timer hardware available on a Alphascale ASM9260. | ||
| 258 | |||
| 259 | endmenu | 253 | endmenu |
diff --git a/drivers/clocksource/mtk_timer.c b/drivers/clocksource/mtk_timer.c index 32a3d25795d3..68ab42356d0e 100644 --- a/drivers/clocksource/mtk_timer.c +++ b/drivers/clocksource/mtk_timer.c | |||
| @@ -224,6 +224,8 @@ static void __init mtk_timer_init(struct device_node *node) | |||
| 224 | } | 224 | } |
| 225 | rate = clk_get_rate(clk); | 225 | rate = clk_get_rate(clk); |
| 226 | 226 | ||
| 227 | mtk_timer_global_reset(evt); | ||
| 228 | |||
| 227 | if (request_irq(evt->dev.irq, mtk_timer_interrupt, | 229 | if (request_irq(evt->dev.irq, mtk_timer_interrupt, |
| 228 | IRQF_TIMER | IRQF_IRQPOLL, "mtk_timer", evt)) { | 230 | IRQF_TIMER | IRQF_IRQPOLL, "mtk_timer", evt)) { |
| 229 | pr_warn("failed to setup irq %d\n", evt->dev.irq); | 231 | pr_warn("failed to setup irq %d\n", evt->dev.irq); |
| @@ -232,8 +234,6 @@ static void __init mtk_timer_init(struct device_node *node) | |||
| 232 | 234 | ||
| 233 | evt->ticks_per_jiffy = DIV_ROUND_UP(rate, HZ); | 235 | evt->ticks_per_jiffy = DIV_ROUND_UP(rate, HZ); |
| 234 | 236 | ||
| 235 | mtk_timer_global_reset(evt); | ||
| 236 | |||
| 237 | /* Configure clock source */ | 237 | /* Configure clock source */ |
| 238 | mtk_timer_setup(evt, GPT_CLK_SRC, TIMER_CTRL_OP_FREERUN); | 238 | mtk_timer_setup(evt, GPT_CLK_SRC, TIMER_CTRL_OP_FREERUN); |
| 239 | clocksource_mmio_init(evt->gpt_base + TIMER_CNT_REG(GPT_CLK_SRC), | 239 | clocksource_mmio_init(evt->gpt_base + TIMER_CNT_REG(GPT_CLK_SRC), |
| @@ -241,10 +241,11 @@ static void __init mtk_timer_init(struct device_node *node) | |||
| 241 | 241 | ||
| 242 | /* Configure clock event */ | 242 | /* Configure clock event */ |
| 243 | mtk_timer_setup(evt, GPT_CLK_EVT, TIMER_CTRL_OP_REPEAT); | 243 | mtk_timer_setup(evt, GPT_CLK_EVT, TIMER_CTRL_OP_REPEAT); |
| 244 | mtk_timer_enable_irq(evt, GPT_CLK_EVT); | ||
| 245 | |||
| 246 | clockevents_config_and_register(&evt->dev, rate, 0x3, | 244 | clockevents_config_and_register(&evt->dev, rate, 0x3, |
| 247 | 0xffffffff); | 245 | 0xffffffff); |
| 246 | |||
| 247 | mtk_timer_enable_irq(evt, GPT_CLK_EVT); | ||
| 248 | |||
| 248 | return; | 249 | return; |
| 249 | 250 | ||
| 250 | err_clk_disable: | 251 | err_clk_disable: |
diff --git a/drivers/clocksource/pxa_timer.c b/drivers/clocksource/pxa_timer.c index 941f3f344e08..d9438af2bbd6 100644 --- a/drivers/clocksource/pxa_timer.c +++ b/drivers/clocksource/pxa_timer.c | |||
| @@ -163,7 +163,7 @@ static struct irqaction pxa_ost0_irq = { | |||
| 163 | .dev_id = &ckevt_pxa_osmr0, | 163 | .dev_id = &ckevt_pxa_osmr0, |
| 164 | }; | 164 | }; |
| 165 | 165 | ||
| 166 | static void pxa_timer_common_init(int irq, unsigned long clock_tick_rate) | 166 | static void __init pxa_timer_common_init(int irq, unsigned long clock_tick_rate) |
| 167 | { | 167 | { |
| 168 | timer_writel(0, OIER); | 168 | timer_writel(0, OIER); |
| 169 | timer_writel(OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3, OSSR); | 169 | timer_writel(OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3, OSSR); |
