summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorHelen Koike <helen.koike@collabora.com>2019-06-03 18:56:06 +0200
committerBoris Brezillon <boris.brezillon@collabora.com>2019-06-04 10:12:02 +0200
commitd985a3533274ef7dd1ccb25cb05a72259b25268f (patch)
treee01e5338705ec9168d01cfdb7bc059cecbce190f /lib
parentMerge tag 'imx-drm-fixes-2019-05-29' of git://git.pengutronix.de/git/pza/linu... (diff)
downloadlinux-d985a3533274ef7dd1ccb25cb05a72259b25268f.tar.xz
linux-d985a3533274ef7dd1ccb25cb05a72259b25268f.zip
drm/rockchip: fix fb references in async update
In the case of async update, modifications are done in place, i.e. in the current plane state, so the new_state is prepared and the new_state is cleaned up (instead of the old_state, unlike what happens in a normal sync update). To cleanup the old_fb properly, it needs to be placed in the new_state in the end of async_update, so cleanup call will unreference the old_fb correctly. Also, the previous code had a: plane_state = plane->funcs->atomic_duplicate_state(plane); ... swap(plane_state, plane->state); if (plane->state->fb && plane->state->fb != new_state->fb) { ... } Which was wrong, as the fb were just assigned to be equal, so this if statement nevers evaluates to true. Another details is that the function drm_crtc_vblank_get() can only be called when vop->is_enabled is true, otherwise it has no effect and trows a WARN_ON(). Calling drm_atomic_set_fb_for_plane() (which get a referent of the new fb and pus the old fb) is not required, as it is taken care by drm_mode_cursor_universal() when calling drm_atomic_helper_update_plane(). Fixes: 15609559a834 ("drm/rockchip: update cursors asynchronously through atomic.") Cc: <stable@vger.kernel.org> # v4.20+ Signed-off-by: Helen Koike <helen.koike@collabora.com> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190603165610.24614-2-helen.koike@collabora.com
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions