Commit b3f92117 authored by Len Brown's avatar Len Brown Committed by Greg Kroah-Hartman

tools/power turbostat: Fix missing SYS_LPI counter on some Chromebooks

[ Upstream commit 1f81c5ef ]

Some Chromebook BIOS' do not export an ACPI LPIT, which is how
Linux finds the residency counter for CPU and SYSTEM low power states,
that is exports in /sys/devices/system/cpu/cpuidle/*residency_us

When these sysfs attributes are missing, check the debugfs attrubte
from the pmc_core driver, which accesses the same counter value.
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 97101ebd
...@@ -299,6 +299,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */ ...@@ -299,6 +299,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */
void setup_all_buffers(void); void setup_all_buffers(void);
char *sys_lpi_file;
char *sys_lpi_file_sysfs = "/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us";
char *sys_lpi_file_debugfs = "/sys/kernel/debug/pmc_core/slp_s0_residency_usec";
int cpu_is_not_present(int cpu) int cpu_is_not_present(int cpu)
{ {
return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set); return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set);
...@@ -2844,8 +2848,6 @@ int snapshot_gfx_mhz(void) ...@@ -2844,8 +2848,6 @@ int snapshot_gfx_mhz(void)
* *
* record snapshot of * record snapshot of
* /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us * /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us
*
* return 1 if config change requires a restart, else return 0
*/ */
int snapshot_cpu_lpi_us(void) int snapshot_cpu_lpi_us(void)
{ {
...@@ -2865,17 +2867,14 @@ int snapshot_cpu_lpi_us(void) ...@@ -2865,17 +2867,14 @@ int snapshot_cpu_lpi_us(void)
/* /*
* snapshot_sys_lpi() * snapshot_sys_lpi()
* *
* record snapshot of * record snapshot of sys_lpi_file
* /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us
*
* return 1 if config change requires a restart, else return 0
*/ */
int snapshot_sys_lpi_us(void) int snapshot_sys_lpi_us(void)
{ {
FILE *fp; FILE *fp;
int retval; int retval;
fp = fopen_or_die("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", "r"); fp = fopen_or_die(sys_lpi_file, "r");
retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us); retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us);
if (retval != 1) if (retval != 1)
...@@ -4743,10 +4742,16 @@ void process_cpuid() ...@@ -4743,10 +4742,16 @@ void process_cpuid()
else else
BIC_NOT_PRESENT(BIC_CPU_LPI); BIC_NOT_PRESENT(BIC_CPU_LPI);
if (!access("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", R_OK)) if (!access(sys_lpi_file_sysfs, R_OK)) {
sys_lpi_file = sys_lpi_file_sysfs;
BIC_PRESENT(BIC_SYS_LPI); BIC_PRESENT(BIC_SYS_LPI);
else } else if (!access(sys_lpi_file_debugfs, R_OK)) {
sys_lpi_file = sys_lpi_file_debugfs;
BIC_PRESENT(BIC_SYS_LPI);
} else {
sys_lpi_file_sysfs = NULL;
BIC_NOT_PRESENT(BIC_SYS_LPI); BIC_NOT_PRESENT(BIC_SYS_LPI);
}
if (!quiet) if (!quiet)
decode_misc_feature_control(); decode_misc_feature_control();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment