summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Xu <davidxu@FreeBSD.org>2006-06-19 07:51:47 +0000
committerDavid Xu <davidxu@FreeBSD.org>2006-06-19 07:51:47 +0000
commit85b2d575de0138e89b36c00b12b048ed49c47d66 (patch)
treecbec7d4c6ee9a5a7bba61ea0f2836cd9d92054f3
parentb33484302daafba84a535a95cb7f03cd24c72088 (diff)
Notes
-rw-r--r--sys/i386/i386/identcpu.c11
-rw-r--r--sys/i386/include/specialreg.h1
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/i386/i386/identcpu.c b/sys/i386/i386/identcpu.c
index 53f6618cb5c4..aff022f123cc 100644
--- a/sys/i386/i386/identcpu.c
+++ b/sys/i386/i386/identcpu.c
@@ -203,6 +203,7 @@ printcpuinfo(void)
if (strcmp(cpu_vendor, "GenuineIntel") == 0) {
if ((cpu_id & 0xf00) > 0x300) {
u_int brand_index;
+ u_int model;
cpu_model[0] = '\0';
@@ -315,6 +316,16 @@ printcpuinfo(void)
case 0xf00:
strcat(cpu_model, "Pentium 4");
cpu = CPU_P4;
+ model = (cpu_id & 0x0f0) >> 4;
+ if (model == 3 || model == 4 || model == 6) {
+ uint64_t tmp;
+
+ tmp = rdmsr(MSR_IA32_MISC_ENABLE);
+ wrmsr(MSR_IA32_MISC_ENABLE,
+ tmp & ~(1LL << 22));
+ do_cpuid(0, regs);
+ cpu_high = regs[0];
+ }
break;
default:
strcat(cpu_model, "unknown");
diff --git a/sys/i386/include/specialreg.h b/sys/i386/include/specialreg.h
index e189b229a95f..3055b7cad7d6 100644
--- a/sys/i386/include/specialreg.h
+++ b/sys/i386/include/specialreg.h
@@ -175,6 +175,7 @@
#define MSR_THERM_CONTROL 0x19a
#define MSR_THERM_INTERRUPT 0x19b
#define MSR_THERM_STATUS 0x19c
+#define MSR_IA32_MISC_ENABLE 0x1A0
#define MSR_DEBUGCTLMSR 0x1d9
#define MSR_LASTBRANCHFROMIP 0x1db
#define MSR_LASTBRANCHTOIP 0x1dc