[PATCH] drm: Set the plane's crtc before calling disable_plane.
Jesse Barnes
jbarnes at virtuousgeek.org
Mon Mar 3 13:45:17 PST 2014
On Mon, 3 Mar 2014 13:38:36 -0800
Stéphane Marchesin <marcheu at chromium.org> wrote:
> Some drivers like exynos need the crtc to be able to disable the plane,
> so set it before calling disable_plane.
>
> Signed-off-by: Stéphane Marchesin <marcheu at chromium.org>
> ---
> drivers/gpu/drm/drm_crtc.c | 21 +++++++++++----------
> 1 file changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 3b7d32d..0943316 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -1947,10 +1947,21 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
> }
> plane = obj_to_plane(obj);
>
> + obj = drm_mode_object_find(dev, plane_req->crtc_id,
> + DRM_MODE_OBJECT_CRTC);
> + if (!obj) {
> + DRM_DEBUG_KMS("Unknown crtc ID %d\n",
> + plane_req->crtc_id);
> + ret = -ENOENT;
> + goto out;
> + }
> + crtc = obj_to_crtc(obj);
> +
> /* No fb means shut it down */
> if (!plane_req->fb_id) {
> drm_modeset_lock_all(dev);
> old_fb = plane->fb;
> + plane->crtc = crtc;
> plane->funcs->disable_plane(plane);
> plane->crtc = NULL;
> plane->fb = NULL;
> @@ -1958,16 +1969,6 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
> goto out;
> }
>
> - obj = drm_mode_object_find(dev, plane_req->crtc_id,
> - DRM_MODE_OBJECT_CRTC);
> - if (!obj) {
> - DRM_DEBUG_KMS("Unknown crtc ID %d\n",
> - plane_req->crtc_id);
> - ret = -ENOENT;
> - goto out;
> - }
> - crtc = obj_to_crtc(obj);
> -
> fb = drm_framebuffer_lookup(dev, plane_req->fb_id);
> if (!fb) {
> DRM_DEBUG_KMS("Unknown framebuffer ID %d\n",
I'm pretty sure this is ok since we don't have much userspace using
this that might fail to pass in a crtc when shutting down a plane...
Reviewed-by: Jesse Barnes <jbarnes at virtuousgeek.org>
--
Jesse Barnes, Intel Open Source Technology Center
More information about the dri-devel
mailing list