Re: [drm/nouveau] GeForce 8600 GT boot/suspend grumbling

From: Ilia Mirkin
Date: Sat Jul 15 2017 - 14:13:17 EST


On Sat, Jul 15, 2017 at 12:14 PM, Ilia Mirkin <imirkin@xxxxxxxxxxxx> wrote:
> On Sat, Jul 15, 2017 at 1:40 AM, Mike Galbraith <efault@xxxxxx> wrote:
>> Greetings,
>>
>> box: bog standard [tc]rusty old Nvidia equipped Q6600 Medion (Aldi) deskside
>> kernel: master.today (v4.12-11690-gccd5d1b91f22)
>>
>> lspci -nn -d 10de:
>> 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G84 [GeForce 8600 GT] [10de:0402] (rev a1)
>>
>> abreviated dmesg:
>> ...
>> [ 3.720990] fb: switching to nouveaufb from VESA VGA
>> [ 3.744489] Console: switching to colour dummy device 80x25
>> [ 3.744966] nouveau 0000:01:00.0: NVIDIA G84 (084200a2)
>> ...
>> [ 3.846963] usbcore: registered new interface driver uas
>> [ 3.849938] nouveau 0000:01:00.0: bios: version 60.84.6e.00.12
>> [ 3.870769] hid-generic 0003:04CA:002B.0002: input,hidraw1: USB HID v1.11 Keyboard [Liteon Wireless keyboard and mouse] on usb-0000:00:1d.0-1/input0
>> [ 3.870773] nouveau 0000:01:00.0: bios: M0203T not found
>> [ 3.870774] nouveau 0000:01:00.0: bios: M0203E not matched!
>> [ 3.870777] nouveau 0000:01:00.0: fb: 256 MiB DDR2
>> [ 3.871168] input: Liteon Wireless keyboard and mouse as /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1:1.1/0003:04CA:002B.0003/input/input7
>> [ 3.896090] usb 3-2: new low-speed USB device number 3 using uhci_hcd
>> [ 3.919101] [TTM] Zone kernel: Available graphics memory: 3881208 kiB
>> [ 3.919106] [TTM] Zone dma32: Available graphics memory: 2097152 kiB
>> [ 3.919110] [TTM] Initializing pool allocator
>> [ 3.919120] [TTM] Initializing DMA pool allocator
>> [ 3.919141] nouveau 0000:01:00.0: DRM: VRAM: 256 MiB
>> [ 3.919146] nouveau 0000:01:00.0: DRM: GART: 1048576 MiB
>> [ 3.919152] nouveau 0000:01:00.0: DRM: TMDS table version 2.0
>> [ 3.919157] nouveau 0000:01:00.0: DRM: DCB version 4.0
>> [ 3.919162] nouveau 0000:01:00.0: DRM: DCB outp 00: 04000310 00000028
>> [ 3.919167] nouveau 0000:01:00.0: DRM: DCB outp 01: 02011300 00000028
>> [ 3.919171] nouveau 0000:01:00.0: DRM: DCB outp 02: 01011302 00000030
>> [ 3.919176] nouveau 0000:01:00.0: DRM: DCB outp 03: 02022322 00020010
>> [ 3.919180] nouveau 0000:01:00.0: DRM: DCB outp 04: 010333f1 00c0c083
>> [ 3.919185] nouveau 0000:01:00.0: DRM: DCB conn 00: 0000
>> [ 3.919189] nouveau 0000:01:00.0: DRM: DCB conn 01: 1130
>> [ 3.919194] nouveau 0000:01:00.0: DRM: DCB conn 02: 2261
>> [ 3.919198] nouveau 0000:01:00.0: DRM: DCB conn 03: 0310
>> [ 3.919202] nouveau 0000:01:00.0: DRM: DCB conn 04: 0311
>> [ 3.919206] nouveau 0000:01:00.0: DRM: DCB conn 05: 0313
>> [ 3.919258] ------------[ cut here ]------------
>> [ 3.919316] WARNING: CPU: 3 PID: 224 at drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c:83 nvkm_outp_xlat.isra.0+0x26/0x80 [nouveau]
>
> The code in question is
>
> static enum nvkm_ior_proto
> nvkm_outp_xlat(struct nvkm_outp *outp, enum nvkm_ior_type *type)
> {
> switch (outp->info.location) {
> case 0:
> switch (outp->info.type) {
> case DCB_OUTPUT_ANALOG: *type = DAC; return CRT;
> case DCB_OUTPUT_TMDS : *type = SOR; return TMDS;
> case DCB_OUTPUT_LVDS : *type = SOR; return LVDS;
> case DCB_OUTPUT_DP : *type = SOR; return DP;
> default:
> break;
> }
> break;
> case 1:
> switch (outp->info.type) {
> case DCB_OUTPUT_TMDS: *type = PIOR; return TMDS;
> case DCB_OUTPUT_DP : *type = PIOR; return TMDS; /* not a bug */
> default:
> break;
> }
> break;
> default:
> break;
> }
> WARN_ON(1);
> return UNKNOWN;
> }
>
> Looks like someone forgot about TV S-Video/Composite outputs (which
> existed up until the GT21x's).
>
>> [ 3.919180] nouveau 0000:01:00.0: DRM: DCB outp 04: 010333f1 00c0c083
>
> And there ya go (the type is the lowest nibble of the first dword). We
> don't support TV outputs on nv50+, so you could just add a
>
> case DCB_OUTPUT_TV: return UNKNOWN;
>
> in the location == 0 case.
>
> I don't think that's related to the issue you're seeing on suspend
> though, as the TV connector isn't created anyways, it's just an
> "annoyance" warn, and you were also seeing it on your GM20x which has
> no such thing.

Actually while this may fix things for you in the short term, this is
all generic code, not chip-specific, and we do support TV outputs on
pre-nv50 chips, so it needs to be fixed for real.

Ben - I'm very weak on all these concepts of OR/etc - is the right
move to add a new nvkm_ior_proto/type for TV? (There's also a
DCB_OUTPUT_EOL type, no clue what that is.) I guess it should get type
= DAC and add a new nvkm_ior_proto for TV?

-ilia