|
@@ -626,6 +626,14 @@ void __init mtrr_bp_init(void)
|
|
|
if (cpuid_eax(0x80000000) >= 0x80000008) {
|
|
|
u32 phys_addr;
|
|
|
phys_addr = cpuid_eax(0x80000008) & 0xff;
|
|
|
+ /* CPUID workaround for Intel 0F33/0F34 CPU */
|
|
|
+ if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
|
|
|
+ boot_cpu_data.x86 == 0xF &&
|
|
|
+ boot_cpu_data.x86_model == 0x3 &&
|
|
|
+ (boot_cpu_data.x86_mask == 0x3 ||
|
|
|
+ boot_cpu_data.x86_mask == 0x4))
|
|
|
+ phys_addr = 36;
|
|
|
+
|
|
|
size_or_mask = ~((1 << (phys_addr - PAGE_SHIFT)) - 1);
|
|
|
size_and_mask = ~size_or_mask & 0xfff00000;
|
|
|
} else if (boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR &&
|