lkml.org 
[lkml]   [2020]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 11/15] tools/power turbostat: Fix missing SYS_LPI counter on some Chromebooks
    Date
    From: Len Brown <len.brown@intel.com>

    [ Upstream commit 1f81c5efc020314b2db30d77efe228b7e117750d ]

    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: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/power/x86/turbostat/turbostat.c | 23 ++++++++++++++---------
    1 file changed, 14 insertions(+), 9 deletions(-)

    diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
    index fb665fdc722a4..2233cf722c692 100644
    --- a/tools/power/x86/turbostat/turbostat.c
    +++ b/tools/power/x86/turbostat/turbostat.c
    @@ -299,6 +299,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */

    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)
    {
    return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set);
    @@ -2844,8 +2848,6 @@ int snapshot_gfx_mhz(void)
    *
    * record snapshot of
    * /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)
    {
    @@ -2865,17 +2867,14 @@ int snapshot_cpu_lpi_us(void)
    /*
    * snapshot_sys_lpi()
    *
    - * record snapshot of
    - * /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us
    - *
    - * return 1 if config change requires a restart, else return 0
    + * record snapshot of sys_lpi_file
    */
    int snapshot_sys_lpi_us(void)
    {
    FILE *fp;
    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);
    if (retval != 1)
    @@ -4743,10 +4742,16 @@ void process_cpuid()
    else
    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);
    - 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);
    + }

    if (!quiet)
    decode_misc_feature_control();
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-03-27 00:27    [W:3.297 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site