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
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#if defined(__i386__) || defined(__x86_64__)
|
|
|
|
#include "helpers/helpers.h"
|
|
|
|
#define MSR_AMD_HWCR 0xc0010015
|
|
|
|
int cpufreq_has_boost_support(unsigned int cpu, int *support, int *active,
|
|
int *states)
|
|
{
|
|
struct cpupower_cpu_info cpu_info;
|
|
int ret;
|
|
unsigned long long val;
|
|
|
|
*support = *active = *states = 0;
|
|
|
|
ret = get_cpu_info(&cpu_info);
|
|
if (ret)
|
|
return ret;
|
|
|
|
if (cpupower_cpu_info.caps & CPUPOWER_CAP_AMD_CBP) {
|
|
*support = 1;
|
|
|
|
/* AMD Family 0x17 does not utilize PCI D18F4 like prior
|
|
* families and has no fixed discrete boost states but
|
|
* has Hardware determined variable increments instead.
|
|
*/
|
|
|
|
if (cpu_info.family == 0x17 || cpu_info.family == 0x18) {
|
|
if (!read_msr(cpu, MSR_AMD_HWCR, &val)) {
|
|
if (!(val & CPUPOWER_AMD_CPBDIS))
|
|
*active = 1;
|
|
}
|
|
} else {
|
|
ret = amd_pci_get_num_boost_states(active, states);
|
|
if (ret)
|
|
return ret;
|
|
}
|
|
} else if (cpupower_cpu_info.caps & CPUPOWER_CAP_INTEL_IDA)
|
|
*support = *active = 1;
|
|
return 0;
|
|
}
|
|
#endif /* #if defined(__i386__) || defined(__x86_64__) */
|