[PATCH] Disable CRTCs when disabling the outputs

Piotr Redlewski predlewski at gmail.com
Mon Jun 22 12:19:55 PDT 2015


2015-06-22 12:01 GMT+02:00 Piotr Redlewski <predlewski at gmail.com>:

>
>
> 2015-06-22 9:49 GMT+02:00 Michel Dänzer <michel at daenzer.net>:
>
>> On 21.06.2015 23:30, Piotr Redlewski wrote:
>> > When turning the outputs off (DPMSModeOff), CRTCs stayed enabled. This
>> led
>> > to higher card temperatures than with fglrx driver.
>> >
>> > Signed-off-by: Piotr Redlewski <predlewski at gmail.com>
>> > ---
>> >  src/drmmode_display.c | 9 ++++++++-
>> >  1 file changed, 8 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/src/drmmode_display.c b/src/drmmode_display.c
>> > index 3564853..04b4341 100644
>> > --- a/src/drmmode_display.c
>> > +++ b/src/drmmode_display.c
>> > @@ -342,7 +342,14 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, int mode)
>> >  static void
>> >
>> ​​
>> drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
>> >  {
>> > -     /* Nothing to do. drmmode_do_crtc_dpms() is called as appropriate
>> */
>> > +     drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
>> > +     drmmode_ptr drmmode = drmmode_crtc->drmmode;
>> > +
>> > +     /* Disable unused CRTCs */
>> > +     if (!crtc->enabled && mode != DPMSModeOn) {
>>
>> Maybe this should be
>>
>>         if (!crtc->enabled || mode != DPMSModeOn) {
>>
>> or can it actually happen that
>> ​​
>> !crtc->enabled and mode == DPMSModeOn?
>>
>> ​Just wanted to be safe here, but I think you are right. I'll send v2
> later today.
>
> ​I wanted to test changes before sending v2 and I stumbled on one issue.
Everything works as expected when xrandr is used, but problem starts when
screensaver
​comes into play. X calls
drmmode_crtc_dpms() to on/off screensaver, so when it is supposed to be
enabled, function is called with mode=DPMSModeOff and we call drmModeSetCrtc()
to set crtc's mode to NULL. Problem is when X wants to disable
screensaver: drmmode_crtc_dpms()
is called with mode=DPMSModeOn and... nothing happens as there is no logic
for this scenario - we should call drmModeSetCrtc() to set valid mode, but
we don't know what this mode should be. Effect is that we are stuck with
blanked output.

​Because of the situation with the screensaver I think that original
version of the patch is ok (it solves the problem with CRTC staying enabled
when using xrandr to disable the output).



>
>> > +             drmModeSetCrtc(drmmode->fd,
>> drmmode_crtc->mode_crtc->crtc_id,
>> > +                            0, 0, 0, NULL, 0, NULL);
>> > +     }
>> >  }
>> >
>> >  static PixmapPtr
>> >
>>
>> Other than that, looks good to me.
>>
>>
>> --
>> Earthling Michel Dänzer               |               http://www.amd.com
>> Libre software enthusiast             |             Mesa and X developer
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg-driver-ati/attachments/20150622/35137205/attachment.html>


More information about the xorg-driver-ati mailing list