Skip to content

Instantly share code, notes, and snippets.

@miXwui
Last active October 7, 2024 23:43
Show Gist options
  • Save miXwui/f614487f667b60620280f652913a1542 to your computer and use it in GitHub Desktop.
Save miXwui/f614487f667b60620280f652913a1542 to your computer and use it in GitHub Desktop.
Framework 13 AMD 7080U Upgrade (From i7-1165G7, Fedora 38)

Note: this is an ongoing process which I'm documenting here. Semi-experimental, but this is my daily driver machine since September 2021 (work included), so I'm aiming for stability (hence why I'm not using the recommended Fedora 39 Beta).

Upgraded from an Intel i7-1165G7 to AMD 7080U mainboard:

  • 64GB (2x32GB) G.Skill F5-5600S4040A32GX2-RS
    • Have an SK Hynix 16GB (2x8GB) 4800MHz (HMCG66MEBSA095N BA) kit that I'll test just to see power draw difference.
  • SK hynix Gold P31 2TB PCIe NVMe Gen3 M.2 2280

These notes are for Fedora 38 6.5.8-200.fc38.x86_64 with SwayWM.

Booted into Fedora with BIOS 3.02 and seemed fine. First thing I did was upgrade to 3.03.

I plan on installing PTM7950, but initial thermals seem very good so it may not be worth it?

Bootloader

Remove flags from bootloader:

  • nvme.noacpi=1
    • It's for SSD suspend power savings, but apparently for Intel not AMD. There are reports of that breaking suspend. It broke suspend on mine. To remove:
      • `sudo grubby --update-kernel=ALL --remove-args="nvme.noacpi=1"``
    • modprobe.blacklist=intel_ish_ipc
      • I have had this blacklisted for a long time since this would cause hibernation to fail to resume on the i7-11165G7. Since it's obviously for Intel, to remove:
      • sudo grubby --update-kernel=ALL --remove-args="modprobe.blacklist=intel_ish_ipc"
  • Had to turn off UEFI Secure Boot as (I had before) to support suspend-then-hibernate. Journal logs said:
    • Call to SuspendThenHibernate failed: Sleep verb "suspend-then-hibernate" not supported
    • kernel: Lockdown: systemd-logind: hibernation is restricted; see man kernel_lockdown.7

TLP

The latest version of TLP is 1.6.1 and at least 1.6.0 is needed for CPU_ENERGY_PERF_POLICY_ON_AC/BAT_: now supports AMD Zen 2 or newer CPUs (requires _amd-pstate_ driver as of kernel 6.3), but only 1.5.0 is out currently on Fedora 38. However, there's a 1.6.0 build on Koji.

Edit (2023-11-24):
I upgraded to Fedora 39 and there is no >1.6.0 build available so I installed from source:
https://linrunner.de/tlp/installation/others.html

Installing only tlp and not tlp-rdw:

sudo make install-tlp
sudo make install-man-tlp
sudo systemctl enable tlp.service

Remember to uninstall when it's available with:

sudo make uninstall-tlp
sudo make uninstall-man-tlp
sudo systemctl remove tlp.service

Useful:

To install TLP 1.6.0:

  1. Download tlp-1.6.0-1.fc38.noarch.rpm from https://koji.fedoraproject.org/koji/buildinfo?buildID=2308060.
  2. Install: sudo dnf in tlp-1.6.0-1.fc38.noarch.rpm
  3. Reconfigure TLP using the default 1.6.0 version: /etc/tlp.conf.rpmnew

By default, /sys/module/workqueue/parameters/power_efficient is set to N. I wonder if I should set to Y , but cursory research leads me to believe it's not worth it.

My TLP config is down below.

Power consumption

Notable info:

  • 5% brightness
  • No peripherals, webcam/mic switches off, keyboard lights off
  • Just a USB-C expansion card in top left and top right port
  • intel AX210
  • Not stock Fedora 38/SwayWM. This is a daily driven work/personal installation has that started from Fedora 33 (Gnome).

idling around ~3.6W. Big Buck Bunny (1080P) on mpv: ~6.15W, with or without VAAPI for some reason.

Previous ~/.config/mpv/mpv.conf:

vo=gpu
hwdec=vaapi

Current ~/.config/mpv/mpv.conf:

hwdec=auto

Oddly I get Cannot load libcuda.so.1 in journald logs when turning HW decode on.

Useful:

I removed intel-media-driver. After running doing the steps from:


For the increased idle power consumption issue

I was getting these errors in journald logs occasionally:

kernel: i2c_hid_acpi i2c-FRMW0005:00: i2c_hid_get_input: incomplete report (7/65535)
kernel: i2c_designware AMDI0010:00: i2c_dw_handle_tx_abort: lost arbitration

Which I thought prevented the system from idling. I found this for the incomplete report error. Apparently that solution (which does not work and will break/keep the display brightness at 100%) was adding acpi_osi= to kernel params. Which reminded me and led me to this. I did this:

sudo grubby --update-kernel=ALL --args='"acpi_osi=!Windows 2020"'`

and rebooted, and my idle power consumption finally went back down to ~3.7W...but it didn't fix the errors, and I didn't have that before so I removed/reverted it. And it continued to idle at ~3.7W, so not I'm sure what happened. So in the end, I do not have and would not add "acpi_osi=!Windows 2020".

But I do know that with wifi power management:

  • off (TLP WIFI_PWR_ON_BAT=off): ~4.5W idle
  • on (TLP WIFI_PWR_ON_BAT=on): ~3.7W idle

So I might have just had wifi power management off at the time.

For the increased power consumption during video playback issue

The Hardware codecs with AMD (mesa) section of https://rpmfusion.org/Howto/Multimedia says to run:

sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld
sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld

Which installed these freeworld drivers:

mesa-va-drivers-freeworld-23.1.9-1.fc38.x86_64 
mesa-vdpau-drivers-freeworld-23.1.9-1.fc38.x86_64

That increased Big Buck Bunny to ~7.2W with VAAPI HW decode on. With it off, it decreased down to ~6.1W. So for some reason, HW decoding with the freeworld drivers is using more power.

So I reverted the freeworld drivers to:

mesa-vdpau-drivers-23.1.9-1.fc38.x86_64
mesa-va-drivers-23.1.9-1.fc38.x86_64

This is an easy way to do it.

Without the non-freeworld drivers, for Big Buck Bunny, VAAPI hwdec on or off doesn't make a difference in power consumption (not sure why).

Also notably for Firefox YouTube 1080P:

  • freeworld: ~11.6W
  • non-freeworld: ~8.7W So the freeworld drivers seem to be causing excessive power use.

I also noticed that video playback power consumption was slightly higher when I had set display fractional scaling to 1.25 in SwayWM. Currently sway-1.8.1-1.fc38.x86_64 with wlroots-0.16.2-2.fc38.x86_64. This might be fixed with newer versions and wp-fractional-scale-v1? Will try later in Fedora 39 when it's stable to upgrade to. For Firefox YouTube 1080P:

  • No scaling: ~8.7W
  • 1.25x scaling: ~9.2W

The ffmpeg and gstreamer1-plugins-bad-freeworld seems fine.


I added the nodiscard mount option to /etc/fstab to disable discard=async because I was seeing btrfs_discard_workfn occasionally pop up in powertop and it would cause a spike in power usage from 1W to a few W.

And am using the default fstrim.timer that executes fstrim.service weekly. How to test it's working setup/working correctly: https://fedoraproject.org/wiki/Changes/EnableFSTrimTimer#How_To_Test

See:


Current numbers

  • Idle: ~3.6W
  • Big Buck Bunny 1080P VAAPI HW decode: ~6.2W (has gone down to ~5.9W)
  • Big Buck Bunny 1080P no HW decode: ~6.2W
  • Firefox YouTube 1080p: ~8.7W

power-profiles-daemon

I also tested power-profiles-daemon set to power-saver profile.

> powerprofilesctl set power-saver

> powerprofilesctl get
power-saver

Note: I did not try this, but apparently leads to increased power savings paired with PPD. Numbers below are just stock PPD:
Idle: ~4.6W, but strangely after trying again it went down to ~3.7W
Big Buck Bunny: ~7.75W, but strangely after trying again it went down to ~7.1W
YouTube 1080P Firefox: 11.3W

Finally, if the AMD P-State scaling driver is used in active mode, the P-State scaling governor will be changed to powersave as it is the only P-State scaling governor that allows for the "Energy vs Performance Hints" to be taken into consideration.

The repo is archived now? Also, don't think PPD is using the lowest power consumption GPU profile, which may explain the higher video playback numbers?

Just saw this proposal today to replace PPD with tuned for Fedora 40: https://fedoraproject.org/wiki/Changes/TunedReplacesPower-profiles-daemon


Summary

Compared to my i7-1165G7, idle and video playback numbers are about the same (I expected much lower, but still a good sign since it's still early on since kernel/firmware/software/etc. optimizations will come). However, in actual mixed usage, it seems like average power usage is noticeably lower, while being noticeably faster (the core count and compilation speeds, giggity). Will see exactly by how much with further usage.

With these video playback numbers, it would last less than the 13th gen Intel, though I expect this will improve with optimized drivers et al.

Tip: using powertop and setting it to update every 10 seconds instead of default 20 (press s key, type in 10, then press enter) IME gives quick enough feedback. I set a stopwatch on my phone so I know when every 10 seconds is so I can see the updates/commit to my memory/write them down. Default 20 seconds is fine, and longer durations may be better to get closer to true idle numbers since updates take some amount of CPU, but 10 second updates IME is long enough. Anyway, there will be lots of staring at your screen to wait for numbers to stabilize. I've settled on measuring at ~2 minutes with keeping an eye on it occasionally before -- usually things settle in ~1 minute.


Miscellaenous

  • 0% brightness no longer turns the screen fully off?
  • No longer hear a beep from the headphone jack whenever the audio card goes to sleep. I experienced this with the Tempo audio chip on my previous replacement mainboard. Did not experience this on the first Realtek audio chip mainboard, and am glad that I don't experience it on this AMD mainboard.
  • It would be nice if Battery Care support was added to TLP for Framework devices which should be possible because charge limits can be set in the BIOS. There are some issues/commits/pull requests for other brands that can be looked at to see how (and there are many). I may investigate further when time permits.
  • It seems like hibernation/resume (suspend to disk with 64GB) is much faster (DDR5 vs DDR4? Faster CPU?). Haven't thoroughly tested though, it was just from only a few GB used in RAM. Nevermind, might be faster? but still takes a while. The SSD is probably the bottleneck since it's writing up to 64GB to disk.
  • New BIOS UI is much nicer!
  • IIRC, Framework has tuned the audio circuitry for the AMD mainboard for the original speakers, and there was a user report of improvement. I don't want to swap in my old mainboard back to test yet but may in the future to compare some things. On my not-80-db kit, 100% audio now seems much louder while maintaining fidelity. Very nice.

Errors

I'm getting these errors in journald/dmesg:

When resuming from hibernation:

kernel: ucsi_acpi USBC000:00: ucsi_handle_connector_change: ACK failed (-110)

though it seems to be working fine (which I've had setup before from this.

I'm also getting these occasionally:

kernel: i2c_hid_acpi i2c-FRMW0005:00: i2c_hid_get_input: incomplete report (7/65535)
kernel: i2c_designware AMDI0010:00: i2c_dw_handle_tx_abort: lost arbitration

I don't know if it's affecting anything.

Maybe helpful:

I received these notable updates today 2023-11-02:

 amd-gpu-firmware     noarch 20231030-1.fc38       updates         19 M
 iwlwifi-dvm-firmware noarch 20231030-1.fc38       updates        1.8 M
 iwlwifi-mvm-firmware noarch 20231030-1.fc38       updates         46 M
 linux-firmware       noarch 20231030-1.fc38 

And I haven't seen those errors yet. Though, I did get two amdgpu crashes while playing a YouTube video and hooked up to my monitor. Once time it crashed out SwayWM, the other time the screen went black and came back. Similar issues happened early on with my previous Intel, so I expect this to be fixed sooner or later.

# ------------------------------------------------------------------------------
# /etc/tlp.conf - TLP user configuration (version 1.6.1)
# See full explanation: https://linrunner.de/tlp/settings
#
# Copyright (c) 2023 Thomas Koch <linrunner at gmx.net> and others.
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Settings are read in the following order:
#
# 1. Intrinsic defaults
# 2. /etc/tlp.d/*.conf - Drop-in customization snippets
# 3. /etc/tlp.conf - User configuration (this file)
#
# Notes:
# - In case of identical parameters, the last occurence has precedence
# - This also means, parameters enabled here will override anything else
# - However you may append values to a parameter already defined as intrinsic
# default or in a previously read file: use PARAMETER+="add values"
# - IMPORTANT: all parameters here are disabled; remove the leading '#' if you
# like to enable a feature without default or have a value different from the
# default
# - Default *: intrinsic default that is effective when the parameter is missing
# or disabled by a leading '#'; use PARAM="" to disable an intrinsic default
# - Default <none>: do nothing or use kernel/hardware defaults
# - IMPORTANT: parameters must always be specified pairwise i.e. for
# both AC and BAT. Omitting one of the two makes the set value effective for
# both power sources, since a change only occurs when different values are
# defined.
# ------------------------------------------------------------------------------
# tlp - Parameters for power saving
# Set to 0 to disable, 1 to enable TLP.
# Default: 1
TLP_ENABLE=1
# Control how warnings about invalid settings are issued:
# 0=disabled,
# 1=background tasks (boot, resume, change of power source) report to syslog,
# 2=shell commands report to the terminal (stderr),
# 3=combination of 1 and 2
# Default: 3
#TLP_WARN_LEVEL=3
# Operation mode when no power supply can be detected: AC, BAT.
# Concerns some desktop and embedded hardware only.
# Default: <none>
TLP_DEFAULT_MODE=AC
# Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE
# Note: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC.
# Default: 0
#TLP_PERSISTENT_DEFAULT=0
# Power supply classes to ignore when determining operation mode: AC, USB, BAT.
# Separate multiple classes with spaces.
# Note: try on laptops where operation mode AC/BAT is incorrectly detected.
# Default: <none>
#TLP_PS_IGNORE="BAT"
# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
# Non-zero value enables, zero disables laptop mode.
# Default: 0 (AC), 2 (BAT)
#DISK_IDLE_SECS_ON_AC=0
#DISK_IDLE_SECS_ON_BAT=2
# Dirty page values (timeouts in secs).
# Default: 15 (AC), 60 (BAT)
#MAX_LOST_WORK_SECS_ON_AC=15
#MAX_LOST_WORK_SECS_ON_BAT=60
# Select a CPU scaling driver operation mode.
# Intel CPU with intel_pstate driver:
# active, passive.
# AMD Zen 2 or newer CPU with amd-pstate_driver as of kernel 6.3/6.4(*):
# active, passive, guided(*).
# Default: <none>
# TODO:
# - Test performance/power with `passive` value.
# - Test performance/power with `guided` mode and the `amd-pstate` with
# TLP recommended `ondemand` or `schedutil` governors below.
CPU_DRIVER_OPMODE_ON_AC=active
CPU_DRIVER_OPMODE_ON_BAT=active
# Select a CPU frequency scaling governor.
# Intel CPU with intel_pstate driver or
# AMD CPU with amd-pstate driver in active mode ('amd-pstate-epp'):
# performance, powersave(*).
# Intel CPU with intel_pstate driver in passive mode ('intel_cpufreq') or
# AMD CPU with amd-pstate driver in passive or guided mode ('amd-pstate') or
# Intel, AMD and other CPU brands with acpi-cpufreq driver:
# conservative, ondemand(*), userspace, powersave, performance, schedutil(*).
# Use tlp-stat -p to show the active driver and available governors.
# Important:
# Governors marked (*) above are power efficient for *almost all* workloads
# and therefore kernel and most distributions have chosen them as defaults.
# You should have done your research about advantages/disadvantages *before*
# changing the governor.
# Default: <none>
CPU_SCALING_GOVERNOR_ON_AC=powersave
# TODO:
# - With `CPU_DRIVER_OPMODE_ON_AC=active`:
# - Test performance/power between `performance` and `powersave`, though
# I'm IME and from the TLP recommendation that `powersave` is good.
# - With `CPU_DRIVER_OPMODE_ON_AC` as `passive` or `guided`:
# - Test TLP recommended `ondemand` or `schedutil` governors.
CPU_SCALING_GOVERNOR_ON_BAT=powersave
# Set the min/max frequency available for the scaling governor.
# Possible values depend on your CPU. For available frequencies see
# the output of tlp-stat -p.
# Notes:
# - Min/max frequencies must always be specified for both AC *and* BAT
# - Not recommended for use with the intel_pstate driver, use
# CPU_MIN/MAX_PERF_ON_AC/BAT below instead
# Default: <none>
#CPU_SCALING_MIN_FREQ_ON_AC=0
#CPU_SCALING_MAX_FREQ_ON_AC=0
#CPU_SCALING_MIN_FREQ_ON_BAT=0
#CPU_SCALING_MAX_FREQ_ON_BAT=0
# Set CPU energy/performance policies EPP and EPB:
# performance, balance_performance, default, balance_power, power.
# Values are given in order of increasing power saving.
# Requires:
# * Intel CPU
# EPP: Intel Core i 6th gen. or newer CPU with intel_pstate driver
# EPB: Intel Core i 2nd gen. or newer CPU with intel_pstate driver
# as of kernel 5.2; alternatively module msr and
# x86_energy_perf_policy from linux-tools
# EPP and EPB are mutually exclusive: when EPP is available, Intel CPUs
# will not honor EPB. Only the matching feature will be applied by TLP.
# * AMD Zen 2 or newer CPU
# EPP: amd-pstate driver in active mode ('amd-pstate-epp') as of kernel 6.3
# Default: balance_performance (AC), balance_power (BAT)
CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
# TODO: Test fixed number for CPU_ENERGY_PERF_POLICY_ON_BAT, if supported, and
# `default`, `performance`, `balance_performance`, `balance_power`, `power`.
# On previous Intel i7-1165G7, I had this set to `225`.
# Setting this to `power` for max power savings for now.
CPU_ENERGY_PERF_POLICY_ON_BAT=power
# Set Intel CPU P-state performance: 0..100 (%).
# Limit the max/min P-state to control the power dissipation of the CPU.
# Values are stated as a percentage of the available performance.
# Requires Intel Core i 2nd gen. or newer CPU with intel_pstate driver.
# Default: <none>
#CPU_MIN_PERF_ON_AC=0
#CPU_MAX_PERF_ON_AC=100
#CPU_MIN_PERF_ON_BAT=0
#CPU_MAX_PERF_ON_BAT=30
# Set the CPU "turbo boost" (Intel) or "turbo core" (AMD) feature:
# 0=disable, 1=allow.
# Allows to raise the maximum frequency/P-state of some cores if the
# CPU chip is not fully utilized and below it's intended thermal budget.
# Note: a value of 1 does *not* activate boosting, it just allows it.
# Default: <none>
CPU_BOOST_ON_AC=1
# TODO: test power/performance with CPU boost on battery, though
# I'm guessing boost uses considerably more power.
CPU_BOOST_ON_BAT=0
# Set Intel/AMD CPU dynamic boost feature:
# 0=disable, 1=enable.
# Improve performance by increasing minimum P-state limit dynamically
# whenever a task previously waiting on I/O is selected to run.
# Requires:
# * Intel Core i 6th gen. or newer CPU: intel_pstate driver in active mode
# * AMD Zen 2 or newer CPU: amd-pstate driver in active mode ('amd-pstate-epp')
# provided by a yet unreleased kernel 6.x
# Default: <none>
CPU_HWP_DYN_BOOST_ON_AC=1
CPU_HWP_DYN_BOOST_ON_BAT=0
# Kernel NMI Watchdog:
# 0=disable (default, saves power), 1=enable (for kernel debugging only).
# Default: 0
NMI_WATCHDOG=0
# Select platform profile:
# performance, balanced, low-power.
# Controls system operating characteristics around power/performance levels,
# thermal and fan speed. Values are given in order of increasing power saving.
# Note: check the output of tlp-stat -p to determine availability on your
# hardware and additional profiles such as: balanced-performance, quiet, cool.
# Default: <none>
# TODO: test performance and power between `performance` and `balanced`.
PLATFORM_PROFILE_ON_AC=performance
# TODO: test performance and power between `balanced` and `low-power`.
PLATFORM_PROFILE_ON_BAT=low-power
# System suspend mode:
# s2idle: Idle standby - a pure software, light-weight, system sleep state,
# deep: Suspend to RAM - the whole system is put into a low-power state,
# except for memory, usually resulting in higher savings than s2idle.
# CAUTION: changing suspend mode may lead to system instability and even
# data loss. As for the availability of different modes on your system,
# check the output of tlp-stat -s. If unsure, stick with the system default
# by not enabling this.
# Default: <none>
#MEM_SLEEP_ON_AC=s2idle
#MEM_SLEEP_ON_BAT=deep
# Define disk devices on which the following DISK/AHCI_RUNTIME parameters act.
# Separate multiple devices with spaces.
# Devices can be specified by disk ID also (lookup with: tlp diskid).
# Default: "nvme0n1 sda"
DISK_DEVICES="nvme0n1 sda"
# Disk advanced power management level: 1..254, 255 (max saving, min, off).
# Levels 1..127 may spin down the disk; 255 allowable on most drives.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the hardware default for the particular disk.
# Default: 254 (AC), 128 (BAT)
#DISK_APM_LEVEL_ON_AC="254 254"
#DISK_APM_LEVEL_ON_BAT="128 128"
# Exclude disk classes from advanced power management (APM):
# sata, ata, usb, ieee1394.
# Separate multiple classes with spaces.
# CAUTION: USB and IEEE1394 disks may fail to mount or data may get corrupted
# with APM enabled. Be careful and make sure you have backups of all affected
# media before removing 'usb' or 'ieee1394' from the denylist!
# Default: "usb ieee1394"
#DISK_APM_CLASS_DENYLIST="usb ieee1394"
# Hard disk spin down timeout:
# 0: spin down disabled
# 1..240: timeouts from 5s to 20min (in units of 5s)
# 241..251: timeouts from 30min to 5.5 hours (in units of 30min)
# See 'man hdparm' for details.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the hardware default for the particular disk.
# Default: <none>
#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"
# Select I/O scheduler for the disk devices.
# Multi queue (blk-mq) schedulers:
# mq-deadline(*), none, kyber, bfq
# Single queue schedulers:
# deadline(*), cfq, bfq, noop
# (*) recommended.
# Separate values for multiple disks with spaces. Use the special value 'keep'
# to keep the kernel default scheduler for the particular disk.
# Notes:
# - Multi queue (blk-mq) may need kernel boot option 'scsi_mod.use_blk_mq=1'
# and 'modprobe mq-deadline-iosched|kyber|bfq' on kernels < 5.0
# - Single queue schedulers are legacy now and were removed together with
# the old block layer in kernel 5.0
# Default: keep
#DISK_IOSCHED="mq-deadline mq-deadline"
# AHCI link power management (ALPM) for SATA disks:
# min_power, med_power_with_dipm(*), medium_power, max_performance.
# (*) recommended.
# Multiple values separated with spaces are tried sequentially until success.
# Default: med_power_with_dipm (AC & BAT)
#SATA_LINKPWR_ON_AC="med_power_with_dipm"
#SATA_LINKPWR_ON_BAT="med_power_with_dipm"
# Exclude SATA links from AHCI link power management (ALPM).
# SATA links are specified by their host. Refer to the output of
# tlp-stat -d to determine the host; the format is "hostX".
# Separate multiple hosts with spaces.
# Default: <none>
#SATA_LINKPWR_DENYLIST="host1"
# Runtime Power Management for NVMe, SATA, ATA and USB disks
# as well as SATA ports:
# on=disable, auto=enable.
# Note: SATA controllers are PCIe bus devices and handled by RUNTIME_PM further
# down.
# Default: on (AC), auto (BAT)
AHCI_RUNTIME_PM_ON_AC=on
AHCI_RUNTIME_PM_ON_BAT=auto
# Seconds of inactivity before disk is suspended.
# Note: effective only when AHCI_RUNTIME_PM_ON_AC/BAT is activated.
# Default: 15
#AHCI_RUNTIME_PM_TIMEOUT=15
# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable.
# Drive can be powered on again by releasing (and reinserting) the eject lever
# or by pressing the disc eject button on newer models.
# Note: an UltraBay/MediaBay hard disk is never powered off.
# Default: 0
#BAY_POWEROFF_ON_AC=0
#BAY_POWEROFF_ON_BAT=0
# Optical drive device to power off
# Default: sr0
#BAY_DEVICE="sr0"
# Set the min/max/turbo frequency for the Intel GPU.
# Possible values depend on your hardware. For available frequencies see
# the output of tlp-stat -g.
# Default: <none>
#INTEL_GPU_MIN_FREQ_ON_AC=0
#INTEL_GPU_MIN_FREQ_ON_BAT=0
#INTEL_GPU_MAX_FREQ_ON_AC=0
#INTEL_GPU_MAX_FREQ_ON_BAT=0
#INTEL_GPU_BOOST_FREQ_ON_AC=0
#INTEL_GPU_BOOST_FREQ_ON_BAT=0
# AMD GPU power management.
# Performance level (DPM): auto, low, high; auto is recommended.
# Note: requires amdgpu or radeon driver.
# Default: auto
RADEON_DPM_PERF_LEVEL_ON_AC=auto
# TODO:
# - Test performance/power between `auto` and `low`.
# - Can a fixed number be set?
# Keeping it set to TLP recommended auto for now???
RADEON_DPM_PERF_LEVEL_ON_BAT=low
# Dynamic power management method (DPM): balanced, battery, performance.
# Note: radeon driver only.
# Default: <none>
RADEON_DPM_STATE_ON_AC=performance
# TODO:
# - Test performance and power between `balanced` and `battery`.
# - Can a fixed number be set?
RADEON_DPM_STATE_ON_BAT=battery
# Graphics clock speed (profile method): low, mid, high, auto, default;
# auto = mid on BAT, high on AC.
# Note: radeon driver on legacy ATI hardware only (where DPM is not available).
# Default: default
#RADEON_POWER_PROFILE_ON_AC=default
#RADEON_POWER_PROFILE_ON_BAT=default
# Wi-Fi power saving mode: on=enable, off=disable.
# Default: off (AC), on (BAT)
WIFI_PWR_ON_AC=off
# XXX:
# Idle with it on: ~3.7W
# Idle with it off: ~4.5W
# I'm not sure if there's a cold start delay after idle. If it's noticeably
# slow/delayed, the power savings might not be worth it.
WIFI_PWR_ON_BAT=on
# Disable Wake-on-LAN: Y/N.
# Default: Y
#WOL_DISABLE=Y
# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
# A value of 0 disables, >= 1 enables power saving.
# Note: 1 is recommended for Linux desktop environments with PulseAudio,
# systems without PulseAudio may require 10.
# Default: 1
#SOUND_POWER_SAVE_ON_AC=1
#SOUND_POWER_SAVE_ON_BAT=1
# Disable controller too (HDA only): Y/N.
# Note: effective only when SOUND_POWER_SAVE_ON_AC/BAT is activated.
# Default: Y
#SOUND_POWER_SAVE_CONTROLLER=Y
# PCIe Active State Power Management (ASPM):
# default(*), performance, powersave, powersupersave.
# (*) keeps BIOS ASPM defaults (recommended)
# Default: <none>
# TODO:
# - Check if there's a noticeable power/performance difference.
# Going with the TLP recommended `default` for now.
# Intel i7-1165G7, I had AC set to `powersave`.
PCIE_ASPM_ON_AC=default
# Intel i7-1165G7, I had BAT set to `powersupersave`.
# trying out powersupersave???
PCIE_ASPM_ON_BAT=powersupersave
# Runtime Power Management for PCIe bus devices: on=disable, auto=enable.
# Default: on (AC), auto (BAT)
#RUNTIME_PM_ON_AC=on
#RUNTIME_PM_ON_BAT=auto
# Exclude listed PCIe device adresses from Runtime PM.
# Note: this preserves the kernel driver default, to force a certain state
# use RUNTIME_PM_ENABLE/DISABLE instead.
# Separate multiple addresses with spaces.
# Use lspci to get the adresses (1st column).
# Default: <none>
#RUNTIME_PM_DENYLIST="11:22.3 44:55.6"
# Exclude PCIe devices assigned to the listed drivers from Runtime PM.
# Note: this preserves the kernel driver default, to force a certain state
# use RUNTIME_PM_ENABLE/DISABLE instead.
# Separate multiple drivers with spaces.
# Default: "mei_me nouveau radeon", use "" to disable completely.
#RUNTIME_PM_DRIVER_DENYLIST="mei_me nouveau radeon"
# Permanently enable/disable Runtime PM for listed PCIe device addresses
# (independent of the power source). This has priority over all preceding
# Runtime PM settings. Separate multiple addresses with spaces.
# Use lspci to get the adresses (1st column).
# Default: <none>
#RUNTIME_PM_ENABLE="11:22.3"
#RUNTIME_PM_DISABLE="44:55.6"
# Set to 0 to disable, 1 to enable USB autosuspend feature.
# Default: 1
#USB_AUTOSUSPEND=1
# Exclude listed devices from USB autosuspend (separate with spaces).
# Use lsusb to get the ids.
# Note: input devices (usbhid) and libsane-supported scanners are excluded
# automatically.
# Default: <none>
#USB_DENYLIST="1111:2222 3333:4444"
# Exclude audio devices from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 1
#USB_EXCLUDE_AUDIO=1
# Exclude bluetooth devices from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 0
#USB_EXCLUDE_BTUSB=0
# Exclude phone devices from USB autosuspend:
# 0=do not exclude, 1=exclude (enable charging).
# Default: 0
#USB_EXCLUDE_PHONE=0
# Exclude printers from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 1
#USB_EXCLUDE_PRINTER=1
# Exclude WWAN devices from USB autosuspend:
# 0=do not exclude, 1=exclude.
# Default: 0
#USB_EXCLUDE_WWAN=0
# Allow USB autosuspend for listed devices even if already denylisted or
# excluded above (separate with spaces). Use lsusb to get the ids.
# Default: 0
#USB_ALLOWLIST="1111:2222 3333:4444"
# Set to 1 to disable autosuspend before shutdown, 0 to do nothing
# Note: use as a workaround for USB devices that cause shutdown problems.
# Default: 0
#USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=0
# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
# on system startup: 0=disable, 1=enable.
# Note: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
# are ignored when this is enabled.
# Default: 0
#RESTORE_DEVICE_STATE_ON_STARTUP=0
# Radio devices to disable on startup: bluetooth, nfc, wifi, wwan.
# Separate multiple devices with spaces.
# Default: <none>
#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth nfc wifi wwan"
# Radio devices to enable on startup: bluetooth, nfc, wifi, wwan.
# Separate multiple devices with spaces.
# Default: <none>
#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
# Radio devices to disable on shutdown: bluetooth, nfc, wifi, wwan.
# Note: use as a workaround for devices that are blocking shutdown.
# Default: <none>
#DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth nfc wifi wwan"
# Radio devices to enable on shutdown: bluetooth, nfc, wifi, wwan.
# (to prevent other operating systems from missing radios).
# Default: <none>
#DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan"
# Radio devices to enable on AC: bluetooth, nfc, wifi, wwan.
# Default: <none>
#DEVICES_TO_ENABLE_ON_AC="bluetooth nfc wifi wwan"
# Radio devices to disable on battery: bluetooth, nfc, wifi, wwan.
# Default: <none>
#DEVICES_TO_DISABLE_ON_BAT="bluetooth nfc wifi wwan"
# Radio devices to disable on battery when not in use (not connected):
# bluetooth, nfc, wifi, wwan.
# Default: <none>
#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth nfc wifi wwan"
# TODO: Get battery care supported for Framework devices.
# Battery Care -- Charge thresholds
# Charging starts when the charger is connected and the charge level
# is below the start threshold. Charging stops when the charge level
# is above the stop threshold.
# Required hardware: Lenovo ThinkPads and select other laptop brands
# are driven via specific plugins
# - Active plugin and support status are shown by tlp-stat -b
# - Vendor specific threshold levels are shown by tlp-stat -b, some
# laptops support only 1 (on)/ 0 (off) instead of a percentage level
# - When your hardware supports a start *and* a stop threshold, you must
# specify both, otherwise TLP will refuse to apply the single threshold
# - When your hardware supports only a stop threshold, set the start
# value to 0
# - Older ThinkPads may require an external kernel module, refer to the
# output of tlp-stat -b
# For further explanation and vendor specific details refer to
# - https://linrunner.de/tlp/settings/battery.html
# - https://linrunner.de/tlp/settings/bc-vendors.html
# BAT0: Primary / Main / Internal battery
# Note: also use for batteries BATC, BATT and CMB0
# Default: <none>
# Battery charge level below which charging will begin.
#START_CHARGE_THRESH_BAT0=75
# Battery charge level above which charging will stop.
#STOP_CHARGE_THRESH_BAT0=80
# BAT1: Secondary / Ultrabay / Slice / Replaceable battery
# Note: primary on some laptops
# Default: <none>
# Battery charge level below which charging will begin.
#START_CHARGE_THRESH_BAT1=75
# Battery charge level above which charging will stop.
#STOP_CHARGE_THRESH_BAT1=80
# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable.
# Default: 0
#RESTORE_THRESHOLDS_ON_BAT=1
# Control battery care drivers: 0=disable, 1=enable.
# Default: 1 (all)
#NATACPI_ENABLE=1
#TPACPI_ENABLE=1
#TPSMAPI_ENABLE=1
# ------------------------------------------------------------------------------
# tlp-rdw - Parameters for the radio device wizard
# Possible devices: bluetooth, wifi, wwan.
# Separate multiple radio devices with spaces.
# Default: <none> (for all parameters below)
# Radio devices to disable on connect.
#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
# Radio devices to enable on disconnect.
#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
# Radio devices to enable/disable when docked.
#DEVICES_TO_ENABLE_ON_DOCK=""
#DEVICES_TO_DISABLE_ON_DOCK=""
# Radio devices to enable/disable when undocked.
#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#DEVICES_TO_DISABLE_ON_UNDOCK=""
@Wemmy0
Copy link

Wemmy0 commented Oct 7, 2024

Amazing work, thank you!
I haven't done a full battery life test yet but playing a 1080p YouTube video has gone from about 3h 45m to around 5h 10m using the freeworld drivers for more supported codecs

I did some benchmarks to compare performance:

TLP
Single: 4919.94
Multi: 32348.29
HOLY SHIT

Power Profiles PowerSaver
Single: 2770.16
Multi: 15524.03

Power Profiles Balanced
Single: 4922.95
Multi: 38566.32

Power Profiles Performance
SIngle: 4927.50
Multi: 41922.37

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment