Battery charge limit occasionally ignored

I have battery charge limit in BIOS settings set to 60, the recommended setting when the laptop spends most of its time on AC power.

I have the latest firmware installed:

 └─Laptop 16 AMD Ryzen 7040 System Update:
        New version:      0.0.3.5
        Remote ID:        lvfs
        Release ID:       102512
        Summary:          Framework Laptop 16 System Firmware for AMD Ryzen 7040
 Mainboards
        License:          Proprietary
        Size:             36.1 MB
        Created:          2024-11-13
        Urgency:          High
        Tested by Framework:
          Tested:         2024-11-21
          Distribution:   fedora 40 (workstation)
          Old version:    0.0.3.4
          Version[fwupd]: 1.9.26

Most of the time the battery charge stays steady at 60%, as requested. But this has already happened several times, and I see no clear pattern, but sometimes the battery charge limit gets ignored and the battery continues to charge.

Last time it happened I noticed that the battery was at about 80%. I rebooted the laptop, and the battery charge slowly drew down to the prescribed 60% capacity, and held there.

I just noticed that the battery is now at 90%. The battery continued to charge after a reboot. I turned off AC power, I’ll wait until it drops below 60%, then plug back the AC power and see what happens…

1 Like

I have seen the same issue. I also have the charge limit set at 60% and mostly that is what it sits at but on two occasions now it seemingly randomly started charging past that limit. I then have disconnected the AC power and let it go below 60% before connecting it again.

I’m running Windows 11 pro and have the latest BIOS (3.05) and driver bundle (2024-10-02) installed.

Disclaimer: This is only my speculation, consider a second opinion.

The latest BIOS introduced Battery Life Extender, which slowly discharges the battery to 90% if the laptop is left plugged in for several days. The BIOS might sometimes consider using the Battery Life Extender charge % despite the manual charging % limit is lower. Disabling Battery Life Extender might work.

1 Like

It is certainly something to do with the BIOS update to 3.05. I have my battery charge limit set to 80% because it is permanently plugged in and after the update the charge level will sit at various values between 80% and 90%. It is currently at 87%, which seems to be a common intermediate value.

I haven’t worried about it as it hasn’t gone to 100%. But personally I think setting it at 60% seems extremely low, 80% seemed to be the recommended when I looked around, and it certainly suits me.

I have the same.
In fact it look like the new “Battery Life Extender” take precedence over “static” limite.
so if you activate both, after the selected time it use his limit (90%?) even if it is higher than the static config.

Cool be nice if we can config the % limit for “Battery Life Extender” or use the static One if both are enable.

If we can find a “better” strategy, may be Framework can change that for next bios update.

For 80% vs 60%. 60% is what is recommended by battery maker for long storage. 80% is a compromise between energy storage (when you need some time to use it not connected) and battery lifespan.

2 Likes

It work for me. :wink:

1 Like

Update: I let the battery level drop below 60%, then plugged in AC power. The battery charged up to the 60% level and it’s holding there.

So, that has to be it – this is just the confusing way that battery life extender logic works, it brooms away the battery charge limit setting in a non-intuitive manner.

Logically, it would’ve been more intuitive if the battery life extender worked in a slightly different way. The battery life extender basically computes: if the system is on AC power, continuously, for period X, then reduce the battery charge level to Y%.

The way I think this should work is that the effective battery charge level target should always be the lowest of Y% and the battery charge level setting value. That’s it. Effectively, the battery life extender kicks in only if it wants the battery to be below the current battery charge level setting’s value. Otherwise it has no effect.

3 Likes

I can see both sides. Personally, I think any of the options are too complicated or non-user-friendly enough that I just don’t use them. What I’d personally love to see is a physical switch that toggles a battery charge limit on/off, and the percentage of that limit be configurable in the BIOS. That’s never gonna happen, but I can dream.

Thank you for this. I have been running into this issue as well. Based on the description of the Battery Life Extender, I would say this is a firmware bug as it is introducing the issue that it is supposed to prevent.

I leave my laptop plugged in 100% of the time; but have the charge limit set to 60%. This feature is supposed to prevent it from overcharging but I have noticed that it has charged up completely and even given me the LED notifications that it was overcharged.

Next time I boot up I’ll look to disable this feature so it stops overcharging.

Is there an LED specifically indicate overcharging?

Yeah the power led will flash.

Presumably this is simply showing that charging beyond your set limit has occurred, not a warning that the calls are actually overvoltage and in a dangerous state.

Yeah I believe that is right

This issue may be related in that letting the battery drop below 60% and then plugging in appears to avoid the issue.

This has happened to me too, with my limit at 80% being overridden and the battery being charged to over 90%. It’s only happened in the last couple of days, when I tried the Battery Life Extender. I’m pretty sure that’s the problem so I’ll disable that and see if it happens again.

I’m having the same bug!!! It’s terrible

I solved the issue by disabling the Battery Life Extender in the BIOS, as suggested above. Have had zero issues since.

1 Like

I still have this issue even after disabling the Battery Life Extender. I have BIOS 3.07 for the 4070 series. It’d be nice if someone from frame.work chimed in or posted something about this somehwere. If i had to guess, judging by how my iPhone also does this occasionally, the device needs to charge to 100% from time to time in order to maintain an accurate percentage reading of the amount of energy left. Like a re-calibration from time to time. But it feels like it does it too often.

1 Like

Thank you, I have the same issue. I will try disabling the Battery Life Extender too and see if it stops.

Another observation that I wonder if you also have is that when the battery reaches the Target Limit (mine is 80%), the laptop state is switching from charging to discharging and vice versa when going from light load to heavy load. Do you guys see the same too? I would expect that the state is always “Charging” or “Plugged In” instead of “Discharging”.

I am on EndevourOS, Linux Kernel 6.12 and BIOS 3.5, using a 180W charger (definitely enough for my heavy load - GPU only)

Hi. I have looked at the EC source code for the “lotus” branch of the EC source code. This is for the FW16.
Quick summary: the EC code is pretty buggy.
Here is how it behaves:

  1. if you set a charge limit to say 60%.
    It will happily try to keep the charge below or equal to 60%. There is a small bug edge case where it can cycle between charge/discharge at the 60% point.
    If you have enabled the battery extender. When the battery extender activates, it forgets the 60% and let’s the battery extender setting override it, thus happily charging up to 96% or whatever the first step of the battery extender is. This override is permanent, until you reboot the EC.

  2. if the charge limit is set to 100%
    The battery extender will eventually override that and drop the limit to 96% and force a discharge of the battery to 96% even if the psu is plugged in.

Summary:
You only have 2 options that actually work:

  1. set the battery limit to 60% or 80% or whatever and disable battery extender.
  2. set the battery limit to 100% and enable the battery extender.

Note:
I have modified my EC code so that it will not force discharge the battery when the battery limit is set to 60% or 80%.
With my code, it will charge up to limit, then sit in “IDLE” mode, never force discharging unless

  1. unplug charger
  2. cpu/gpu needs more power than the psu can supply, so adds some power from the battery to help.
    I disable the battery extender code in the bios.