aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/cpu/intel.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/cpu/intel.c')
-rw-r--r--arch/x86/kernel/cpu/intel.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index d72377c41c76..f5e5390d3459 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -46,6 +46,27 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
46 (c->x86 == 0x6 && c->x86_model >= 0x0e)) 46 (c->x86 == 0x6 && c->x86_model >= 0x0e))
47 set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); 47 set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
48 48
49 /*
50 * Atom erratum AAE44/AAF40/AAG38/AAH41:
51 *
52 * A race condition between speculative fetches and invalidating
53 * a large page. This is worked around in microcode, but we
54 * need the microcode to have already been loaded... so if it is
55 * not, recommend a BIOS update and disable large pages.
56 */
57 if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2) {
58 u32 ucode, junk;
59
60 wrmsr(MSR_IA32_UCODE_REV, 0, 0);
61 sync_core();
62 rdmsr(MSR_IA32_UCODE_REV, junk, ucode);
63
64 if (ucode < 0x20e) {
65 printk(KERN_WARNING "Atom PSE erratum detected, BIOS microcode update recommended\n");
66 clear_cpu_cap(c, X86_FEATURE_PSE);
67 }
68 }
69
49#ifdef CONFIG_X86_64 70#ifdef CONFIG_X86_64
50 set_cpu_cap(c, X86_FEATURE_SYSENTER32); 71 set_cpu_cap(c, X86_FEATURE_SYSENTER32);
51#else 72#else