dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Jyri Sarha <jsarha@ti.com>
Cc: tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com,
	dri-devel@lists.freedesktop.org
Subject: Re: [PATCH RFC] drm/atomic: Disable planes on blanked CRTC and enable on unblank
Date: Mon, 16 Nov 2015 17:06:04 +0100	[thread overview]
Message-ID: <20151116160604.GY16848@phenom.ffwll.local> (raw)
In-Reply-To: <1446735789-20838-1-git-send-email-jsarha@ti.com>

On Thu, Nov 05, 2015 at 05:03:09PM +0200, Jyri Sarha wrote:
> Disable planes if they are on to be blanked CRTC and enable them when
> the CRTC is turned back on by DMPS.
> 
> This is desirable on HW that loses its context on blanking. When
> planes are enabled and disabled with the associated CRTCs, there is no
> need to restore the plane context in runtime_resume callback.
> 
> Signed-off-by: Jyri Sarha <jsarha@ti.com>
> ---
> We would need something like this to get rid off OMAPDSS somewhat
> messy runtime_resume code. How does this look, could this generic
> solution be refined to be acceptable to mainline, or should we start
> looking a local solution to omapdrm?
> 
> BTW, with this patch the planes are sometimes disabled multiple
> times. So probably a boolean (or maybe two like on crtc) should be
> added to drm_plane_state to track and avoid multiple shutdowns.

The recommended way to do this is to call drm_atomic_add_affected_planes
from your crtc's atomic_check callback when active_changed is set. This
will also take care of enabling all planes again. For disabling we don't
yet have a helper yet, but it would be easy to create a
drm_atomic_helper_disable_planes(crtc) which just walks over all planes in
an atomic update that are currently using the given crtc and disables it
using plane_helper_funcs->atomic_disable. That would again require
drm_atomic_add_affected_planes to be called first.

This way current helper behaviour is unchanged, but it'd be easy to
construct the behaviour you want using helpers with
drm_atomic_add_affected_planes called from the crtc->disable hook.

I thought there was an rfc patch somewhere for this, but I can't find it
any more.

Cheers, Daniel
> 
>  drivers/gpu/drm/drm_atomic_helper.c | 19 +++++++++++++++++--
>  include/drm/drm_atomic_helper.h     |  7 +++++++
>  2 files changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index aecb5d6..92fcaef 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -1994,8 +1994,8 @@ EXPORT_SYMBOL(drm_atomic_helper_page_flip);
>   *
>   * This is the main helper function provided by the atomic helper framework for
>   * implementing the legacy DPMS connector interface. It computes the new desired
> - * ->active state for the corresponding CRTC (if the connector is enabled) and
> - *  updates it.
> + * ->active state for the corresponding CRTC and planes on it (if the connector
> + * is enabled) and updates it.
>   *
>   * Returns:
>   * Returns 0 on success, negative errno numbers on failure.
> @@ -2008,6 +2008,7 @@ int drm_atomic_helper_connector_dpms(struct drm_connector *connector,
>  	struct drm_crtc_state *crtc_state;
>  	struct drm_crtc *crtc;
>  	struct drm_connector *tmp_connector;
> +	struct drm_plane *tmp_plane;
>  	int ret;
>  	bool active = false;
>  	int old_mode = connector->dpms;
> @@ -2046,6 +2047,20 @@ retry:
>  	}
>  	crtc_state->active = active;
>  
> +	/* Collect associated plane states to global state object. */
> +	list_for_each_entry(tmp_plane, &config->plane_list, head) {
> +		struct drm_plane_state *plane_state;
> +
> +		if (tmp_plane->state->crtc != crtc)
> +			continue;
> +
> +		plane_state = drm_atomic_get_plane_state(state, tmp_plane);
> +		if (IS_ERR(plane_state)) {
> +			ret = PTR_ERR(plane_state);
> +			goto fail;
> +		}
> +	}
> +
>  	ret = drm_atomic_commit(state);
>  	if (ret != 0)
>  		goto fail;
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 11266d14..89c327f 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -173,6 +173,13 @@ drm_atomic_plane_disabling(struct drm_plane *plane,
>  		(plane->state->crtc != NULL && plane->state->fb == NULL));
>  
>  	/*
> +	 * If the plane is on a crtc that is not going to be active the plane
> +	 * it self can be disabled too.
> +	 */
> +	if (plane->state->crtc && !plane->state->crtc->state->active)
> +		return true;
> +
> +	/*
>  	 * When using the transitional helpers, old_state may be NULL. If so,
>  	 * we know nothing about the current state and have to assume that it
>  	 * might be enabled.
> -- 
> 1.9.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2015-11-16 16:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-05 15:03 [PATCH RFC] drm/atomic: Disable planes on blanked CRTC and enable on unblank Jyri Sarha
2015-11-16 16:06 ` Daniel Vetter [this message]
2015-11-18 15:52   ` Jyri Sarha
2015-11-18 16:04     ` Daniel Vetter

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=20151116160604.GY16848@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jsarha@ti.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=tomi.valkeinen@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox