aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2014-04-15 09:26:01 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2014-04-15 09:40:01 -0400
commitf2d022aa421ca903a30f63b04528064b7eceaf5e (patch)
tree84304e3a9d0a148c99acbdeaa0feb6b2645d64be /drivers/gpu/drm
parent38e5597a03d2d1499a785230031c4f48e1d9c6b7 (diff)
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>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_plane.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
index df1725247cca..3cf31ee59aac 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -225,6 +225,11 @@ int omap_plane_mode_set(struct drm_plane *plane,
225 omap_plane->apply_done_cb.arg = arg; 225 omap_plane->apply_done_cb.arg = arg;
226 } 226 }
227 227
228 if (plane->fb)
229 drm_framebuffer_unreference(plane->fb);
230
231 drm_framebuffer_reference(fb);
232
228 plane->fb = fb; 233 plane->fb = fb;
229 plane->crtc = crtc; 234 plane->crtc = crtc;
230 235
@@ -241,11 +246,6 @@ static int omap_plane_update(struct drm_plane *plane,
241 struct omap_plane *omap_plane = to_omap_plane(plane); 246 struct omap_plane *omap_plane = to_omap_plane(plane);
242 omap_plane->enabled = true; 247 omap_plane->enabled = true;
243 248
244 if (plane->fb)
245 drm_framebuffer_unreference(plane->fb);
246
247 drm_framebuffer_reference(fb);
248
249 /* omap_plane_mode_set() takes adjusted src */ 249 /* omap_plane_mode_set() takes adjusted src */
250 switch (omap_plane->win.rotation & 0xf) { 250 switch (omap_plane->win.rotation & 0xf) {
251 case BIT(DRM_ROTATE_90): 251 case BIT(DRM_ROTATE_90):