Technical Report: NVIDIA Initialization and EGL-Binding-Problems (ThinkPad P15 Gen 2)
1. System
- Hardware: Lenovo ThinkPad P15 Gen 2 (Intel Tiger Lake-H)
- GPU: NVIDIA RTX A3000 Mobile (Ampere GA104GLM)
- OS: openSUSE Tumbleweed (Kernel 6.18)
- Driver: Tested with
nvidia-open-driver-G06(580.119.02) and closed-sourcenvidia-driver-G06(580.126.09)
2. Problem A: Hardware-Initializing-Error (RmInitAdapter)
After a cold start or reboot the dGPU is not found, kernel driver loaded, but graphics hardware is not “visible”.
Symptoms:
nvidia-smishows: “No devices were found”.dmesgshows Resource Manager (RM) error:
NVRM: GPU 0000:01:00.0: RmInitAdapter failed! (0x62:0x56:2015)
NVRM: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0
Cause: The Ampere-architecture uses a GSP (GPU System Processor) to reduce load on Host-Processor during initializing. On Systems with Tiger Lake-H Chipsets this can lead to a state-mismatch or timeout.
Reference: NVIDIA GSP Firmware Documentation
Solution: deactivate GSP-Firmware via Kernel boot parameter in in /etc/modprobe.d/50-nvidia.conf:
options nvidia NVreg_EnableGpuFirmware=0
verify: nvidia-smi -q | grep Firmware shows N/A for GSP.
3. Problem B: EGL-Binding / DMA-BUF Failure (driver null)
Though the driver is loaded, EGL-based Applications (for instance firefox with webrender) cannot bind the dGPU.
Symptoms:
- Start via
switcherooctl launch -g 1 firefoxbreaks with:
pci id for fd 23: 10de:24b8, driver (null)
glxgears(Legacy GLX) works, but modern EGL-applications cannot see the GPU.
Cause: Modern browsers and compositors need Kernel Mode Setting (KMS) for EGL-Handshake and buffer-sharing via DMA-BUF. Without active modesetting libglvnd cannot bind a valid vendor-path for nvidia.
Solution: activate NVIDIA DRM modesetting in /etc/modprobe.d/50-nvidia.conf:
options nvidia-drm modeset=1
4. Execution & persistence
As Tumbleweed uses Early KMS, the initrd has to be rebuild after changes:
- save configuration: (file:
/etc/modprobe.d/50-nvidia.conf) - rebuild initrd:
sudo dracut -forsudo dracut -f --regenerate-all - reboot.
Result: the dGPU is correctly initialized, firefox uses hardware-acceleration (WebRender) and the GPU enters power saving mode when not in use (D3cold). Check with:
cat /sys/bus/pci/devices/0000:01:00.0/power_state
Please let me know if I made mistakes or false assumptions in my post or if something is missing. Also, if this is worth a bug report I will be glad about correct pointers to where and how I could report this. Thanks in advance.