Commit 1f81c5ef authored by Len Brown's avatar Len Brown

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

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>
parent f6708400
...@@ -304,6 +304,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */ ...@@ -304,6 +304,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);
...@@ -2916,8 +2920,6 @@ int snapshot_gfx_mhz(void) ...@@ -2916,8 +2920,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)
{ {
...@@ -2941,17 +2943,14 @@ int snapshot_cpu_lpi_us(void) ...@@ -2941,17 +2943,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) {
...@@ -4946,10 +4945,16 @@ void process_cpuid() ...@@ -4946,10 +4945,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