On Thu, 2017-10-05 at 21:39 +0300, Andy Shevchenko wrote: > On Thu, Oct 5, 2017 at 9:16 PM, Srinivas Pandruvada > <srinivas.pandruv...@linux.intel.com> wrote: > > > > Added functionality to read LPIT table, which provides: > > > > - Sysfs interface to read residency counters via > > /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us > > /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us > > > > Here the count "low_power_idle_cpu_residency_us" shows the time > > spent > > by CPU package in low power state. This is read via MSR interface, > > which > > points to MSR for PKG C10. > > > > Here the count "low_power_idle_system_residency_us" show the count > > the > > system was in low power state. This is read via MMIO interface. > > This > > is mapped to SLP_S0 residency on modern Intel systems. This > > residency > > is achieved only when CPU is in PKG C10 and all functional blocks > > are > > in low power state. > > > > It is possible that none of the above counters present or anyone of > > the > > counter present or all counters present. > > > > For example: On my Kabylake system both of the above counters > > present. > > After suspend to idle these counts updated and prints: > > 6916179 > > 6998564 > > > > This counter can be read by tools like turbostat to display. Or it > > can > > be used to debug, if modern systems are reaching desired low power > > state. > > > > - Provides an interface to read residency counter memory address > > This address can be used to get the base address of PMC memory > > mapped IO. > > This is utilized by intel_pmc_core driver to print more debug > > information. > > > > > + switch (residency_info_mem.gaddr.bit_width) { > > + case 8: > > + count = > > readb(residency_info_mem.iomem_addr); > > + break; > > + case 16: > > + count = > > readw(residency_info_mem.iomem_addr); > > + break; > > + case 32: > > + count = > > readl(residency_info_mem.iomem_addr); > > + break; > > + case 64: > > + count = > > readq(residency_info_mem.iomem_addr); > > + break; > > + default: > > + return -EINVAL; > > + } > > I saw something very similar already under drivers/acpi. Can we > utilize it (split a helper out of it and re-use)? This functionality is probably not only for ACPI, but may be other parts of the kernel too. So if there is a common function then it can be more generic outside of ACPI.
Thanks, Srinivas