diff options
-rw-r--r-- | arch/arm/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/plat-mxc/time.c | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 599e1634840d..f4027abac8aa 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -362,6 +362,7 @@ config ARCH_MXC | |||
362 | select GENERIC_CLOCKEVENTS | 362 | select GENERIC_CLOCKEVENTS |
363 | select ARCH_REQUIRE_GPIOLIB | 363 | select ARCH_REQUIRE_GPIOLIB |
364 | select CLKDEV_LOOKUP | 364 | select CLKDEV_LOOKUP |
365 | select HAVE_SCHED_CLOCK | ||
365 | help | 366 | help |
366 | Support for Freescale MXC/iMX-based family of processors | 367 | Support for Freescale MXC/iMX-based family of processors |
367 | 368 | ||
diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/plat-mxc/time.c index 0142e4b2e12e..2237ff8b434f 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/plat-mxc/time.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | 28 | ||
29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
30 | #include <asm/sched_clock.h> | ||
30 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
31 | #include <mach/common.h> | 32 | #include <mach/common.h> |
32 | 33 | ||
@@ -128,6 +129,20 @@ static struct clocksource clocksource_mxc = { | |||
128 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 129 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
129 | }; | 130 | }; |
130 | 131 | ||
132 | static DEFINE_CLOCK_DATA(cd); | ||
133 | unsigned long long notrace sched_clock(void) | ||
134 | { | ||
135 | cycle_t cyc = clocksource_mxc.read(&clocksource_mxc); | ||
136 | |||
137 | return cyc_to_sched_clock(&cd, cyc, (u32)~0); | ||
138 | } | ||
139 | |||
140 | static void notrace mxc_update_sched_clock(void) | ||
141 | { | ||
142 | cycle_t cyc = clocksource_mxc.read(&clocksource_mxc); | ||
143 | update_sched_clock(&cd, cyc, (u32)~0); | ||
144 | } | ||
145 | |||
131 | static int __init mxc_clocksource_init(struct clk *timer_clk) | 146 | static int __init mxc_clocksource_init(struct clk *timer_clk) |
132 | { | 147 | { |
133 | unsigned int c = clk_get_rate(timer_clk); | 148 | unsigned int c = clk_get_rate(timer_clk); |
@@ -137,6 +152,7 @@ static int __init mxc_clocksource_init(struct clk *timer_clk) | |||
137 | else | 152 | else |
138 | clocksource_mxc.read = mx1_2_get_cycles; | 153 | clocksource_mxc.read = mx1_2_get_cycles; |
139 | 154 | ||
155 | init_sched_clock(&cd, mxc_update_sched_clock, 32, c); | ||
140 | clocksource_register_hz(&clocksource_mxc, c); | 156 | clocksource_register_hz(&clocksource_mxc, c); |
141 | 157 | ||
142 | return 0; | 158 | return 0; |