[Intel-gfx] [PATCH 02/20] drm/i915: Generalise common GPU engine reset request/unrequest code

Mika Kuoppala mika.kuoppala at linux.intel.com
Fri Jan 22 03:24:56 PST 2016


Arun Siluvery <arun.siluvery at linux.intel.com> writes:

> From: Tomas Elf <tomas.elf at intel.com>
>
> GPU engine reset handshaking is something that is applicable to both full GPU
> reset and engine reset, which is something that is part of the upcoming TDR
> per-engine hang recovery patches. Break out the common engine reset
> request/unrequest code (originally written by Mika Kuoppala) for reuse later in
> the TDR enablement patch series.
>
> Signed-off-by: Tomas Elf <tomas.elf at intel.com>
> Cc: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_uncore.c | 46 ++++++++++++++++++++++++++-----------
>  1 file changed, 32 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
> index c3c13dc..2df4246 100644
> --- a/drivers/gpu/drm/i915/intel_uncore.c
> +++ b/drivers/gpu/drm/i915/intel_uncore.c
> @@ -1529,32 +1529,50 @@ static int wait_for_register(struct drm_i915_private *dev_priv,
>  	return wait_for((I915_READ(reg) & mask) == value, timeout_ms);
>  }
>  
> +static inline int gen8_request_engine_reset(struct intel_engine_cs *engine)
> +{

Inline is superfluous here. Please remove.

> +	struct drm_i915_private *dev_priv = engine->dev->dev_private;
> +	int ret = 0;

No need to set ret to zero.

> +
> +	I915_WRITE(RING_RESET_CTL(engine->mmio_base),
> +		   _MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET));
> +

Indentation seems to be bit off here..

> +	ret = wait_for_register(dev_priv,
> +			      RING_RESET_CTL(engine->mmio_base),
> +			      RESET_CTL_READY_TO_RESET,
> +			      RESET_CTL_READY_TO_RESET,
> +			      700);

and here 

> +	if (ret)
> +		DRM_ERROR("%s: reset request timeout\n", engine->name);
> +
> +	return ret;
> +}
> +
> +static inline int gen8_unrequest_engine_reset(struct intel_engine_cs
> *engine)

Remove inline and do not return value if there
is no use for it.

> +{
> +	struct drm_i915_private *dev_priv = engine->dev->dev_private;
> +
> +	I915_WRITE(RING_RESET_CTL(engine->mmio_base),
> +		_MASKED_BIT_DISABLE(RESET_CTL_REQUEST_RESET));
> +
indent.

With these done, you can add my r-b.

-Mika

> +	return 0;
> +}
> +
>  static int gen8_do_reset(struct drm_device *dev)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct intel_engine_cs *engine;
>  	int i;
>  
> -	for_each_ring(engine, dev_priv, i) {
> -		I915_WRITE(RING_RESET_CTL(engine->mmio_base),
> -			   _MASKED_BIT_ENABLE(RESET_CTL_REQUEST_RESET));
> -
> -		if (wait_for_register(dev_priv,
> -				      RING_RESET_CTL(engine->mmio_base),
> -				      RESET_CTL_READY_TO_RESET,
> -				      RESET_CTL_READY_TO_RESET,
> -				      700)) {
> -			DRM_ERROR("%s: reset request timeout\n", engine->name);
> +	for_each_ring(engine, dev_priv, i)
> +		if (gen8_request_engine_reset(engine))
>  			goto not_ready;
> -		}
> -	}
>  
>  	return gen6_do_reset(dev);
>  
>  not_ready:
>  	for_each_ring(engine, dev_priv, i)
> -		I915_WRITE(RING_RESET_CTL(engine->mmio_base),
> -			   _MASKED_BIT_DISABLE(RESET_CTL_REQUEST_RESET));
> +		gen8_unrequest_engine_reset(engine);
>  
>  	return -EIO;
>  }
> -- 
> 1.9.1


More information about the Intel-gfx mailing list