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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to