Comment # 30 on bug 1203748 from
Hi Stefan,

question: did this laptop ever work well (wrt this problem)?

Initially I was thinking the problem could be a kernel update but I'm trying
to validate that assumption. If it used to work in the past, do you recall any
hardware or software update that happened before it broke?

From your dmesg and turbostat attachments the problem looks both serious and
difficult to solve.

I've found this thread from 2017 in the Lenovo forum that seems to describe
exactly your symptoms:

"T470 Heavy CPU Throttling on Battery"
https://forums.lenovo.com/t5/ThinkPad-T400-T500-and-newer-T/T470-Heavy-CPU-Throttling-on-Battery/td-p/3783920

For posterity I'll copy-paste both the question and the alleged solution from
that thread (update the BIOS to at least version 1.42, currently the latest is
1.72)

;; Hi,
;; 
;; My CPU has been throttling down to 400 MHz when on battery. This does not
;; necessarily happen on low battery - it sometimes happens when I have over
;; 50% battery life left (albeit the removable battery is low), and sometimes
;; when i have less than 25% battery life left.
;; 
;; My temperatures appear to be good (according to Core Temp), usually around
;; 40-50C.
;; 
;; Has anyone encountered this problem before? All of my drivers are up to
;; date according to Lenovo companion, and I have placed power settings in
;; windows to High Performance, and changed the Intel Speedstep settings in
;; the BIOS to max performance as well.

;; Dear all,
;; 
;; ThinkPad T470 development team identified the root cause and released the
;; fix as the latest BIOS Update package at the Lenovo web site;
;; 
;;
https://pcsupport.lenovo.com/us/en/products/Laptops-and-netbooks/ThinkPad-T-Series-laptops/ThinkPad-T470/downloads/DS120429
;; 
;; UEFI: 1.42 / ECP: 1.27
;; 
;;   (New) Support interface of TPM firmware update.
;;   (New) Updated the Diagnostics module to version 03.11.001.
;;   (New) Updated the CPU microcode.
;;   (Fix) Fixed an issue where CPU clock stays low with FRU P/N 01AV452
battery.

The forum mentions the external battery, part number 01AV452, which I can see
in your hwinfo output:

  P:
/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:18/PNP0C09:00/PNP0C0A:01/power_supply/BAT1
  L: 0
  E:
DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:18/PNP0C09:00/PNP0C0A:01/power_supply/BAT1
  E: SUBSYSTEM=power_supply
  E: POWER_SUPPLY_NAME=BAT1
  E: POWER_SUPPLY_TYPE=Battery
  E: POWER_SUPPLY_STATUS=Full
  E: POWER_SUPPLY_PRESENT=1
  E: POWER_SUPPLY_TECHNOLOGY=Li-poly
  E: POWER_SUPPLY_CYCLE_COUNT=866
  E: POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11460000
  E: POWER_SUPPLY_VOLTAGE_NOW=12715000
  E: POWER_SUPPLY_POWER_NOW=0
  E: POWER_SUPPLY_ENERGY_FULL_DESIGN=24000000
  E: POWER_SUPPLY_ENERGY_FULL=19870000
  E: POWER_SUPPLY_ENERGY_NOW=19870000
  E: POWER_SUPPLY_CAPACITY=100
  E: POWER_SUPPLY_CAPACITY_LEVEL=Full
  E: POWER_SUPPLY_MODEL_NAME=01AV452
                             ^^^^^^^
  E: POWER_SUPPLY_MANUFACTURER=SMP
  E: POWER_SUPPLY_SERIAL_NUMBER= 1935

I archived the T470 parts diagram here in the corporate confluence, you should
recognize the optional external battery: (requires confluence login)
https://confluence.suse.com/download/attachments/515801221/t470-system-service-parts.png?api=v2

So, in case you have a firmware version older than 1.42, I think updating it
is worth a shot. When I do that on my laptop I use "fwupdmgr" command (from
within Linux!) which makes it all very smooth, see
https://wiki.archlinux.org/title/fwupd , it generally it's a matter of

    fwupdmgr get-devices
    fwupdmgr refresh
    fwupdmgr get-updates
    fwupdmgr update


Regarding your turbostat and dmesg attachments:

the first this I did is comparing the header of the turbostat output (all the
power management settings). They're identical in both "good" and "bad". Only
the temperature reading changes (MSR_IA32_PACKAGE_THERM_STATUS), and that
doesn't mean much.

The settings I looked at are:

  MSR_PM_ENABLE: 0x00000001 (HWP)

which means the CPU is doing autonomous frequency scaling (no OS involved) and

  MSR_HWP_REQUEST: 0x80002704 (min 4 max 39 des 0 epp 0x80 window 0x0 pkg 0x0)

which means the configuration allows the CPU the full range of speeds, from
"min 4" (400 MHz) to "max 39" (3900 MHz). What I was suspecting was a
situation like "min 4" and "max 4" in the "bad" situation, but it isn't like
that. In both scenarios the full range is allowed. "epp 0x80" is also
important, as that's a number between 0x0 (maximum performance setting) to
0xff (maximum efficiency). Again, you have 0x80 in both cases as expected,
which is mid-range, nothing to see there.

Yet turbostat shows your clock squarely at 400 MHz when on battery which is a
serious problem. As per dmesg, as you observed, we have some cpufreq messages
at booth (showing the dyndbg parameter works) but no logs during normal
operations. If the intel_pstate driver was to impose some limits on the
frequency it would write something in the logs.

One minor remark, unrelated to your problem: I see you have
intel_idle.max_cstate=0 in your command line. Are you aware that this
parameter prevents the intel_idle driver from loading, falling back to the
acpi_idle driver? Generally people think "=0" means "don't go idle", but
unfortunately the parameter works differently.

    intel_idle.max_cstate=    [KNL,HW,ACPI,X86]
            0    disables intel_idle and fall back on acpi_idle.
            1 to 9    specify maximum depth of C-state.

In case the intent is to not go idle, the correct parameter is "idle=poll".

Let me know if you have a BIOS version <1.42 on the T470 and what happens if
you update it.


You are receiving this mail because: