[PATCH xf86-video-ati] Disable all unused CRTCs before setting desired modes
Michel Dänzer
michel at daenzer.net
Thu Feb 22 16:42:58 UTC 2018
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>
---
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
More information about the amd-gfx
mailing list