[NV86] PDISP evo flush (?) errors, broken modesetting
Submitted by Dominik George
Assigned to Nouveau Project
Description
Created attachment 88342
dmesg output
** Slightly modified version from Debian Bug #728278 **
The nouveau driver fails on this hardware. A talk in #nouveau on
Freenode turned up that the failure is related to the EVO engine
responsible for modesetting. Here are the relevant parts of that chat,
more explanations follow below:
08:02 < imirkin>
nouveau E[ PDISP][0000:01:00.0] chid 0 mthd 0x0080 data 0x00000000 0x000d5080
08:02 < Natureshadow>
that means?
08:02 < imirkin>
that's a bit unfortunate
08:02 < imirkin>
dunno, gimme a min
08:02 < Natureshadow>
sorry, I am not a kernel hacker ;) ...
08:03 < imirkin>
oh, that's the EVO flush
08:03 < imirkin>
and the d5080 is probably the fifo position or something
08:03 < imirkin>
uhm, silly question... do you have any indication that this hardware actually works?
08:05 < imirkin>
(e.g. on windows, or using the nvidia blob or using the nv driver)
08:08 < Natureshadow>
imirkin: it works with the nvidia driver
08:08 < imirkin>
hm, ok
08:09 < Natureshadow>
And GRUB can set the 1440x900 mode
08:09 < Natureshadow>
So I assume VESA works as well
08:09 < imirkin>
right, but that's a different mechanism
08:09 < Natureshadow>
ok
08:09 < imirkin>
what makes you say that edid is broken? is it broken with nvidia driver as well?
08:09 < Natureshadow>
In any case, installing the nvidia-glx driver and loading the EDID file with X.org rather than at boot (nvidia does
not support modesetting) works
08:10 < Natureshadow>
imirkin: Yes, it is.
08:10 < imirkin>
k
08:10 < Natureshadow>
The display EDID is corrupted, I have been loading that EDID file forever with the nvidia driver
08:10 < Natureshadow>
But as nouveau works great on all other hardware I have, I wanted to get rid of that unnecessary binary blob ;)
08:11 < imirkin>
yeah, for some reason the EVO commands just aren't working
08:11 < Natureshadow>
Is that something I can fix ;)?
08:11 < imirkin>
(these are commands used to control the display engine, which controls the mode/etc)
08:11 < imirkin>
well, if the nvidia driver works, it must be fixable
08:11 < Natureshadow>
ok :D
08:11 < imirkin>
the question is... how
08:12 < Natureshadow>
I'm sure that question is a lot easier for you than for me ;)
08:12 < Natureshadow>
I'm ready for any debugging, may it be as crazy as you like .)
08:14 < imirkin>
well, the command likely comes from evo_sync() in nv50_display.c
08:14 < imirkin>
or perhaps nv50_display_flip_stop
08:15 < imirkin>
but why does it error out? who knows. i don't know much about the evo bits.
08:16 < Natureshadow>
imirkin: hmm. so, seeing that the nvidia driver works, is this a bug in nouveau I should report, or is it due to my
broken hardware?
08:16 < imirkin>
given that the nvidia driver can work, it seems likely that it's a bug in nouveau
[...]
08:33 < imirkin>
it kinda feels like the evo engine isn't being turned on at all
08:34 < imirkin>
probably some missed register write somewhere
08:34 < imirkin>
(whereby it normally starts out as 'on' for everone except you)
I must add two things:
- The display EDID of this device is corrupted, but I have worked
around that by ...
- ... loading a corrected version of the EDID binary from a file. That worked
(see dmesg), so I think it is irrelevant for the bug.
The effect of this issue is that when modesetting, some garbage is
written to the screen, the scrollback buffer is scrolled up a bit, but
modesetting never really happens.
**Attachment 88342**, "dmesg output":
dmesg.txt