Bug 227403

Summary: [ACPI] [nvidia] [drm] NVRM: rm_init_adapter() failed
Product: Base System Reporter: Ken Camann <kjcamannlists>
Component: kernAssignee: freebsd-bugs (Nobody) <bugs>
Status: New ---    
Severity: Affects Some People CC: rigoletto
Priority: ---    
Version: CURRENT   
Hardware: amd64   
OS: Any   

Description Ken Camann 2018-04-10 00:19:57 UTC
I am testing FreeBSD on a new model of ThinkPad (T480) that was just released three months ago.

Some variants of this model (and the similar T480s) have only Kaby Lake integrated graphics, whereas others include a GeForce MX150.

The two GPUs in my system are:

- Integrated UHD Graphics 620 (on the i7-8650U, in my case)
- NVIDIA GeForce MX150 [reports as Lenovo GP108M]

I am using:

FreeBSD-12.0-CURRENT-amd64-20180322-r331345 snapshot (GENERIC kernel)
drm-next-kmod from ports for Intel driver
nvidia-driver-390 from ports

Both video drivers successfully attach to their devices. The i915 device works, but the nvidia device does not. Whenever the adapter is initialized for any reason (e.g., by `nvidia-xconfig --query-gpu-info` or `nvidia-debugdump -l`) this appears in dmesg:

NVRM: failed to copy vbios to system memory.
NVRM: RmInitAdapter failed! (0x30:0xffff:662)
nvidia1: NVRM: rm_init_adapter() failed!

I filed this under ACPI because this error has appeared many times in the past in both Linux and FreeBSD, and the resolution often has something to do with the ACPI, and something looks "off" with ACPI here well.

devinfo -v shows the devices like this:

intel) vgapci0 pnpinfo vendor=0x8086 device=0x5917 subvendor=0x17aa subdevice=0x225e class=0x030000 at slot=2 function=0 dbsf=pci0:0:2:0 handle=\_SB_.PCI.GFX0

nvidia) vgapci1 pnpinfo vendor=0x10de device=0x1d10 device=0x17aa subvendor=0x17aa subdevice=0x225e class0x030200 at slot=0 funcition=0 dbsf=pci0:1:0:0 handle=\_SB_.PCI0.RP01.PXSX

Note that nvidia card's ACPI bus location is listed as `\_SB_PCI0.RP01.PXSX`. In an Arch Linux system I dual-boot with, the NVIDIA card works correctly and the ACPI firmware node is reported as `\_SB_.PCI0.RP01.PEGP` (where I guess PEGP means something like PCI-Express Graphics Port). By "firmware node", I mean the sysfs value defined here: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-firmware_node

Is the problem that the system is "using" the wrong ACPI object to poke at the vbios area? These two ACPI objects (PXSX and PEGP) appear in two different SSDT tables -- PXSX appears in the table that occurs first in an acpidump. The second one (PEGP) is incredibly more complex, and so probably contains most of the interesting functionality. I tried to do more research before posting this but I find ACPI completely bewildering.

Please let me know what other information to attach to this report.