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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to