drm/omap: fix the handling of fb ref counts
With the recent primary-plane changes for drm, the primary plane's framebuffer needs to be ref counted the same way as for non-primary-planes. This was not done by the omapdrm driver, which caused the ref count to drop to 0 too early, causing problems. This patch moves the fb unref and ref from omap_plane_update to omap_plane_mode_set. This way the fb refs are updated for both primary and non-primary cases, as omap_plane_update calls omap_plane_mode_set. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
Родитель
38e5597a03
Коммит
f2d022aa42
|
@ -225,6 +225,11 @@ int omap_plane_mode_set(struct drm_plane *plane,
|
||||||
omap_plane->apply_done_cb.arg = arg;
|
omap_plane->apply_done_cb.arg = arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (plane->fb)
|
||||||
|
drm_framebuffer_unreference(plane->fb);
|
||||||
|
|
||||||
|
drm_framebuffer_reference(fb);
|
||||||
|
|
||||||
plane->fb = fb;
|
plane->fb = fb;
|
||||||
plane->crtc = crtc;
|
plane->crtc = crtc;
|
||||||
|
|
||||||
|
@ -241,11 +246,6 @@ static int omap_plane_update(struct drm_plane *plane,
|
||||||
struct omap_plane *omap_plane = to_omap_plane(plane);
|
struct omap_plane *omap_plane = to_omap_plane(plane);
|
||||||
omap_plane->enabled = true;
|
omap_plane->enabled = true;
|
||||||
|
|
||||||
if (plane->fb)
|
|
||||||
drm_framebuffer_unreference(plane->fb);
|
|
||||||
|
|
||||||
drm_framebuffer_reference(fb);
|
|
||||||
|
|
||||||
/* omap_plane_mode_set() takes adjusted src */
|
/* omap_plane_mode_set() takes adjusted src */
|
||||||
switch (omap_plane->win.rotation & 0xf) {
|
switch (omap_plane->win.rotation & 0xf) {
|
||||||
case BIT(DRM_ROTATE_90):
|
case BIT(DRM_ROTATE_90):
|
||||||
|
|
Загрузка…
Ссылка в новой задаче