diff options
Diffstat (limited to 'arch/x86/kernel')
| -rw-r--r-- | arch/x86/kernel/cpu/addon_cpuid_features.c | 34 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/common.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/intel.c | 12 |
3 files changed, 12 insertions, 36 deletions
diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/addon_cpuid_features.c index 2cf23634b6d..4e581fdc0a5 100644 --- a/arch/x86/kernel/cpu/addon_cpuid_features.c +++ b/arch/x86/kernel/cpu/addon_cpuid_features.c | |||
| @@ -143,37 +143,3 @@ void __cpuinit detect_extended_topology(struct cpuinfo_x86 *c) | |||
| 143 | return; | 143 | return; |
| 144 | #endif | 144 | #endif |
| 145 | } | 145 | } |
| 146 | |||
| 147 | #ifdef CONFIG_X86_PAT | ||
| 148 | void __cpuinit validate_pat_support(struct cpuinfo_x86 *c) | ||
| 149 | { | ||
| 150 | if (!cpu_has_pat) | ||
| 151 | pat_disable("PAT not supported by CPU."); | ||
| 152 | |||
| 153 | switch (c->x86_vendor) { | ||
| 154 | case X86_VENDOR_INTEL: | ||
| 155 | /* | ||
| 156 | * There is a known erratum on Pentium III and Core Solo | ||
| 157 | * and Core Duo CPUs. | ||
| 158 | * " Page with PAT set to WC while associated MTRR is UC | ||
| 159 | * may consolidate to UC " | ||
| 160 | * Because of this erratum, it is better to stick with | ||
| 161 | * setting WC in MTRR rather than using PAT on these CPUs. | ||
| 162 | * | ||
| 163 | * Enable PAT WC only on P4, Core 2 or later CPUs. | ||
| 164 | */ | ||
| 165 | if (c->x86 > 0x6 || (c->x86 == 6 && c->x86_model >= 15)) | ||
| 166 | return; | ||
| 167 | |||
| 168 | pat_disable("PAT WC disabled due to known CPU erratum."); | ||
| 169 | return; | ||
| 170 | |||
| 171 | case X86_VENDOR_AMD: | ||
| 172 | case X86_VENDOR_CENTAUR: | ||
| 173 | case X86_VENDOR_TRANSMETA: | ||
| 174 | return; | ||
| 175 | } | ||
| 176 | |||
| 177 | pat_disable("PAT disabled. Not yet verified on this CPU type."); | ||
| 178 | } | ||
| 179 | #endif | ||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 83492b1f93b..0f8656361e0 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
| @@ -570,8 +570,6 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) | |||
| 570 | if (this_cpu->c_early_init) | 570 | if (this_cpu->c_early_init) |
| 571 | this_cpu->c_early_init(c); | 571 | this_cpu->c_early_init(c); |
| 572 | 572 | ||
| 573 | validate_pat_support(c); | ||
| 574 | |||
| 575 | #ifdef CONFIG_SMP | 573 | #ifdef CONFIG_SMP |
| 576 | c->cpu_index = boot_cpu_id; | 574 | c->cpu_index = boot_cpu_id; |
| 577 | #endif | 575 | #endif |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 8ea6929e974..20ce03acf04 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
| @@ -50,6 +50,18 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | |||
| 50 | set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC); | 50 | set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC); |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | /* | ||
| 54 | * There is a known erratum on Pentium III and Core Solo | ||
| 55 | * and Core Duo CPUs. | ||
| 56 | * " Page with PAT set to WC while associated MTRR is UC | ||
| 57 | * may consolidate to UC " | ||
| 58 | * Because of this erratum, it is better to stick with | ||
| 59 | * setting WC in MTRR rather than using PAT on these CPUs. | ||
| 60 | * | ||
| 61 | * Enable PAT WC only on P4, Core 2 or later CPUs. | ||
| 62 | */ | ||
| 63 | if (c->x86 == 6 && c->x86_model < 15) | ||
| 64 | clear_cpu_cap(c, X86_FEATURE_PAT); | ||
| 53 | } | 65 | } |
| 54 | 66 | ||
| 55 | #ifdef CONFIG_X86_32 | 67 | #ifdef CONFIG_X86_32 |
