From 66c348e474cbd0f73df185e37c19199eda224b22 Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Sat, 5 Nov 2005 17:25:54 +0100 Subject: [PATCH] --- yaml --- r: 14207 b: refs/heads/master c: af9c142de94ecf724a18700273bbba390873e072 h: refs/heads/master i: 14205: 2f6490811800e5439ba079db1a496276b6024245 14203: bc1d020184c082fca1c14349f06dfbf55e6f31fb 14199: 330c620030c555b847592a90686e140a4f5d9924 14191: 682956f00b5b26d9864b29fda4f09a544213008e 14175: 157a0715320999123b2fb6c319d97f84c2d884dc 14143: 734aec8e243095a626c6b9ea73f9a176a54298de 14079: 23f3a82998912654be41bbbb9048ca6ae1d15ece v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/cpu/mtrr/main.c | 8 ++++++++ trunk/arch/x86_64/kernel/setup.c | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index cd4e87dad326..469964b1f60c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1d2e6bd86152ab86fb866555281869df340e6c6a +refs/heads/master: af9c142de94ecf724a18700273bbba390873e072 diff --git a/trunk/arch/i386/kernel/cpu/mtrr/main.c b/trunk/arch/i386/kernel/cpu/mtrr/main.c index dd4ebd6af7e4..1e9db198c440 100644 --- a/trunk/arch/i386/kernel/cpu/mtrr/main.c +++ b/trunk/arch/i386/kernel/cpu/mtrr/main.c @@ -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 && diff --git a/trunk/arch/x86_64/kernel/setup.c b/trunk/arch/x86_64/kernel/setup.c index 2ad3556dda52..476ee034fca2 100644 --- a/trunk/arch/x86_64/kernel/setup.c +++ b/trunk/arch/x86_64/kernel/setup.c @@ -995,6 +995,11 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c) unsigned eax = cpuid_eax(0x80000008); c->x86_virt_bits = (eax >> 8) & 0xff; c->x86_phys_bits = eax & 0xff; + /* CPUID workaround for Intel 0F34 CPU */ + if (c->x86_vendor == X86_VENDOR_INTEL && + c->x86 == 0xF && c->x86_model == 0x3 && + c->x86_mask == 0x4) + c->x86_phys_bits = 36; } if (c->x86 == 15)