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.