diff options
Diffstat (limited to 'arch/x86/kernel/cpu')
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/powernow-k8.c | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/intel.c | 21 |
2 files changed, 23 insertions, 1 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 6e44519960c8..3b5ea3831c26 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
| @@ -929,7 +929,8 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, | |||
| 929 | powernow_table[i].index = index; | 929 | powernow_table[i].index = index; |
| 930 | 930 | ||
| 931 | /* Frequency may be rounded for these */ | 931 | /* Frequency may be rounded for these */ |
| 932 | if (boot_cpu_data.x86 == 0x10 || boot_cpu_data.x86 == 0x11) { | 932 | if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10) |
| 933 | || boot_cpu_data.x86 == 0x11) { | ||
| 933 | powernow_table[i].frequency = | 934 | powernow_table[i].frequency = |
| 934 | freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7); | 935 | freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7); |
| 935 | } else | 936 | } else |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 7e1cca13af35..1366c7cfd483 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
| @@ -47,6 +47,27 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | |||
| 47 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) | 47 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) |
| 48 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); | 48 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); |
| 49 | 49 | ||
| 50 | /* | ||
| 51 | * Atom erratum AAE44/AAF40/AAG38/AAH41: | ||
| 52 | * | ||
| 53 | * A race condition between speculative fetches and invalidating | ||
| 54 | * a large page. This is worked around in microcode, but we | ||
| 55 | * need the microcode to have already been loaded... so if it is | ||
| 56 | * not, recommend a BIOS update and disable large pages. | ||
| 57 | */ | ||
| 58 | if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2) { | ||
| 59 | u32 ucode, junk; | ||
| 60 | |||
| 61 | wrmsr(MSR_IA32_UCODE_REV, 0, 0); | ||
| 62 | sync_core(); | ||
| 63 | rdmsr(MSR_IA32_UCODE_REV, junk, ucode); | ||
| 64 | |||
| 65 | if (ucode < 0x20e) { | ||
| 66 | printk(KERN_WARNING "Atom PSE erratum detected, BIOS microcode update recommended\n"); | ||
| 67 | clear_cpu_cap(c, X86_FEATURE_PSE); | ||
| 68 | } | ||
| 69 | } | ||
| 70 | |||
| 50 | #ifdef CONFIG_X86_64 | 71 | #ifdef CONFIG_X86_64 |
| 51 | set_cpu_cap(c, X86_FEATURE_SYSENTER32); | 72 | set_cpu_cap(c, X86_FEATURE_SYSENTER32); |
| 52 | #else | 73 | #else |
