* [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort @ 2016-08-25 9:58 Michel Dänzer [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Michel Dänzer @ 2016-08-25 9:58 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW From: Michel Dänzer <michel.daenzer@amd.com> Not doing so could break DPMS with TearFree. Reported-and-Tested-by: furkan on IRC Fixes: 9090309e057d ("Wait for pending flips to complete before turning off an output or CRTC") Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> --- src/drmmode_display.c | 2 +- src/drmmode_display.h | 1 + src/radeon_kms.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 14d86c7..96a3c3b 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -2174,7 +2174,7 @@ static const xf86CrtcConfigFuncsRec drmmode_xf86crtc_config_funcs = { drmmode_xf86crtc_resize }; -static void +void drmmode_clear_pending_flip(xf86CrtcPtr crtc) { drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; diff --git a/src/drmmode_display.h b/src/drmmode_display.h index 24e3efb..53c7926 100644 --- a/src/drmmode_display.h +++ b/src/drmmode_display.h @@ -154,6 +154,7 @@ extern int drmmode_get_crtc_id(xf86CrtcPtr crtc); extern int drmmode_get_height_align(ScrnInfoPtr scrn, uint32_t tiling); extern int drmmode_get_pitch_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling); extern int drmmode_get_base_align(ScrnInfoPtr scrn, int bpe, uint32_t tiling); +extern void drmmode_clear_pending_flip(xf86CrtcPtr crtc); Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client, uint32_t new_front_handle, uint64_t id, void *data, diff --git a/src/radeon_kms.c b/src/radeon_kms.c index e353d66..c10fb42 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -786,7 +786,7 @@ radeon_scanout_flip_abort(xf86CrtcPtr crtc, void *event_data) drmmode_crtc_private_ptr drmmode_crtc = event_data; drmmode_crtc->scanout_update_pending = FALSE; - drmmode_crtc->flip_pending = FALSE; + drmmode_clear_pending_flip(crtc); } static void -- 2.9.3 _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply related [flat|nested] 3+ messages in thread
[parent not found: <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>]
* [PATCH xf86-video-ati 2/2] Don't override crtc parameter value in drmmode_flip_handler/abort [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org> @ 2016-08-25 9:58 ` Michel Dänzer 2016-08-25 13:42 ` [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort Deucher, Alexander 1 sibling, 0 replies; 3+ messages in thread From: Michel Dänzer @ 2016-08-25 9:58 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW From: Michel Dänzer <michel.daenzer@amd.com> When overriding the crtc parameter value of the last pending CRTC, drmmode_clear_pending_flip would work on the wrong CRTC, and the last pending CRTC's flip_pending flag might never get cleared. This would prevent that CRTC from properly turning off and back on again. Fixes: 9090309e057d ("Wait for pending flips to complete before turning off an output or CRTC") Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97392 Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> --- src/drmmode_display.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 96a3c3b..5db968c 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -2204,9 +2204,9 @@ drmmode_flip_abort(xf86CrtcPtr crtc, void *event_data) drmmode_flipdata_ptr flipdata = event_data; if (--flipdata->flip_count == 0) { - if (flipdata->fe_crtc) - crtc = flipdata->fe_crtc; - flipdata->abort(crtc, flipdata->event_data); + if (!flipdata->fe_crtc) + flipdata->fe_crtc = crtc; + flipdata->abort(flipdata->fe_crtc, flipdata->event_data); free(flipdata); } @@ -2227,11 +2227,14 @@ drmmode_flip_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec, void *even } if (--flipdata->flip_count == 0) { - /* Deliver cached msc, ust from reference crtc to flip event handler */ + /* Deliver msc, ust from reference/current crtc to flip event + * handler + */ if (flipdata->fe_crtc) - crtc = flipdata->fe_crtc; - flipdata->handler(crtc, flipdata->fe_frame, flipdata->fe_usec, - flipdata->event_data); + flipdata->handler(flipdata->fe_crtc, flipdata->fe_frame, + flipdata->fe_usec, flipdata->event_data); + else + flipdata->handler(crtc, frame, usec, flipdata->event_data); /* Release framebuffer */ drmModeRmFB(info->drmmode.fd, flipdata->old_fb_id); -- 2.9.3 _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org> 2016-08-25 9:58 ` [PATCH xf86-video-ati 2/2] Don't override crtc parameter value in drmmode_flip_handler/abort Michel Dänzer @ 2016-08-25 13:42 ` Deucher, Alexander 1 sibling, 0 replies; 3+ messages in thread From: Deucher, Alexander @ 2016-08-25 13:42 UTC (permalink / raw) To: 'Michel Dänzer', amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW > -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf > Of Michel Dänzer > Sent: Thursday, August 25, 2016 5:58 AM > To: amd-gfx@lists.freedesktop.org > Subject: [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip > from radeon_scanout_flip_abort > > From: Michel Dänzer <michel.daenzer@amd.com> > > Not doing so could break DPMS with TearFree. > > Reported-and-Tested-by: furkan on IRC > Fixes: 9090309e057d ("Wait for pending flips to complete before turning > off an output or CRTC") > > Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> For the series: Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > --- > src/drmmode_display.c | 2 +- > src/drmmode_display.h | 1 + > src/radeon_kms.c | 2 +- > 3 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/src/drmmode_display.c b/src/drmmode_display.c > index 14d86c7..96a3c3b 100644 > --- a/src/drmmode_display.c > +++ b/src/drmmode_display.c > @@ -2174,7 +2174,7 @@ static const xf86CrtcConfigFuncsRec > drmmode_xf86crtc_config_funcs = { > drmmode_xf86crtc_resize > }; > > -static void > +void > drmmode_clear_pending_flip(xf86CrtcPtr crtc) > { > drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; > diff --git a/src/drmmode_display.h b/src/drmmode_display.h > index 24e3efb..53c7926 100644 > --- a/src/drmmode_display.h > +++ b/src/drmmode_display.h > @@ -154,6 +154,7 @@ extern int drmmode_get_crtc_id(xf86CrtcPtr crtc); > extern int drmmode_get_height_align(ScrnInfoPtr scrn, uint32_t tiling); > extern int drmmode_get_pitch_align(ScrnInfoPtr scrn, int bpe, uint32_t > tiling); > extern int drmmode_get_base_align(ScrnInfoPtr scrn, int bpe, uint32_t > tiling); > +extern void drmmode_clear_pending_flip(xf86CrtcPtr crtc); > > Bool radeon_do_pageflip(ScrnInfoPtr scrn, ClientPtr client, > uint32_t new_front_handle, uint64_t id, void *data, > diff --git a/src/radeon_kms.c b/src/radeon_kms.c > index e353d66..c10fb42 100644 > --- a/src/radeon_kms.c > +++ b/src/radeon_kms.c > @@ -786,7 +786,7 @@ radeon_scanout_flip_abort(xf86CrtcPtr crtc, void > *event_data) > drmmode_crtc_private_ptr drmmode_crtc = event_data; > > drmmode_crtc->scanout_update_pending = FALSE; > - drmmode_crtc->flip_pending = FALSE; > + drmmode_clear_pending_flip(crtc); > } > > static void > -- > 2.9.3 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-08-25 13:42 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-08-25 9:58 [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort Michel Dänzer [not found] ` <20160825095813.18762-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org> 2016-08-25 9:58 ` [PATCH xf86-video-ati 2/2] Don't override crtc parameter value in drmmode_flip_handler/abort Michel Dänzer 2016-08-25 13:42 ` [PATCH xf86-video-ati 1/2] Also call drmmode_clear_pending_flip from radeon_scanout_flip_abort Deucher, Alexander
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.