aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/time_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/time_64.c')
-rw-r--r--arch/x86/kernel/time_64.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/x86/kernel/time_64.c b/arch/x86/kernel/time_64.c
index bf0bcc9bb001..91d4d495904e 100644
--- a/arch/x86/kernel/time_64.c
+++ b/arch/x86/kernel/time_64.c
@@ -21,6 +21,8 @@
21#include <asm/hpet.h> 21#include <asm/hpet.h>
22#include <asm/nmi.h> 22#include <asm/nmi.h>
23#include <asm/vgtod.h> 23#include <asm/vgtod.h>
24#include <asm/time.h>
25#include <asm/timer.h>
24 26
25volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES; 27volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES;
26 28
@@ -54,7 +56,7 @@ static irqreturn_t timer_event_interrupt(int irq, void *dev_id)
54/* calibrate_cpu is used on systems with fixed rate TSCs to determine 56/* calibrate_cpu is used on systems with fixed rate TSCs to determine
55 * processor frequency */ 57 * processor frequency */
56#define TICK_COUNT 100000000 58#define TICK_COUNT 100000000
57static unsigned int __init tsc_calibrate_cpu_khz(void) 59unsigned long __init native_calculate_cpu_khz(void)
58{ 60{
59 int tsc_start, tsc_now; 61 int tsc_start, tsc_now;
60 int i, no_ctr_free; 62 int i, no_ctr_free;
@@ -104,20 +106,23 @@ static struct irqaction irq0 = {
104 .name = "timer" 106 .name = "timer"
105}; 107};
106 108
107void __init time_init(void) 109void __init hpet_time_init(void)
108{ 110{
109 if (!hpet_enable()) 111 if (!hpet_enable())
110 setup_pit_timer(); 112 setup_pit_timer();
111 113
112 setup_irq(0, &irq0); 114 setup_irq(0, &irq0);
115}
113 116
117void __init time_init(void)
118{
114 tsc_calibrate(); 119 tsc_calibrate();
115 120
116 cpu_khz = tsc_khz; 121 cpu_khz = tsc_khz;
117 if (cpu_has(&boot_cpu_data, X86_FEATURE_CONSTANT_TSC) && 122 if (cpu_has(&boot_cpu_data, X86_FEATURE_CONSTANT_TSC) &&
118 boot_cpu_data.x86_vendor == X86_VENDOR_AMD && 123 boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
119 boot_cpu_data.x86 == 16) 124 boot_cpu_data.x86 == 16)
120 cpu_khz = tsc_calibrate_cpu_khz(); 125 cpu_khz = calculate_cpu_khz();
121 126
122 if (unsynchronized_tsc()) 127 if (unsynchronized_tsc())
123 mark_tsc_unstable("TSCs unsynchronized"); 128 mark_tsc_unstable("TSCs unsynchronized");
@@ -130,4 +135,5 @@ void __init time_init(void)
130 printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n", 135 printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n",
131 cpu_khz / 1000, cpu_khz % 1000); 136 cpu_khz / 1000, cpu_khz % 1000);
132 init_tsc_clocksource(); 137 init_tsc_clocksource();
138 late_time_init = choose_time_init();
133} 139}