public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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