From patchwork Fri Mar 29 02:44:57 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 2363741 Return-Path: X-Original-To: patchwork-ltsi-dev@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) by patchwork1.kernel.org (Postfix) with ESMTP id 240C33FD40 for ; Fri, 29 Mar 2013 02:59:06 +0000 (UTC) Received: from mail.linux-foundation.org (localhost [IPv6:::1]) by mail.linuxfoundation.org (Postfix) with ESMTP id B6D28E8E; Fri, 29 Mar 2013 02:48:10 +0000 (UTC) X-Original-To: ltsi-dev@lists.linuxfoundation.org Delivered-To: ltsi-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTP id 20F87EBB for ; Fri, 29 Mar 2013 02:47:57 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from kirsty.vergenet.net (kirsty.vergenet.net [202.4.237.240]) by smtp1.linuxfoundation.org (Postfix) with ESMTP id 9F0B920177 for ; Fri, 29 Mar 2013 02:47:54 +0000 (UTC) Received: from ayumi.akashicho.tokyo.vergenet.net (p8120-ipbfp1001kobeminato.hyogo.ocn.ne.jp [118.10.137.120]) by kirsty.vergenet.net (Postfix) with ESMTP id 7A38C2C6A98; Fri, 29 Mar 2013 13:46:05 +1100 (EST) Received: by ayumi.akashicho.tokyo.vergenet.net (Postfix, from userid 7100) id 1EA76EDEA28; Fri, 29 Mar 2013 11:46:03 +0900 (JST) From: Simon Horman To: ltsi-dev@lists.linuxfoundation.org Date: Fri, 29 Mar 2013 11:44:57 +0900 Message-Id: <1364525119-31791-369-git-send-email-horms+renesas@verge.net.au> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1364525119-31791-1-git-send-email-horms+renesas@verge.net.au> References: <1364525119-31791-1-git-send-email-horms+renesas@verge.net.au> X-Spam-Status: No, score=-3.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Magnus Damm Subject: [LTSI-dev] [PATCH/RFC 368/390] drm/rcar-du: Don't re-reserve hardware plane at each update X-BeenThere: ltsi-dev@lists.linuxfoundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: "A list to discuss patches, development, and other things related to the LTSI project" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ltsi-dev-bounces@lists.linuxfoundation.org Errors-To: ltsi-dev-bounces@lists.linuxfoundation.org From: Laurent Pinchart Hardware planes only need to be reserved if not already reserved, or if the number of required planes has changed. Release the previously reserved planes (if any) and reserve new ones in that case. Signed-off-by: Laurent Pinchart (cherry picked from commit c38cbeedb6536f8bf9bad0d17fcdceb9bf727583) Signed-off-by: Simon Horman --- drivers/gpu/drm/rcar-du/rcar_du_plane.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c index 110fd13..220ca00 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c @@ -206,6 +206,7 @@ rcar_du_plane_update(struct drm_plane *plane, struct drm_crtc *crtc, struct rcar_du_plane *rplane = to_rcar_plane(plane); struct rcar_du_device *rcdu = plane->dev->dev_private; const struct rcar_du_format_info *format; + unsigned int nplanes; int ret; format = rcar_du_format_info(fb->pixel_format); @@ -220,6 +221,8 @@ rcar_du_plane_update(struct drm_plane *plane, struct drm_crtc *crtc, return -EINVAL; } + nplanes = rplane->format ? rplane->format->planes : 0; + rplane->crtc = crtc; rplane->format = format; rplane->pitch = fb->pitches[0]; @@ -231,9 +234,15 @@ rcar_du_plane_update(struct drm_plane *plane, struct drm_crtc *crtc, rplane->width = crtc_w; rplane->height = crtc_h; - ret = rcar_du_plane_reserve(rplane); - if (ret < 0) - return ret; + /* Reallocate hardware planes if the number of required planes has + * changed. + */ + if (format->planes != nplanes) { + rcar_du_plane_release(rplane); + ret = rcar_du_plane_reserve(rplane); + if (ret < 0) + return ret; + } rcar_du_plane_compute_base(rplane, fb); rcar_du_plane_setup(rplane);