All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vijay Purushothaman <vijay.a.purushothaman@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v2 3/3] drm/i915: gmch: fix stuck primary plane due to memory self-refresh mode
Date: Mon, 30 Jun 2014 09:14:03 +0530	[thread overview]
Message-ID: <53B0DD03.4050407@intel.com> (raw)
In-Reply-To: <1402660461-32294-3-git-send-email-imre.deak@intel.com>

On 6/13/2014 5:24 PM, Imre Deak wrote:
> Blanking/unblanking the console in a loop on an Asus T100 sometimes
> leaves the console blank. After some digging I found that applying
>
> commit 61bc95c1fbbb6a08b55bbe161fdf1ea5493fc595
> Author: Egbert Eich <eich@suse.com>
> Date:   Mon Mar 4 09:24:38 2013 -0500
>
>      DRM/i915: On G45 enable cursor plane briefly after enabling the display plane.
>
> fixed VLV too.
>
> In my case the problem seemed to happen already during the previous crtc
> disabling and went away if I disabled self-refresh mode before disabling
> the primary plane.
>
> The root cause for this is that updates from the shadow to live plane
> control register are blocked at vblank time if the memory self-refresh
> mode (aka max-fifo mode on VLV) is active at that moment. The controller
> checks at frame start time if the CPU is in C0 and the self-refresh mode
> enable bit is set and if so activates self-reresh mode, otherwise
> deactivates it. So to make sure that the plane truly gets disabled before
> pipe-off we have to:
>
> 1. disable memory self-refresh mode
> 2. disable plane
> 3. wait for vblank
> 4. disable pipe
> 5. wait for pipe-off
>
> v2:
> - add explanation for the root cause from HW team (Cesar Mancini et al)
> - remove note about the CPU C7S state, in my latest tests disabling it
>    alone didn't make a difference
> - add vblank between disabling plane and pipe (Ville)
> - apply the same workaround for all gmch platforms (Ville)
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>   drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++++--
>   1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index b9251c8..5eb8afe 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -4799,6 +4799,16 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
>   	if (IS_GEN2(dev))
>   		intel_set_cpu_fifo_underrun_reporting(dev, pipe, false);
>
> +	/*
> +	 * Vblank time updates from the shadow to live plane control register
> +	 * are blocked if the memory self-refresh mode is active at that
> +	 * moment. So to make sure the plane gets truly disabled, disable
> +	 * first the self-refresh mode. The self-refresh enable bit in turn
> +	 * will be checked/applied by the HW only at the next frame start
> +	 * event which is after the vblank start event, so we need to have a
> +	 * wait-for-vblank between disabling the plane and the pipe.
> +	 */
> +	intel_set_memory_cxsr(dev_priv, false);
>   	intel_crtc_disable_planes(crtc);
>
>   	for_each_encoder_on_crtc(dev, crtc, encoder)
> @@ -4807,9 +4817,10 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
>   	/*
>   	 * On gen2 planes are double buffered but the pipe isn't, so we must
>   	 * wait for planes to fully turn off before disabling the pipe.
> +	 * We also need to wait on all gmch platforms because of the
> +	 * self-refresh mode constraint explained above.
>   	 */
> -	if (IS_GEN2(dev))
> -		intel_wait_for_vblank(dev, pipe);
> +	intel_wait_for_vblank(dev, pipe);
>
>   	intel_disable_pipe(dev_priv, pipe);
>
>

Reviewed-by: Vijay Purushothaman <vijay.a.purushothaman@intel.com>

  parent reply	other threads:[~2014-06-30  3:44 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-13 11:54 [PATCH v2 1/3] drm/i915: gmch: factor out intel_set_memory_cxsr Imre Deak
2014-06-13 11:54 ` [PATCH v2 2/3] drm/i915: gmch: set SR WMs to valid values before enabling them Imre Deak
2014-06-30  3:42   ` Vijay Purushothaman
2014-07-01  3:51   ` Deepak S
2014-06-13 11:54 ` [PATCH v2 3/3] drm/i915: gmch: fix stuck primary plane due to memory self-refresh mode Imre Deak
2014-06-13 14:53   ` Daniel Vetter
2014-06-26 22:07     ` Egbert Eich
2014-06-27  6:22       ` Chris Wilson
2014-06-27 13:55         ` Egbert Eich
2014-06-27 18:38           ` Imre Deak
2014-07-07  9:36             ` Daniel Vetter
2014-06-30  3:44   ` Vijay Purushothaman [this message]
2014-07-01  3:53   ` Deepak S
2014-07-01  3:48 ` [PATCH v2 1/3] drm/i915: gmch: factor out intel_set_memory_cxsr Deepak S
2014-07-01  9:23   ` Imre Deak
2014-07-01  9:36 ` [PATCH v3 " Imre Deak

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=53B0DD03.4050407@intel.com \
    --to=vijay.a.purushothaman@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /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.