Re: [PATCH v3 11/25] drm/i915: add missing error capturing of the PIPESTAT reg

Ville Syrjälä
2014-04-23T07:53:23Z

On Fri, Apr 18, 2014 at 03:55:04PM +0300, Imre Deak wrote:
> While checking the error capture path I noticed that we lacked the
> power domain-on check for PIPESTAT so fix this by moving that to where
> the rest of pipe registers are captured.
>
> The move also revealed that we actually don't include this register in
> the error report, so fix that too.
>
> v2:
> - patch introduced in v2 of the patchset
> v3:
> - add back !HAS_PCH_SPLIT check (Ville)
>
> Signed-off-by: Imre Deak <imre.deak@intel.com>

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

>
> [ Ignore my previous comment about the gen<=5 || vlv check, I realized
> that it's the same as !HAS_PCH_SPLIT. ]
>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 1 -
> drivers/gpu/drm/i915/i915_gpu_error.c | 3 ---
> drivers/gpu/drm/i915/intel_display.c | 5 +++++
> 3 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 7d6acb4..5254f4b 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -325,7 +325,6 @@ struct drm_i915_error_state {
> u32 gab_ctl;
> u32 gfx_mode;
> u32 extra_instdone[I915_NUM_INSTDONE_REG];
> - u32 pipestat[I915_MAX_PIPES];
> u64 fence[I915_MAX_NUM_FENCES];
> struct intel_overlay_error_state *overlay;
> struct intel_display_error_state *display;
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index ba79b59..7b5cc08 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -1028,7 +1028,6 @@ static void i915_capture_reg_state(struct drm_i915_private *dev_priv,
> struct drm_i915_error_state *error)
> {
> struct drm_device *dev = dev_priv->dev;
> - int pipe;
>
> /* General organization
> * 1. Registers specific to a single generation
> @@ -1080,8 +1079,6 @@ static void i915_capture_reg_state(struct drm_i915_private *dev_priv,
> error->ier = I915_READ16(IER);
> else
> error->ier = I915_READ(IER);
> - for_each_pipe(pipe)
> - error->pipestat[pipe] = I915_READ(PIPESTAT(pipe));
> }
>
> /* 4: Everything else */
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index cd68a24..a2f3790 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -11901,6 +11901,7 @@ struct intel_display_error_state {
> struct intel_pipe_error_state {
> bool power_domain_on;
> u32 source;
> + u32 stat;
> } pipe[I915_MAX_PIPES];
>
> struct intel_plane_error_state {
> @@ -11982,6 +11983,9 @@ intel_display_capture_error_state(struct drm_device *dev)
> }
>
> error->pipe[i].source = I915_READ(PIPESRC(i));
> +
> + if (!HAS_PCH_SPLIT(dev))
> + error->pipe[i].stat = I915_READ(PIPESTAT(i));
> }
>
> error->num_transcoders = INTEL_INFO(dev)->num_pipes;
> @@ -12032,6 +12036,7 @@ intel_display_print_error_state(struct drm_i915_error_state_buf *m,
> err_printf(m, " Power: %s\n",
> error->pipe[i].power_domain_on ? "on" : "off");
> err_printf(m, " SRC: %08x\n", error->pipe[i].source);
> + err_printf(m, " STAT: %08x\n", error->pipe[i].stat);
>
> err_printf(m, "Plane [%d]:\n", i);
> err_printf(m, " CNTR: %08x\n", error->plane[i].control);
> --
> 1.8.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

--
Ville Syrjälä
Intel OTC