diff options
author | Magnus Damm <damm@igel.co.jp> | 2009-04-28 08:19:50 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-04-28 18:01:25 +0900 |
commit | 8e0b842948156e3463879caed12b4ce51bed772e (patch) | |
tree | 0c5e01d3103e886a89e5663ac02552e04472f8d3 /arch/sh | |
parent | 5b644c7a218702668d7b610994e7dcbc3d4705d3 (diff) | |
download | linux-3.10-8e0b842948156e3463879caed12b4ce51bed772e.tar.gz linux-3.10-8e0b842948156e3463879caed12b4ce51bed772e.tar.bz2 linux-3.10-8e0b842948156e3463879caed12b4ce51bed772e.zip |
sh: setup timers in late_time_init()
This patch moves the SuperH timer setup code from time_init()
to late_time_init(). Good things about this change:
- interrupts: they are enabled at late_time_init()
- mm: regular kmalloc() can be used at late_time_init()
Together with moving to late_time_init() this patch changes
the sh_cmt driver to always allocate with kmalloc(). This
simplifies the code a bit and also fixes section mismatches.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/kernel/time_32.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/arch/sh/kernel/time_32.c b/arch/sh/kernel/time_32.c index 109409f5ca5..a2458bfdda2 100644 --- a/arch/sh/kernel/time_32.c +++ b/arch/sh/kernel/time_32.c @@ -237,21 +237,8 @@ unsigned long long sched_clock(void) } #endif -void __init time_init(void) +static void __init sh_late_time_init(void) { - if (board_time_init) - board_time_init(); - - clk_init(); - - rtc_sh_get_time(&xtime); - set_normalized_timespec(&wall_to_monotonic, - -xtime.tv_sec, -xtime.tv_nsec); - -#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST - local_timer_setup(smp_processor_id()); -#endif - /* * Make sure all compiled-in early timers register themselves. * Run probe() for one "earlytimer" device. @@ -270,3 +257,22 @@ void __init time_init(void) printk(KERN_INFO "Using %s for system timer\n", sys_timer->name); } + +void __init time_init(void) +{ + if (board_time_init) + board_time_init(); + + clk_init(); + + rtc_sh_get_time(&xtime); + set_normalized_timespec(&wall_to_monotonic, + -xtime.tv_sec, -xtime.tv_nsec); + +#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST + local_timer_setup(smp_processor_id()); +#endif + + late_time_init = sh_late_time_init; +} + |