On Mon, 25 Jul 2011 22:52:15 -0400, Andrew Lutomirski <luto at mit.edu> wrote:
> Doesn't help :( Oh, it helps, just not this issue :-) > When I do 'xset dpms force off', one of two things happens. Either > the display comes back all by itself or it never comes back until I > power cycle it. Oh. Right. Actual DPMS, as in power savings. So, I think Jesse and I were both wrong -- we *do* need to track DPMS in the DP driver so that we can skip link retraining when DPMS is off. The rest of the connection is disabled, so doing the link retraining may well confuse the DP system badly. Turning the monitor off and back on will generate suitable hot plug messages and presumably clean things up once the rest of the stack is running again. > If the display is generating a hotplug event after the dpms code drops > the link, then with "drm/i915/dp: remove DPMS mode tracking from DP" > applied the driver will try to bring the display back up. Maybe my > display can't handle coming back up that quickly after being told to > go to sleep, or maybe there's another bug. Indeed you are correct -- we don't gate the retraining on whether the monitor is supposed to be running or not. > Is the original patch supposed to bring the display up if the user > unplugs it and re-plugs it? If so, why? Yes. In the absence of an external agent listening to the hotplug events (which is hard to arrange these days, unless you're running an X environment that doesn't watch for monitor hot-plug), the kernel will see the hot-plug event, decide that because the monitor is supposed to be running (has a CRTC assigned), it will go ahead and try to retrain the DP link. > And shouldn't a dpms off > command at least stick until a hotplug event reports that the display > isn't there? The DPMS off should stick until DPMS is set back on -- hotplug shouldn't have any effect on DPMS. Here's a patch which reverts the DPMS tracking, and then fixes the bug that it had -- you wouldn't get retraining on hotplug after the driver had been initialized because nothing in the mode setting path would set the dpms_mode to DRM_MODE_DPMS_ON, so the hotplug code would bail every time. With that fixed, this patch should work for you *and* for others. Care to give it a try?