[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