From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: Re: [PATCH 6/6] drm/msm/mdp5: Don't use async plane update path if plane visibility changes Date: Wed, 1 Nov 2017 09:26:09 -0200 Message-ID: <20171101112609.GB4111@jade> References: <20171027105732.19235-1-architt@codeaurora.org> <20171027105732.19235-7-architt@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mail-qt0-f196.google.com ([209.85.216.196]:50298 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754089AbdKAL0P (ORCPT ); Wed, 1 Nov 2017 07:26:15 -0400 Received: by mail-qt0-f196.google.com with SMTP id d9so2201826qtd.7 for ; Wed, 01 Nov 2017 04:26:14 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20171027105732.19235-7-architt@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org To: Archit Taneja Cc: robdclark@gmail.com, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, Gustavo Padovan Hi Archit, 2017-10-27 Archit Taneja : > When a plane moves out of bounds (i.e, outside the crtc clip region), the > plane state's "visible" parameter changes to false. When this happens, we > (a) release the hwpipe resources away from it, and > (b) unstage the corresponding hwpipe(s) from the Layer Mixers in the CRTC. > > (a) requires use to acquire the global atomic state and assign a new > hwpipe. (b) requires us to re-configure the Layer Mixer, which is done in > the CRTC. We don't want to do these things in the async plane update path, > so return an error if the new state's "visible" isn't the same as the > current state's "visible". > > Cc: Gustavo Padovan > Signed-off-by: Archit Taneja > --- > drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > index f1cf367e853d..be50445f9901 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > @@ -470,6 +470,9 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane, > { > struct mdp5_plane_state *mdp5_state = to_mdp5_plane_state(state); > struct drm_crtc_state *crtc_state; > + struct drm_rect clip; > + int min_scale, max_scale; > + int ret; > > crtc_state = drm_atomic_get_existing_crtc_state(state->state, > state->crtc); > @@ -495,6 +498,28 @@ static int mdp5_plane_atomic_async_check(struct drm_plane *plane, > plane->state->fb != state->fb) > return -EINVAL; > > + clip.x1 = 0; > + clip.y1 = 0; > + clip.x2 = crtc_state->adjusted_mode.hdisplay; > + clip.y2 = crtc_state->adjusted_mode.vdisplay; > + min_scale = FRAC_16_16(1, 8); > + max_scale = FRAC_16_16(8, 1); > + > + ret = drm_plane_helper_check_state(state, &clip, min_scale, > + max_scale, true, true); > + if (ret) > + return ret; > + > + /* > + * if the visibility of the plane changes (i.e, if the cursor is > + * clipped out completely, we can't take the async path because > + * we need to stage/unstage the plane from the Layer Mixer(s). We > + * also assign/unassign the hwpipe(s) tied to the plane. We avoid > + * taking the fast path for both these reasons. > + */ > + if (state->visible != plane->state->visible) > + return -EINVAL; > + > return 0; > } Reviewed-by: Gustavo Padovan Gustavo