diff options
author | Dave Airlie <airlied@redhat.com> | 2017-12-01 09:11:13 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-12-01 09:11:13 +1000 |
commit | 8503a4c1e3fffe548443e390ac6cc93a2e7f3c77 (patch) | |
tree | 252bb39fd26dd83af9e9c5e2cdc163425c714152 /drivers | |
parent | 9f93b78ca9177f3c089cf594cd7f3e72856a52f0 (diff) | |
parent | a152992062aa3803eeabfda84b5b844721ddf6ed (diff) |
Merge tag 'imx-drm-fixes-2017-11-30' of git://git.pengutronix.de/git/pza/linux into drm-fixes
drm/imx: fix commit_tail for new drm_atomic_helper_setup_commit
Since commit 080de2e5be2d ("drm/atomic: Check for busy planes/connectors before
setting the commit"), drm_atomic_helper_setup_commit expects that blocking
commits have completed flipping before the commit_tail returns. Add the missing
wait_for_flip_done to commit_tail to ensure this.
* tag 'imx-drm-fixes-2017-11-30' of git://git.pengutronix.de/git/pza/linux:
drm/imx: always call wait_for_flip_done in commit_tail
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/imx/imx-drm-core.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c index 93c7e3f9b4a8..17d2f3a1c562 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c @@ -133,9 +133,16 @@ static void imx_drm_atomic_commit_tail(struct drm_atomic_state *state) plane_disabling = true; } - if (plane_disabling) { - drm_atomic_helper_wait_for_vblanks(dev, state); + /* + * The flip done wait is only strictly required by imx-drm if a deferred + * plane disable is in-flight. As the core requires blocking commits + * to wait for the flip it is done here unconditionally. This keeps the + * workitem around a bit longer than required for the majority of + * non-blocking commits, but we accept that for the sake of simplicity. + */ + drm_atomic_helper_wait_for_flip_done(dev, state); + if (plane_disabling) { for_each_old_plane_in_state(state, plane, old_plane_state, i) ipu_plane_disable_deferred(plane); |