NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
kern/54274: firmware loading issue in nouveau driver
>Number: 54274
>Category: kern
>Synopsis: firmware loading issue in nouveau driver
>Confidential: no
>Severity: critical
>Priority: medium
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Jun 05 21:55:01 +0000 2019
>Originator: Thomas Klausner
>Release: NetBSD 8.99.41
>Organization:
Curiosity is the very basis of education and if you tell me that
curiosity killed the cat, I say only that the cat died nobly.
- Arnold Edinborough
>Environment:
Architecture: x86_64
Machine: amd64
>Description:
When booting a Geforce GTX 960 on my system, I see:
nouveau0 at pci12 dev 0 function 0: vendor 10de product 1401 (rev. 0xa1)
nouveau0: info: NVIDIA GM206 (126010a1)
nouveau0: info: bios: version 84.06.14.00.ff
nouveau0: info: gr: using external firmware
firmware_open(nouveau/nvidia/gm206/fecs_inst.bin) called too early.
nouveau0: autoconfiguration error: error: gr: failed to load fecs_inst
nouveau0: notice: disp: dcb 15 type 8 unknown
nouveau0: info: fb: 4096 MiB GDDR5
Zone kernel: Available graphics memory: 17983376 kiB
Zone dma32: Available graphics memory: 2097152 kiB
nouveau0: info: DRM: VRAM: 4096 MiB
nouveau0: info: DRM: GART: 1048576 MiB
nouveau0: info: DRM: TMDS table version 2.0
nouveau0: info: DRM: DCB version 4.1
nouveau0: info: DRM: DCB outp 00: 01000f02 00020030
nouveau0: info: DRM: DCB outp 01: 02000f00 00000000
nouveau0: info: DRM: DCB outp 02: 02811f76 04400020
nouveau0: info: DRM: DCB outp 03: 02011f72 00020020
nouveau0: info: DRM: DCB outp 04: 04822f86 04400010
nouveau0: info: DRM: DCB outp 05: 04022f82 00020010
nouveau0: info: DRM: DCB outp 06: 04833f96 04400020
nouveau0: info: DRM: DCB outp 07: 04033f92 00020020
nouveau0: info: DRM: DCB outp 08: 02044f62 00020010
nouveau0: info: DRM: DCB outp 15: 01df5ff8 00000000
nouveau0: info: DRM: DCB conn 00: 00001030
nouveau0: info: DRM: DCB conn 01: 00020146
nouveau0: info: DRM: DCB conn 02: 01000246
nouveau0: info: DRM: DCB conn 03: 02000346
nouveau0: info: DRM: DCB conn 04: 00010461
nouveau0: info: DRM: DCB conn 05: 00000570
nouveau0: autoconfiguration error: error: DRM: Pointer to flat panel table invalid
nouveau0: autoconfiguration error: warn: DRM: unknown connector type 70
nouveau0: autoconfiguration error: warn: DRM: failed to create encoder 1/8/0: -19
nouveau0: autoconfiguration error: warn: DRM: Unknown-1 has no encoders, removing
kern info: [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
kern info: [drm] Driver supports precise vblank timestamp query.
nouveau0: info: DRM: MM: using COPY for buffer copies
nouveaufb0 at nouveau0
nouveaufb0: framebuffer at 0xffff95965b7ec000, size 1920x1080, depth 32, stride 7680
wsdisplay0 at nouveaufb0 kbdmux 1: console (default, vt100 emulation)
In particular:
firmware_open(nouveau/nvidia/gm206/fecs_inst.bin) called too early.
The code in firmware.c looks like this:
if (cwdi0.cwdi_cdir == NULL) {
printf("firmware_open(%s/%s) called too early.\n",
drvname, imgname);
return ENOENT;
}
That's before the function is even trying path lookups - cwdi0 doesn't
seem to be filled in enough yet. All the lines are before wd0 is even
detected (I'm not sure if that's necessary, but that's where / lives).
Is nouveau called to early, or does it need to call something before
firmware_open?
Another problem is that the files are actually not distributed with
NetBSD, but we can tackle that later.
A third possible problem: nouveau does not depend on firmload.
I guess this won't change much, but I think this is definitely needed:
/usr/src/sys/external/bsd/drm2> cvs di
Index: nouveau/files.nouveau
===================================================================
RCS file: /cvsroot/src/sys/external/bsd/drm2/nouveau/files.nouveau,v
retrieving revision 1.26
diff -u -r1.26 files.nouveau
--- nouveau/files.nouveau 4 Feb 2019 08:18:08 -0000 1.26
+++ nouveau/files.nouveau 3 Jun 2019 14:06:57 -0000
@@ -3,7 +3,7 @@
version 20180827
define nouveaufbbus { }
-device nouveau: drmkms, drmkms_ttm, nouveaufbbus
+device nouveau: drmkms, drmkms_ttm, nouveaufbbus, firmload
attach nouveau at pci with nouveau_pci: drmkms_pci
file external/bsd/drm2/nouveau/nouveau_pci.c nouveau_pci
For comparison:
/usr/src/sys/external/bsd/drm2> grep -r firmload .
./i915drm/files.i915drmkms:device i915drmkms: drmkms, drmkms_pci, intelfbbus, agp_i810, firmload
...
./radeon/files.radeon:device radeon: drmkms, drmkms_pci, drmkms_ttm, radeonfbbus, firmload
./amdgpu/files.amdgpu:device amdgpu: drmkms, drmkms_pci, drmkms_ttm, amdgpufbbus, firmload
>How-To-Repeat:
Boot with a Geforce GTX 960 (perhaps only on my system).
>Fix:
Please.
>Unformatted:
Home |
Main Index |
Thread Index |
Old Index