tools/cpupower: Add Hygon Dhyana support
The tool cpupower is useful to get CPU frequency information and monitor power stats on the Hygon Dhyana platform. So add Hygon Dhyana support to it by checking vendor and family to share the code path of AMD family 17h. Signed-off-by: Pu Wen <puwen@hygon.cn> Signed-off-by: Borislav Petkov <bp@suse.de> Acked-by: Shuah Khan (Samsung OSG) <shuah@kernel.org> CC: Prarit Bhargava <prarit@redhat.com> CC: Shuah Khan <shuah@kernel.org> CC: Thomas Gleixner <tglx@linutronix.de> CC: Thomas Renninger <trenn@suse.com> CC: linux-pm@vger.kernel.org Link: http://lkml.kernel.org/r/5ce86123a7b9dad925ac583d88d2f921040e859b.1538583282.git.puwen@hygon.cn
这个提交包含在:
@@ -45,7 +45,7 @@ static int get_did(int family, union msr_pstate pstate)
|
||||
|
||||
if (family == 0x12)
|
||||
t = pstate.val & 0xf;
|
||||
else if (family == 0x17)
|
||||
else if (family == 0x17 || family == 0x18)
|
||||
t = pstate.fam17h_bits.did;
|
||||
else
|
||||
t = pstate.bits.did;
|
||||
@@ -59,7 +59,7 @@ static int get_cof(int family, union msr_pstate pstate)
|
||||
int fid, did, cof;
|
||||
|
||||
did = get_did(family, pstate);
|
||||
if (family == 0x17) {
|
||||
if (family == 0x17 || family == 0x18) {
|
||||
fid = pstate.fam17h_bits.fid;
|
||||
cof = 200 * fid / did;
|
||||
} else {
|
||||
|
@@ -8,7 +8,7 @@
|
||||
#include "helpers/helpers.h"
|
||||
|
||||
static const char *cpu_vendor_table[X86_VENDOR_MAX] = {
|
||||
"Unknown", "GenuineIntel", "AuthenticAMD",
|
||||
"Unknown", "GenuineIntel", "AuthenticAMD", "HygonGenuine",
|
||||
};
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
@@ -109,6 +109,7 @@ out:
|
||||
fclose(fp);
|
||||
/* Get some useful CPU capabilities from cpuid */
|
||||
if (cpu_info->vendor != X86_VENDOR_AMD &&
|
||||
cpu_info->vendor != X86_VENDOR_HYGON &&
|
||||
cpu_info->vendor != X86_VENDOR_INTEL)
|
||||
return ret;
|
||||
|
||||
@@ -124,8 +125,9 @@ out:
|
||||
if (cpuid_level >= 6 && (cpuid_ecx(6) & 0x1))
|
||||
cpu_info->caps |= CPUPOWER_CAP_APERF;
|
||||
|
||||
/* AMD Boost state enable/disable register */
|
||||
if (cpu_info->vendor == X86_VENDOR_AMD) {
|
||||
/* AMD or Hygon Boost state enable/disable register */
|
||||
if (cpu_info->vendor == X86_VENDOR_AMD ||
|
||||
cpu_info->vendor == X86_VENDOR_HYGON) {
|
||||
if (ext_cpuid_level >= 0x80000007 &&
|
||||
(cpuid_edx(0x80000007) & (1 << 9)))
|
||||
cpu_info->caps |= CPUPOWER_CAP_AMD_CBP;
|
||||
|
@@ -61,7 +61,7 @@ extern int be_verbose;
|
||||
|
||||
/* cpuid and cpuinfo helpers **************************/
|
||||
enum cpupower_cpu_vendor {X86_VENDOR_UNKNOWN = 0, X86_VENDOR_INTEL,
|
||||
X86_VENDOR_AMD, X86_VENDOR_MAX};
|
||||
X86_VENDOR_AMD, X86_VENDOR_HYGON, X86_VENDOR_MAX};
|
||||
|
||||
#define CPUPOWER_CAP_INV_TSC 0x00000001
|
||||
#define CPUPOWER_CAP_APERF 0x00000002
|
||||
|
@@ -26,7 +26,7 @@ int cpufreq_has_boost_support(unsigned int cpu, int *support, int *active,
|
||||
* has Hardware determined variable increments instead.
|
||||
*/
|
||||
|
||||
if (cpu_info.family == 0x17) {
|
||||
if (cpu_info.family == 0x17 || cpu_info.family == 0x18) {
|
||||
if (!read_msr(cpu, MSR_AMD_HWCR, &val)) {
|
||||
if (!(val & CPUPOWER_AMD_CPBDIS))
|
||||
*active = 1;
|
||||
|
在新工单中引用
屏蔽一个用户