All of lore.kernel.org
 help / color / mirror / Atom feed
From: Archit Taneja <architt@codeaurora.org>
To: Rob Clark <robdclark@gmail.com>, dri-devel@lists.freedesktop.org
Cc: freedreno@lists.freedesktop.org
Subject: Re: [PATCH] drm/msm/mdp5: handle non-fullscreen base plane case
Date: Sat, 15 Oct 2016 15:09:45 +0530	[thread overview]
Message-ID: <f57272cf-4e42-741d-e4b7-c201f50130ec@codeaurora.org> (raw)
In-Reply-To: <1476377326-17877-1-git-send-email-robdclark@gmail.com>


On 10/13/2016 10:18 PM, Rob Clark wrote:
> If the bottom-most layer is not fullscreen, we need to use the BASE
> mixer stage for solid fill (ie. MDP5_CTL_BLEND_OP_FLAG_BORDER_OUT).  The
> blend_setup() code pretty much handled this already, we just had to
> figure this out in _atomic_check() and assign the stages appropriately.
>
> Signed-off-by: Rob Clark <robdclark@gmail.com>
> ---
> TODO mdp4 might need similar treatment?
>
>  drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 44 ++++++++++++++++++++------------
>  1 file changed, 27 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> index fa2be7c..e42f62d 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> @@ -223,11 +223,6 @@ static void blend_setup(struct drm_crtc *crtc)
>  		plane_cnt++;
>  	}
>
> -	/*
> -	* If there is no base layer, enable border color.
> -	* Although it's not possbile in current blend logic,
> -	* put it here as a reminder.
> -	*/
>  	if (!pstates[STAGE_BASE] && plane_cnt) {
>  		ctl_blend_flags |= MDP5_CTL_BLEND_OP_FLAG_BORDER_OUT;
>  		DBG("Border Color is enabled");
> @@ -365,6 +360,15 @@ static int pstate_cmp(const void *a, const void *b)
>  	return pa->state->zpos - pb->state->zpos;
>  }
>
> +/* is there a helper for this? */
> +static bool is_fullscreen(struct drm_crtc_state *cstate,
> +		struct drm_plane_state *pstate)
> +{
> +	return (pstate->crtc_x == 0) && (pstate->crtc_y == 0) &&
> +		(pstate->crtc_w == cstate->mode.hdisplay) &&
> +		(pstate->crtc_h == cstate->mode.vdisplay);
> +}
> +
>  static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
>  		struct drm_crtc_state *state)
>  {
> @@ -375,21 +379,11 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
>  	struct plane_state pstates[STAGE_MAX + 1];
>  	const struct mdp5_cfg_hw *hw_cfg;
>  	const struct drm_plane_state *pstate;
> -	int cnt = 0, i;
> +	int cnt = 0, base = 0, i;
>
>  	DBG("%s: check", mdp5_crtc->name);
>
> -	/* verify that there are not too many planes attached to crtc
> -	 * and that we don't have conflicting mixer stages:
> -	 */
> -	hw_cfg = mdp5_cfg_get_hw_config(mdp5_kms->cfg);
>  	drm_atomic_crtc_state_for_each_plane_state(plane, pstate, state) {
> -		if (cnt >= (hw_cfg->lm.nb_stages)) {
> -			dev_err(dev->dev, "too many planes!\n");
> -			return -EINVAL;
> -		}
> -
> -
>  		pstates[cnt].plane = plane;
>  		pstates[cnt].state = to_mdp5_plane_state(pstate);
>
> @@ -399,8 +393,24 @@ static int mdp5_crtc_atomic_check(struct drm_crtc *crtc,
>  	/* assign a stage based on sorted zpos property */
>  	sort(pstates, cnt, sizeof(pstates[0]), pstate_cmp, NULL);
>
> +	/* if the bottom-most layer is not fullscreen, we need to use
> +	 * it for solid-color:
> +	 */
> +	if (!is_fullscreen(state, &pstates[0].state->base))
> +		base++;
> +

I get a crash here when fbcon is enabled and there are no connectors
connected. We're trying to refer pstates[0] when there is no plane
connected to the crtc. I guess we could bail out much earlier if cnt
is 0.

Archit

> +	/* verify that there are not too many planes attached to crtc
> +	 * and that we don't have conflicting mixer stages:
> +	 */
> +	hw_cfg = mdp5_cfg_get_hw_config(mdp5_kms->cfg);
> +
> +	if ((cnt + base) >= hw_cfg->lm.nb_stages) {
> +		dev_err(dev->dev, "too many planes!\n");
> +		return -EINVAL;
> +	}
> +
>  	for (i = 0; i < cnt; i++) {
> -		pstates[i].state->stage = STAGE_BASE + i;
> +		pstates[i].state->stage = STAGE_BASE + i + base;
>  		DBG("%s: assign pipe %s on stage=%d", mdp5_crtc->name,
>  				pipe2name(mdp5_plane_pipe(pstates[i].plane)),
>  				pstates[i].state->stage);
>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2016-10-15  9:39 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-13 16:48 [PATCH] drm/msm/mdp5: handle non-fullscreen base plane case Rob Clark
     [not found] ` <1476377326-17877-1-git-send-email-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-10-14 12:25   ` Archit Taneja
2016-10-14 12:45   ` Ville Syrjälä
     [not found]     ` <20161014124515.GC4329-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-10-14 14:11       ` Rob Clark
2016-10-15  9:39 ` Archit Taneja [this message]
     [not found]   ` <f57272cf-4e42-741d-e4b7-c201f50130ec-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2016-10-15 11:32     ` Rob Clark
2016-10-15 12:57       ` Archit Taneja
2016-10-15 13:08         ` Rob Clark
     [not found]           ` <CAF6AEGuukfacj7G+j3496tLSBMJA44Yt14NTxpT9kCX5kJftPw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-10-15 13:22             ` Archit Taneja

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f57272cf-4e42-741d-e4b7-c201f50130ec@codeaurora.org \
    --to=architt@codeaurora.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=robdclark@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.