On 02/07/13 17:09, Jon Medhurst (Tixy) wrote: > On Tue, 2013-06-18 at 18:07 +0100, Sudeep KarkadaNagesha wrote: >> From: Sudeep KarkadaNagesha <[email protected]> >> >> Few control settings done in architected timer as part of initialisation >> are lost when CPU enters deeper power states. They need to be re-initialised >> when the CPU is (warm)reset again. >> >> This patch moves all such initialisation into separate function that can >> be used both in cold and warm CPU reset paths. It also adds CPU PM >> notifiers to do the timer initialisation on warm resets. >> >> Signed-off-by: Sudeep KarkadaNagesha <[email protected]> >> Reviewed-by: Lorenzo Pieralisi <[email protected]> >> Reviewed-by: Will Deacon <[email protected]> >> --- >> drivers/clocksource/arm_arch_timer.c | 51 >> +++++++++++++++++++++++++++++++----- >> 1 file changed, 44 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/clocksource/arm_arch_timer.c >> b/drivers/clocksource/arm_arch_timer.c >> index 11aaf06..1c691b1 100644 >> --- a/drivers/clocksource/arm_arch_timer.c >> +++ b/drivers/clocksource/arm_arch_timer.c >> @@ -13,6 +13,7 @@ >> #include <linux/device.h> >> #include <linux/smp.h> >> #include <linux/cpu.h> >> +#include <linux/cpu_pm.h> >> #include <linux/clockchips.h> >> #include <linux/interrupt.h> >> #include <linux/of_irq.h> >> @@ -123,10 +124,20 @@ static int arch_timer_set_next_event_phys(unsigned >> long evt, >> return 0; >> } >> >> -static int __cpuinit arch_timer_setup(struct clock_event_device *clk) >> +static void arch_timer_initialise(void) >> { >> int evt_stream_div, pos; >> >> + /* Find the closest power of two to the divisor */ >> + evt_stream_div = arch_timer_rate / ARCH_TIMER_EVT_STREAM_FREQ; >> + pos = fls(evt_stream_div); >> + if (pos > 1 && !(evt_stream_div & (1 << (pos - 2)))) >> + pos--; >> + arch_counter_set_user_access(min(pos, 15)); > > Would it not be good to calculate the value once in arch_timer_setup > rather than repeatedly in this function? The calculations aren't that > expensive, but when I gave these patches a spin on TC2 I noticed that > this function gets called >500 times a second, so it seems a bit > wasteful. > Makes sense, will save the divider and re-use it.
Regards, Sudeep -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

