svn commit: r187565 - in stable/7/sys: . amd64/amd64 amd64/include contrib/pf dev/ath/ath_hal dev/cxgb i386/i386 i386/include

Jung-uk Kim jkim at FreeBSD.org
Wed Jan 21 12:16:14 PST 2009


Author: jkim
Date: Wed Jan 21 20:16:11 2009
New Revision: 187565
URL: http://svn.freebsd.org/changeset/base/187565

Log:
  MFC: Detect Advanced Power Management Information for AMD CPUs.

Modified:
  stable/7/sys/   (props changed)
  stable/7/sys/amd64/amd64/identcpu.c
  stable/7/sys/amd64/amd64/initcpu.c
  stable/7/sys/amd64/include/md_var.h
  stable/7/sys/amd64/include/specialreg.h
  stable/7/sys/contrib/pf/   (props changed)
  stable/7/sys/dev/ath/ath_hal/   (props changed)
  stable/7/sys/dev/cxgb/   (props changed)
  stable/7/sys/i386/i386/identcpu.c
  stable/7/sys/i386/i386/initcpu.c
  stable/7/sys/i386/include/md_var.h
  stable/7/sys/i386/include/specialreg.h

Modified: stable/7/sys/amd64/amd64/identcpu.c
==============================================================================
--- stable/7/sys/amd64/amd64/identcpu.c	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/amd64/amd64/identcpu.c	Wed Jan 21 20:16:11 2009	(r187565)
@@ -447,6 +447,10 @@ identify_cpu(void)
 		amd_feature = regs[3] & ~(cpu_feature & 0x0183f3ff);
 		amd_feature2 = regs[2];
 	}
+	if (cpu_exthigh >= 0x80000007) {
+		do_cpuid(0x80000007, regs);
+		amd_pminfo = regs[3];
+	}
 	if (cpu_exthigh >= 0x80000008) {
 		do_cpuid(0x80000008, regs);
 		cpu_procinfo2 = regs[2];

Modified: stable/7/sys/amd64/amd64/initcpu.c
==============================================================================
--- stable/7/sys/amd64/amd64/initcpu.c	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/amd64/amd64/initcpu.c	Wed Jan 21 20:16:11 2009	(r187565)
@@ -53,6 +53,7 @@ u_int	cpu_feature;		/* Feature flags */
 u_int	cpu_feature2;		/* Feature flags */
 u_int	amd_feature;		/* AMD feature flags */
 u_int	amd_feature2;		/* AMD feature flags */
+u_int	amd_pminfo;		/* AMD advanced power management info */
 u_int	cpu_high;		/* Highest arg to CPUID */
 u_int	cpu_exthigh;		/* Highest arg to extended CPUID */
 u_int	cpu_id;			/* Stepping ID */

Modified: stable/7/sys/amd64/include/md_var.h
==============================================================================
--- stable/7/sys/amd64/include/md_var.h	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/amd64/include/md_var.h	Wed Jan 21 20:16:11 2009	(r187565)
@@ -44,6 +44,7 @@ extern	u_int	cpu_feature;
 extern	u_int	cpu_feature2;
 extern	u_int	amd_feature;
 extern	u_int	amd_feature2;
+extern	u_int	amd_pminfo;
 extern	u_int	cpu_fxsr;
 extern	u_int	cpu_high;
 extern	u_int	cpu_id;

Modified: stable/7/sys/amd64/include/specialreg.h
==============================================================================
--- stable/7/sys/amd64/include/specialreg.h	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/amd64/include/specialreg.h	Wed Jan 21 20:16:11 2009	(r187565)
@@ -156,6 +156,19 @@
 #define	CPUID_LOCAL_APIC_ID	0xff000000
 
 /*
+ * AMD extended function 8000_0007h edx info
+ */
+#define	AMDPM_TS		0x00000001
+#define	AMDPM_FID		0x00000002
+#define	AMDPM_VID		0x00000004
+#define	AMDPM_TTP		0x00000008
+#define	AMDPM_TM		0x00000010
+#define	AMDPM_STC		0x00000020
+#define	AMDPM_100MHZ_STEPS	0x00000040
+#define	AMDPM_HW_PSTATE		0x00000080
+#define	AMDPM_TSC_INVARIANT	0x00000100
+
+/*
  * AMD extended function 8000_0008h ecx info
  */
 #define	AMDID_CMP_CORES		0x000000ff

Modified: stable/7/sys/i386/i386/identcpu.c
==============================================================================
--- stable/7/sys/i386/i386/identcpu.c	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/i386/i386/identcpu.c	Wed Jan 21 20:16:11 2009	(r187565)
@@ -1088,6 +1088,10 @@ finishidentcpu(void)
 			amd_feature = regs[3] & ~(cpu_feature & 0x0183f3ff);
 			amd_feature2 = regs[2];
 		}
+		if (cpu_exthigh >= 0x80000007) {
+			do_cpuid(0x80000007, regs);
+			amd_pminfo = regs[3];
+		}
 		if (cpu_exthigh >= 0x80000008) {
 			do_cpuid(0x80000008, regs);
 			cpu_procinfo2 = regs[2];

Modified: stable/7/sys/i386/i386/initcpu.c
==============================================================================
--- stable/7/sys/i386/i386/initcpu.c	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/i386/i386/initcpu.c	Wed Jan 21 20:16:11 2009	(r187565)
@@ -82,6 +82,7 @@ u_int	cpu_feature = 0;	/* Feature flags 
 u_int	cpu_feature2 = 0;	/* Feature flags */
 u_int	amd_feature = 0;	/* AMD feature flags */
 u_int	amd_feature2 = 0;	/* AMD feature flags */
+u_int	amd_pminfo = 0;		/* AMD advanced power management info */
 u_int	via_feature_rng = 0;	/* VIA RNG features */
 u_int	via_feature_xcrypt = 0;	/* VIA ACE features */
 u_int	cpu_high = 0;		/* Highest arg to CPUID */

Modified: stable/7/sys/i386/include/md_var.h
==============================================================================
--- stable/7/sys/i386/include/md_var.h	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/i386/include/md_var.h	Wed Jan 21 20:16:11 2009	(r187565)
@@ -49,6 +49,7 @@ extern	u_int	cpu_feature;
 extern	u_int	cpu_feature2;
 extern	u_int	amd_feature;
 extern	u_int	amd_feature2;
+extern	u_int	amd_pminfo;
 extern	u_int	via_feature_rng;
 extern	u_int	via_feature_xcrypt;
 extern	u_int	cpu_fxsr;

Modified: stable/7/sys/i386/include/specialreg.h
==============================================================================
--- stable/7/sys/i386/include/specialreg.h	Wed Jan 21 20:08:17 2009	(r187564)
+++ stable/7/sys/i386/include/specialreg.h	Wed Jan 21 20:16:11 2009	(r187565)
@@ -158,6 +158,19 @@
 #define	CPUID_LOCAL_APIC_ID	0xff000000
 
 /*
+ * AMD extended function 8000_0007h edx info
+ */
+#define	AMDPM_TS		0x00000001
+#define	AMDPM_FID		0x00000002
+#define	AMDPM_VID		0x00000004
+#define	AMDPM_TTP		0x00000008
+#define	AMDPM_TM		0x00000010
+#define	AMDPM_STC		0x00000020
+#define	AMDPM_100MHZ_STEPS	0x00000040
+#define	AMDPM_HW_PSTATE		0x00000080
+#define	AMDPM_TSC_INVARIANT	0x00000100
+
+/*
  * AMD extended function 8000_0008h ecx info
  */
 #define	AMDID_CMP_CORES		0x000000ff


More information about the svn-src-stable-7 mailing list