|
@@ -41,6 +41,16 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
|
|
|
if (c->x86 == 15 && c->x86_cache_alignment == 64)
|
|
|
c->x86_cache_alignment = 128;
|
|
|
#endif
|
|
|
+
|
|
|
+ /*
|
|
|
+ * c->x86_power is 8000_0007 edx. Bit 8 is TSC runs at constant rate
|
|
|
+ * with P/T states and does not stop in deep C-states
|
|
|
+ */
|
|
|
+ if (c->x86_power & (1 << 8)) {
|
|
|
+ set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
|
|
|
+ set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_X86_32
|
|
@@ -242,6 +252,13 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
|
|
|
|
|
|
intel_workarounds(c);
|
|
|
|
|
|
+ /*
|
|
|
+ * Detect the extended topology information if available. This
|
|
|
+ * will reinitialise the initial_apicid which will be used
|
|
|
+ * in init_intel_cacheinfo()
|
|
|
+ */
|
|
|
+ detect_extended_topology(c);
|
|
|
+
|
|
|
l2 = init_intel_cacheinfo(c);
|
|
|
if (c->cpuid_level > 9) {
|
|
|
unsigned eax = cpuid_eax(10);
|
|
@@ -312,7 +329,6 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
|
|
|
if (cpu_has_bts)
|
|
|
ptrace_bts_init_intel(c);
|
|
|
|
|
|
- detect_extended_topology(c);
|
|
|
if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) {
|
|
|
/*
|
|
|
* let's use the legacy cpuid vector 0x1 and 0x4 for topology
|