Module Name: src
Committed By: msaitoh
Date: Fri Jul 25 14:34:22 UTC 2014
Modified Files:
src/sys/arch/x86/x86: intel_busclock.c
Log Message:
Modify p3_get_bus_clock():
- Intel SDM says 06_17H is the same as 06_0fH. Same as OpenBSD.
- Add some Silvermont models.
- For Slivermont architecture, 0x011 is not 166.67MHz but 116.67MHz.
- Print model name not in decimal but in hexadecimal
- Cleanup code.
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/x86/x86/intel_busclock.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/x86/x86/intel_busclock.c
diff -u src/sys/arch/x86/x86/intel_busclock.c:1.18 src/sys/arch/x86/x86/intel_busclock.c:1.19
--- src/sys/arch/x86/x86/intel_busclock.c:1.18 Sun Nov 17 19:22:06 2013
+++ src/sys/arch/x86/x86/intel_busclock.c Fri Jul 25 14:34:22 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: intel_busclock.c,v 1.18 2013/11/17 19:22:06 martin Exp $ */
+/* $NetBSD: intel_busclock.c,v 1.19 2014/07/25 14:34:22 msaitoh Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_busclock.c,v 1.18 2013/11/17 19:22:06 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_busclock.c,v 1.19 2014/07/25 14:34:22 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -144,18 +144,8 @@ p3_get_bus_clock(struct cpu_info *ci)
}
break;
case 0xe: /* Core Duo/Solo */
- /*
- * XXX (See also case 0xc)
- * Newer CPUs will GP when attemping to access MSR_FSB_FREQ.
- * In the long-term, use ACPI instead of all this.
- */
- if (rdmsr_safe(MSR_FSB_FREQ, &msr) == EFAULT) {
- aprint_debug_dev(ci->ci_dev,
- "unable to determine bus speed");
- goto print_msr;
- }
- /* FALLTHROUGH */
case 0xf: /* Core Xeon */
+ case 0x17: /* Xeon [35]000, Core 2 Quad [89]00 */
if (rdmsr_safe(MSR_FSB_FREQ, &msr) == EFAULT) {
aprint_debug_dev(ci->ci_dev,
"unable to determine bus speed");
@@ -181,6 +171,9 @@ p3_get_bus_clock(struct cpu_info *ci)
case 4:
bus_clock = 33333;
break;
+ case 6:
+ bus_clock = 40000;
+ break;
default:
aprint_debug("%s: unknown Core FSB_FREQ value %d",
device_xname(ci->ci_dev), bus);
@@ -247,7 +240,10 @@ p3_get_bus_clock(struct cpu_info *ci)
}
break;
case 0x37: /* Silvermont */
+ case 0x4a:
case 0x4d:
+ case 0x5a:
+ case 0x5d:
if (rdmsr_safe(MSR_FSB_FREQ, &msr) == EFAULT) {
aprint_debug_dev(ci->ci_dev,
"unable to determine bus speed");
@@ -268,7 +264,7 @@ p3_get_bus_clock(struct cpu_info *ci)
bus_clock = 13333;
break;
case 3:
- bus_clock = 16667;
+ bus_clock = 11667;
break;
default:
aprint_debug("%s: unknown Silvermont FSB_FREQ value %d",
@@ -277,7 +273,7 @@ p3_get_bus_clock(struct cpu_info *ci)
}
break;
default:
- aprint_debug("%s: unknown i686 model %d, can't get bus clock",
+ aprint_debug("%s: unknown i686 model %02x, can't get bus clock",
device_xname(ci->ci_dev),
CPUID_TO_MODEL(ci->ci_signature));
print_msr: