Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Oct 2008 00:17:56 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r184101 - in head/sys: amd64/amd64 amd64/include i386/i386 i386/include
Message-ID:  <200810210017.m9L0HumB084142@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Tue Oct 21 00:17:55 2008
New Revision: 184101
URL: http://svn.freebsd.org/changeset/base/184101

Log:
  Detect Advanced Power Management Information for AMD CPUs.

Modified:
  head/sys/amd64/amd64/identcpu.c
  head/sys/amd64/amd64/initcpu.c
  head/sys/amd64/include/md_var.h
  head/sys/amd64/include/specialreg.h
  head/sys/i386/i386/identcpu.c
  head/sys/i386/i386/initcpu.c
  head/sys/i386/include/md_var.h
  head/sys/i386/include/specialreg.h

Modified: head/sys/amd64/amd64/identcpu.c
==============================================================================
--- head/sys/amd64/amd64/identcpu.c	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/amd64/amd64/identcpu.c	Tue Oct 21 00:17:55 2008	(r184101)
@@ -451,6 +451,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: head/sys/amd64/amd64/initcpu.c
==============================================================================
--- head/sys/amd64/amd64/initcpu.c	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/amd64/amd64/initcpu.c	Tue Oct 21 00:17:55 2008	(r184101)
@@ -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: head/sys/amd64/include/md_var.h
==============================================================================
--- head/sys/amd64/include/md_var.h	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/amd64/include/md_var.h	Tue Oct 21 00:17:55 2008	(r184101)
@@ -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: head/sys/amd64/include/specialreg.h
==============================================================================
--- head/sys/amd64/include/specialreg.h	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/amd64/include/specialreg.h	Tue Oct 21 00:17:55 2008	(r184101)
@@ -161,6 +161,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: head/sys/i386/i386/identcpu.c
==============================================================================
--- head/sys/i386/i386/identcpu.c	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/i386/i386/identcpu.c	Tue Oct 21 00:17:55 2008	(r184101)
@@ -1089,6 +1089,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: head/sys/i386/i386/initcpu.c
==============================================================================
--- head/sys/i386/i386/initcpu.c	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/i386/i386/initcpu.c	Tue Oct 21 00:17:55 2008	(r184101)
@@ -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: head/sys/i386/include/md_var.h
==============================================================================
--- head/sys/i386/include/md_var.h	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/i386/include/md_var.h	Tue Oct 21 00:17:55 2008	(r184101)
@@ -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: head/sys/i386/include/specialreg.h
==============================================================================
--- head/sys/i386/include/specialreg.h	Mon Oct 20 20:00:34 2008	(r184100)
+++ head/sys/i386/include/specialreg.h	Tue Oct 21 00:17:55 2008	(r184101)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200810210017.m9L0HumB084142>