diff options
-rw-r--r-- | drivers/clocksource/time-armada-370-xp.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/clocksource/time-armada-370-xp.c b/drivers/clocksource/time-armada-370-xp.c index 2162796fd504..d93ec3c4f139 100644 --- a/drivers/clocksource/time-armada-370-xp.c +++ b/drivers/clocksource/time-armada-370-xp.c | |||
@@ -45,6 +45,8 @@ | |||
45 | #include <linux/percpu.h> | 45 | #include <linux/percpu.h> |
46 | #include <linux/syscore_ops.h> | 46 | #include <linux/syscore_ops.h> |
47 | 47 | ||
48 | #include <asm/delay.h> | ||
49 | |||
48 | /* | 50 | /* |
49 | * Timer block registers. | 51 | * Timer block registers. |
50 | */ | 52 | */ |
@@ -249,6 +251,15 @@ struct syscore_ops armada_370_xp_timer_syscore_ops = { | |||
249 | .resume = armada_370_xp_timer_resume, | 251 | .resume = armada_370_xp_timer_resume, |
250 | }; | 252 | }; |
251 | 253 | ||
254 | static unsigned long armada_370_delay_timer_read(void) | ||
255 | { | ||
256 | return ~readl(timer_base + TIMER0_VAL_OFF); | ||
257 | } | ||
258 | |||
259 | static struct delay_timer armada_370_delay_timer = { | ||
260 | .read_current_timer = armada_370_delay_timer_read, | ||
261 | }; | ||
262 | |||
252 | static void __init armada_370_xp_timer_common_init(struct device_node *np) | 263 | static void __init armada_370_xp_timer_common_init(struct device_node *np) |
253 | { | 264 | { |
254 | u32 clr = 0, set = 0; | 265 | u32 clr = 0, set = 0; |
@@ -287,6 +298,9 @@ static void __init armada_370_xp_timer_common_init(struct device_node *np) | |||
287 | TIMER0_RELOAD_EN | enable_mask, | 298 | TIMER0_RELOAD_EN | enable_mask, |
288 | TIMER0_RELOAD_EN | enable_mask); | 299 | TIMER0_RELOAD_EN | enable_mask); |
289 | 300 | ||
301 | armada_370_delay_timer.freq = timer_clk; | ||
302 | register_current_timer_delay(&armada_370_delay_timer); | ||
303 | |||
290 | /* | 304 | /* |
291 | * Set scale and timer for sched_clock. | 305 | * Set scale and timer for sched_clock. |
292 | */ | 306 | */ |