diff options
| author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-04-15 09:26:01 -0400 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-04-15 09:40:01 -0400 |
| commit | f2d022aa421ca903a30f63b04528064b7eceaf5e (patch) | |
| tree | 84304e3a9d0a148c99acbdeaa0feb6b2645d64be | |
| parent | 38e5597a03d2d1499a785230031c4f48e1d9c6b7 (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>
| -rw-r--r-- | drivers/gpu/drm/omapdrm/omap_plane.c | 10 |
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): |
