diff options
author | Helen Koike <helen.koike@collabora.com> | 2019-06-03 18:56:06 +0200 |
---|---|---|
committer | Boris Brezillon <boris.brezillon@collabora.com> | 2019-06-04 10:12:02 +0200 |
commit | d985a3533274ef7dd1ccb25cb05a72259b25268f (patch) | |
tree | e01e5338705ec9168d01cfdb7bc059cecbce190f /lib | |
parent | Merge tag 'imx-drm-fixes-2019-05-29' of git://git.pengutronix.de/git/pza/linu... (diff) | |
download | linux-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