[PATCH xf86-video-ati] Disable all unused CRTCs before setting desired modes

Alex Deucher alexdeucher at gmail.com
Thu Feb 22 16:46:30 UTC 2018


On Thu, Feb 22, 2018 at 11:42 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> This might avoid modeset failures in some cases where a CRTC which isn't
> used by Xorg was enabled before.
>
> (Ported from amdgpu commit e3aae7a24296f640c0153d1459f3e0820485468a)
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  src/drmmode_display.c | 33 +++++++++++++++++++++------------
>  1 file changed, 21 insertions(+), 12 deletions(-)
>
> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
> index 517ec8fbe..d8bb9cc9a 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -2720,24 +2720,33 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode,
>         unsigned num_desired = 0, num_on = 0;
>         int c;
>
> +       /* First, disable all unused CRTCs */
> +       if (set_hw) {
> +               for (c = 0; c < config->num_crtc; c++) {
> +                       xf86CrtcPtr crtc = config->crtc[c];
> +                       drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
> +
> +                       /* Skip disabled CRTCs */
> +                       if (crtc->enabled)
> +                               continue;
> +
> +                       drmmode_do_crtc_dpms(crtc, DPMSModeOff);
> +                       drmModeSetCrtc(pRADEONEnt->fd,
> +                                      drmmode_crtc->mode_crtc->crtc_id,
> +                                      0, 0, 0, NULL, 0, NULL);
> +                       drmmode_fb_reference(pRADEONEnt->fd,
> +                                            &drmmode_crtc->fb, NULL);
> +               }
> +       }
> +
> +       /* Then, try setting the chosen mode on each CRTC */
>         for (c = 0; c < config->num_crtc; c++) {
>                 xf86CrtcPtr     crtc = config->crtc[c];
> -               drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
>                 xf86OutputPtr   output = NULL;
>                 int             o;
>
> -               /* Skip disabled CRTCs */
> -               if (!crtc->enabled) {
> -                       if (set_hw) {
> -                               drmmode_do_crtc_dpms(crtc, DPMSModeOff);
> -                               drmModeSetCrtc(pRADEONEnt->fd,
> -                                              drmmode_crtc->mode_crtc->crtc_id,
> -                                              0, 0, 0, NULL, 0, NULL);
> -                               drmmode_fb_reference(pRADEONEnt->fd,
> -                                                    &drmmode_crtc->fb, NULL);
> -                       }
> +               if (!crtc->enabled)
>                         continue;
> -               }
>
>                 if (config->output[config->compat_output]->crtc == crtc)
>                         output = config->output[config->compat_output];
> --
> 2.16.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list