FrameworkComputer/SoftwareFirmwareIssueTracker

FW13 12th gen: charge limit won't cycle correctly between defined values

Opened this issue · 0 comments

Device Information

System Model or SKU

Please select one of the following

  • Framework Laptop 13 (11th Gen Intel® Core™)
  • Framework Laptop 13 (12th Gen Intel® Core™)
  • Framework Laptop 13 (13th Gen Intel® Core™)
  • Framework Laptop 13 (AMD Ryzen™ 7040 Series)
  • Framework Laptop 13 (Intel® Core™ Ultra Series 1)
  • Framework Laptop 16 (AMD Ryzen™ 7040 Series)

BIOS VERSION

3.18

DIY Edition information

Memory: 2x Corsair CMSX32GX4M2A3200C22 (16GB)
Storage: WD_BLACK SN850X 1000GB

Describe the bug

When setting up an upper charge limit (e.g. 60%), the system constantly cycles between 59% and 60% and shows "charging" while on 60% in the gnome menu. This behaviour happens when using the kernel parameter (see context), used to set the charging limit. framework_tool (instead of the kernel parameter) shows the same behaviour, holding the charge constantly at 60%.

Output from framework_tool (while I set the limit through the gnome-extension, using the kernel parameter):

> sudo framework_tool --driver cros-ec --charge-limit
Minimum 0%, Maximum 95%

Nevertheless, the system will not charge beyond 60%.

Output from framework_tool (while I set the limit through the gnome-extension, using framework_tool, no kernel parameter):

> sudo framework_tool --driver cros-ec --charge-limit
Minimum 0%, Maximum 60%

The system will not charge beyond 60%.

Steps To Reproduce

Kernel Parameter:

  1. Install mentioned gnome-extension (for easier limit definition)
  2. sudo grubby --update-kernel=ALL --args="cros_charge-control.probe_with_fwk_charge_control=1"
  3. Reboot
  4. Choose a charge limit profile from the extension
  5. Produce some load (so the battery drains power)

framework_tool:

  1. sudo grubby --update-kernel=ALL --remove-args="cros_charge-control.probe_with_fwk_charge_control=1"
  2. Reboot
  3. Install mentioned gnome-extension (for easier limit definition)
  4. Clone and build framework_tool, create a symlink to /usr/bin/ (so the extension can use it)
  5. Select a charge limit profile from the extension
  6. Produce some load (so the battery drains power)

You can also skip the gnome extension and use cat /sys/class/power_supply/BAT1/charge_control_start_threshold and cat /sys/class/power_supply/BAT1/charge_control_stop_threshold (with kernel parameter) or sudo framework_tool --driver cros-ec --charge-limit 60 (without kernel parameter) directly.

Expected behaviour

With Kernel Parameter:
As I can define a lower limit and an upper limit, the battery should discharge to the lower limit before charging to the upper limit again.

On framewok_tool:
According to https://community.frame.work/t/framework-laptop-13-12th-gen-intel-core-bios-3-18-release-beta/71888 , when I set my charge limit to 60%, it should cycle between 55% and 60%

Operating System (please complete the following information):

  • OS/Distribution: Fedora 42
  • Kernel: Linux framework 6.15.4-200.fc42.x86_64
  • framework_tool:
    Version: 0.4.5
    Built At: Thu, 10 Jul 2025 15:38:04 +0000
    Git Commit: 7c17569044b12e99ecc02ae6ea61ce5ab517ab09
    Git Dirty: false

Additional context

I'm using https://extensions.gnome.org/extension/5724/battery-health-charging/ to steer my battery from within the gnome menu. It works natively in case the kernel parameter cros_charge-control.probe_with_fwk_charge_control=1 is set (providing a lower and upper threshold for the battery, like populated by the kernel itself, see steps to reproduce) or through the framework_tool if the kernel won't provide battery controls natively.

Battery Extender is disabled in the BIOS, and the original charge limit was set to 95% in the bios itself.