You are not logged in.
Hello,
I've been trying to solve the ~3-4W idle power drain from my NVIDIA dGPU on my ThinkPad X1 Extreme. No matter what I try, I cannot get the card to enter the RTD3 (suspended) state. nvidia-smi shows it's always in P8 mode, and cat /proc/driver/nvidia/.../power confirms Video Memory: Active.
I'm hoping someone with similar hardware has found a solution.
System:
Model: ThinkPad X1 Extreme (Gen 3, i7-10850h)
dGPU: NVIDIA GeForce GTX 1650 Ti Mobile
iGPU: Intel UHD Graphics
OS: Arch Linux (Mainline Kernel, nvidia-dkms 580.95.05)
Display Manager: SDDM
Sessions: Hyprland, Niri, gnome & Sway
Goal: Get the NVIDIA dGPU to automatically enter the D3cold (RTD3) suspended state when not in use.
Phase 1: Attempting Automatic RTD3 (All Methods Failed)
I followed the Arch Wiki and NVIDIA docs for RTD3 power management, but the card remains active.
*First I would like to mention that I did try envycontrol first, all of these steps are after envycontrol failed to work*
BIOS Config:
Set Config > Power > Sleep State to Windows (to enable S0ix).
Result: cat .../power correctly shows S0ix Power Management: Platform Support: Supported.
Kernel cmdline (GRUB):
Edited /etc/default/grub and ran grub-mkconfig.
My GRUB_CMDLINE_LINUX_DEFAULT includes:
nvidia_drm.modeset=1 (for Wayland)
nvidia.NVreg_DynamicPowerManagement=0x01 (also tried 0x02)
nvidia_drm.fbdev=0 (to prevent fbcon from locking the VRAM)
udev Rules:
Created /etc/udev/rules.d/80-nvidia-pm.rules to set ATTR{power/control}="auto" for all NVIDIA PCI functions (VGA, Audio, USB-C, etc.).
modprobe.d Config:
Blacklisted the legacy framebuffer driver: blacklist nvidiafb in /etc/modprobe.d/blacklist-nvidiafb.conf.
Service & Driver Tests:
Confirmed nvidia-persistence.service is not installed/running.
Disabled tlp.service (no change).
Tested with both nvidia-dkms (mainline) and nvidia-lts (LTS kernel).
Final Result (All Sessions): Despite all this, the driver status is:
Runtime D3 status: Enabled (coarse-grained)
Video Memory: Active
S0ix Power Management:
Platform Support: Supported
Status: Disabled
This state persists even in a bare TTY with sddm.service stopped and nvidia-smi showing 0 processes. This proves a kernel-level process is holding the Video Memory: Active lock, which in turn prevents S0ix Status from enabling.
Phase 2: Attempting Manual "Harsh Kill" (Failed due to Freezing)
Since automatic suspend failed, I tried a manual power-off as a last resort.
Attempt 1: bbswitch-dkms
Action: Installed bbswitch-dkms and tried to turn the card off via sudo tee /proc/acpi/bbswitch <<< OFF.
Result: bbswitch did nothing. The command ran, but the GPU remained active in P8 and continued to draw 3-4W.
Attempt 2: acpi_call (via scripts)
Action: Used acpi_call scripts (e.g., \_SB.PCI0.PEG0.PEGP._OFF) to directly kill power to the card.
The Good News: This WORKED. The dGPU powered off, and my idle power in a test iGPU Sway session dropped from ~11W to a beautiful ~7.2W.
The New Problem (The Blocker): The system became super unstable. The moment I plug in or unplug the AC power adapter, the entire system freezes instantly and requires a hard reboot.
My Question for the Community
Has anyone with this hardware (X1 Extreme Gen 3, 1650 Ti) successfully enabled automatic RTD3 and gotten Video Memory: Off?
If not, has anyone found a way to use bbswitch or acpi_call without the system freezing on an AC power state change? Or is this a known firmware/kernel bug for this model that makes a manual kill impossible?
I've ruled out tlp (stopping the service didn't prevent the freeze). It seems a kernel-level service (acpid, systemd-logind?) tries to probe the "dead" dGPU when the power profile changes, causing a panic.
My end goal is to just run my iGPU Sway session (env WLR_DRM_DEVICES=/dev/dri/card2 sway) after a stable dGPU power down.
Thank you,
Michael C
Last edited by Mccalabrese (2025-11-02 04:14:31)
Offline
Hello everyone,
After weeks of debugging, I've finally solved the 3-5W idle power drain and unstable suspend on my ThinkPad X1 Extreme. My hybrid sessions (Niri, GNOME, etc.) now idle at ~5.4W with the dGPU fully suspended (Video Memory: Off), and I have a separate, stable Sway session that idles even lower.
My original post (above) details all the "standard" fixes that did not work. This post is the solution that did.
THE REAL CULPRIT: THE DISPLAY MANAGER (GDM/SDDM)
The "A-ha!" moment was discovering that a kernel-level process wasn't the problem. The problem was my display manager, GDM (and SDDM, which I also tested).
At boot, GDM/SDDM would probe all GPUs, load the nvidia driver, and place a 1MiB lock on the VRAM. This "Video Memory: Active" state by itself was enough to block the driver's Runtime D3 (D3cold) power management from ever engaging. Because GDM's service (gdm.service) persists in the background, this lock was never released.
THE SOLUTION: greetd + modprobe FIXES
The solution is to use a "dumber" login manager that does not probe the dGPU, combined with the correct kernel module parameters. This allows the NVIDIA driver to load cleanly and manage its own power state.
Here is the step-by-step guide to my working setup.
SECTION 1: SWITCH TO greetd
This is the most critical step. We must use a login manager that won't hold the dGPU.
Install greetd and the TTY-based greeter: sudo pacman -S greetd greetd-tuigreet
Disable your old display manager (e.g., GDM): sudo systemctl disable --now gdm.service
Enable greetd: sudo systemctl enable --now greetd.service
Configure greetd to use tuigreet and find all your sessions. Edit /etc/greetd/config.toml:
[default_session]
This command finds all Wayland and X11 sessions
command = "tuigreet --time --remember --sessions /usr/share/wayland-sessions:/usr/share/xsessions"
Fix the "remember" flag permissions (a common greetd issue): sudo chown -R greeter:greeter /var/lib/greetd
SECTION 2: SET CORRECT BIOS & KERNEL PARAMETERS
This enables the modern power states.
BIOS: Set Config > Power > Sleep State to Windows (to enable S0ix).
modprobe.d: Create /etc/modprobe.d/nvidia.conf. This is the "golden" config that makes idle suspend work:
/etc/modprobe.d/nvidia.conf
Disable GSP firmware (buggy on my Turing card)
options nvidia NVreg_EnableGpuFirmware=0
Enable "fine-grained" (0x02) runtime D3
options nvidia NVreg_DynamicPowerManagement=0x02
Enable S0ix support
options nvidia NVreg_EnableS0ixPowerManagement=1
udev Rule: Create /etc/udev/rules.d/90-nvidia-pm.rules to set runtime PM to auto:
/etc/udev/rules.d/90-nvidia-pm.rules
SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{power/control}="auto"
grub: Ensure nvidia_drm.modeset=1 is in your GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub. Remove any NVreg_ parameters from this line, as they are now correctly handled by modprobe.d.
Rebuild everything: sudo mkinitcpio -P sudo grub-mkconfig -o /boot/grub/grub.cfg
SECTION 3: BLACKLIST nvidia_uvm (THE FINAL KEY)
After doing all of the above, my dGPU still idled at 3W with Video Memory: Active. The culprit was the nvidia_uvm (Unified Video Memory) module, which loads at boot for CUDA and holds a 1MiB VRAM lock. Blacklisting it was the final fix.
Create /etc/modprobe.d/99-nvidia-uvm-blacklist.conf:
/etc/modprobe.d/99-nvidia-uvm-blacklist.conf
blacklist nvidia_uvm
Rebuild initramfs one last time: sudo mkinitcpio -P
FINAL RESULT
After a reboot, you can log into any normal session (Niri, GNOME, Hyprland, or a "stock" Sway). After 10-15 seconds of idle, the dGPU will finally power off.
➜ ~ cat /proc/driver/nvidia/gpus/0000:01:00.0/power
Runtime D3 status: Enabled (fine-grained)
Video Memory: Off
...
S0ix ... Status: Enabled
My idle power draw in Niri (at 4K, 1.5x scale) dropped from 11.7W to 6.2W. I did further optimization in sway and have idle at about 5.4W with 15% backlight and active nvim, ghostty and firefox at about 8.7W
The nvidia_uvm module will load "on-demand" if you launch a CUDA app, and (as I tested) will correctly unload and let the GPU go back to sleep when the app closes. Suspend/resume is also now perfectly stable with a ~0.75W draw.
This setup fixed all my problems. I hope it helps others.
Last edited by Mccalabrese (2025-11-05 00:19:18)
Offline