PowerMizer Power Source Error/Undersized - Possibly something to do with non-ACPI battery?

Hardware: Surface Laptop Studio (with RTX 3050 Ti)
Distro: Fedora 39 KDE (Note that this issue happens regardless of distro and compositor)
NVIDIA driver: 545.29.06
uname -a: Linux fedora 6.6.6-1.surface.fc39.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Dec 13 21:59:03 UTC 2023 x86_64 GNU/Linux (Issue happens on generic kernel as well)

I have an issue when the GPU wakes up from D3cold, PowerMizer will report that the Power Source is either “Undersized” or “Error” resulting in the GPU being locked to a 10W power limit and the lowest clocks even under heavy graphical load, the only way to fix this is to reboot where it’ll happen again as soon as the GPU goes in and out of D3cold. Disabling RTD3 seems to fix the issue but obviously this isn’t ideal as the GPU will be constantly awake drawing more power.

As far as I know, the NVIDIA driver uses ACPID (which I have installed and enabled, also ACPID is indeed working properly as when I run acpi_listen and press the volume/display brightness keys, it does spit out a bunch of related ACPI events) to determine if the device is running on AC or battery power, however, on these newer Surface devices, it turns out that the battery is not implemented via ACPI (I’m assuming it’s implemented via the Surface Aggregator Module) and thus cannot send ACPI power events.

However running upower -m does report a change when the AC power is disconnected/reconnected. So if my suspicions so far are indeed correct, then it’s the fact that the battery does not send any ACPI power events is throwing off the NVIDIA driver and thus PowerMizer which causes it to report erroneous power source readings (also if RTD3 is disabled of if the GPU is switched to the D0 state after power on before it has a chance to go into D3cold, PowerMizer will report that the power source is always AC even when unplugged) which in turn causes the power limit to be locked to 10W and clock speeds reduced.

I understand it’s kind of a niche case, but would it be possible for the NVIDIA developers to implement something like upower or querying the kernel’s /sys/class/power_supply interface directly alongside ACPID for PowerMizer?

nvidia-bug-report.log.gz (412.1 KB)

EDIT: Okay, I’ve installed driver 525.147.05 and I’ve confirmed that this issue does not seem to be present on this driver version, PowerMizer power source still does not change from AC to battery when the device is unplugged but it does not change to Error/Undersized when waking from D3cold meaning I have full performance. So it seems like an issue for driver releases 535 and up in my opinion.

1 Like

I also noticed this problem on my dell g15 (5530 RTX 3050).

Its really annoying, i thought my AC was broken.

Looks like its related to vBIOS? Dont know.

For my Surface Laptop Studio specifically, the issue seems to be the fact that the power subsystems are controlled via the proprietary Surface Aggregator Module instead of ACPI and that seems to the throwing the NVIDIA driver off.

So far, I haven’t found any real solution to this issue asides from downgrading the NVIDIA driver to 525.xx, the last version where manually setting the power limit via ‘nvidia-smi’ was supported.

It’s definitely good to see though that there are other people experiencing the same issue considering there seems to be absolutely zero others on the Internet who’ve posted about it.

1 Like