* [PATCH]CPUID workaround for intel CPU - Re: [PROBLEM] mtrr's not set, 2.6.13
@ 2005-09-29 1:02 Shaohua Li
2005-09-29 9:58 ` Mikael Pettersson
0 siblings, 1 reply; 2+ messages in thread
From: Shaohua Li @ 2005-09-29 1:02 UTC (permalink / raw)
To: lkml; +Cc: Jim McCloskey, akpm
Hi Andrew,
This is patch to fix the Jim McCloskey's MTRR issue.
CPUID workaround for steppings 0F33h(supporting x86) and 0F34h(supporting x86
and EM64T). Detail info can be found at:
http://download.intel.com/design/Xeon/specupdt/30240216.pdf
http://download.intel.com/design/Pentium4/specupdt/30235221.pdf
Signed-off-by: Shaohua Li<shaohua.li@intel.com>
---
linux-2.6.14-rc2-root/arch/i386/kernel/cpu/mtrr/main.c | 8 ++++++++
linux-2.6.14-rc2-root/arch/x86_64/kernel/setup.c | 6 ++++++
2 files changed, 14 insertions(+)
diff -puN arch/i386/kernel/cpu/mtrr/main.c~cpuid_errta arch/i386/kernel/cpu/mtrr/main.c
--- linux-2.6.14-rc2/arch/i386/kernel/cpu/mtrr/main.c~cpuid_errta 2005-09-29 08:35:34.000000000 +0800
+++ linux-2.6.14-rc2-root/arch/i386/kernel/cpu/mtrr/main.c 2005-09-29 08:37:16.000000000 +0800
@@ -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 -puN arch/x86_64/kernel/setup.c~cpuid_errta arch/x86_64/kernel/setup.c
--- linux-2.6.14-rc2/arch/x86_64/kernel/setup.c~cpuid_errta 2005-09-29 08:35:34.000000000 +0800
+++ linux-2.6.14-rc2-root/arch/x86_64/kernel/setup.c 2005-09-29 08:37:48.000000000 +0800
@@ -992,6 +992,12 @@ static void __cpuinit init_intel(struct
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 (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
+ boot_cpu_data.x86 == 0xF &&
+ boot_cpu_data.x86_model == 0x3 &&
+ boot_cpu_data.x86_mask == 0x4)
+ c->x86_phys_bits = 36;
}
if (c->x86 == 15)
_
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH]CPUID workaround for intel CPU - Re: [PROBLEM] mtrr's not set, 2.6.13
2005-09-29 1:02 [PATCH]CPUID workaround for intel CPU - Re: [PROBLEM] mtrr's not set, 2.6.13 Shaohua Li
@ 2005-09-29 9:58 ` Mikael Pettersson
0 siblings, 0 replies; 2+ messages in thread
From: Mikael Pettersson @ 2005-09-29 9:58 UTC (permalink / raw)
To: Shaohua Li; +Cc: lkml, Jim McCloskey, akpm
Shaohua Li writes:
> Hi Andrew,
> This is patch to fix the Jim McCloskey's MTRR issue.
> CPUID workaround for steppings 0F33h(supporting x86) and 0F34h(supporting x86
> and EM64T). Detail info can be found at:
> http://download.intel.com/design/Xeon/specupdt/30240216.pdf
> http://download.intel.com/design/Pentium4/specupdt/30235221.pdf
>
> Signed-off-by: Shaohua Li<shaohua.li@intel.com>
> ---
>
> linux-2.6.14-rc2-root/arch/i386/kernel/cpu/mtrr/main.c | 8 ++++++++
> linux-2.6.14-rc2-root/arch/x86_64/kernel/setup.c | 6 ++++++
> 2 files changed, 14 insertions(+)
>
> diff -puN arch/i386/kernel/cpu/mtrr/main.c~cpuid_errta arch/i386/kernel/cpu/mtrr/main.c
> --- linux-2.6.14-rc2/arch/i386/kernel/cpu/mtrr/main.c~cpuid_errta 2005-09-29 08:35:34.000000000 +0800
> +++ linux-2.6.14-rc2-root/arch/i386/kernel/cpu/mtrr/main.c 2005-09-29 08:37:16.000000000 +0800
> @@ -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;
Please change the comment to indicate the actual erratum number.
Something like "Work around P4 Erratum #<N>" should do.
/Mikael
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2005-09-29 9:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-09-29 1:02 [PATCH]CPUID workaround for intel CPU - Re: [PROBLEM] mtrr's not set, 2.6.13 Shaohua Li
2005-09-29 9:58 ` Mikael Pettersson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox