[Intel-gfx] [RFC] drm/i915: Add GuC timeout config options to Kconfig.debug

Kelvin Gardiner kelvin.gardiner at intel.com
Tue Jun 27 21:22:42 UTC 2017


Hi,

Any feedback on this?

Thanks,
Kelvin

On 13/06/17 16:19, Kelvin Gardiner wrote:
> It is sometimes useful for debug purposes to be able to set GuC timeout
> lengths.
>
> This patch adds GuC load and request timeouts values to Kconfig.debug,
> which can then be optionally set as required for debug cases. A default
> value equal to the current hard-coded values are provided.
>
> In the case when a Kconfig option has not been set, a default value is
> provide using a define.
>
> Signed-off-by: Kelvin Gardiner <kelvin.gardiner at intel.com>
> ---
>  drivers/gpu/drm/i915/Kconfig.debug      | 40 +++++++++++++++++++++++++++++++++
>  drivers/gpu/drm/i915/i915_drv.h         | 13 +++++++++++
>  drivers/gpu/drm/i915/intel_guc_loader.c |  3 ++-
>  drivers/gpu/drm/i915/intel_uc.c         |  5 ++++-
>  4 files changed, 59 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
> index 78c5c04..6a0767d 100644
> --- a/drivers/gpu/drm/i915/Kconfig.debug
> +++ b/drivers/gpu/drm/i915/Kconfig.debug
> @@ -112,3 +112,43 @@ config DRM_I915_DEBUG_VBLANK_EVADE
>  	  the vblank.
>
>  	  If in doubt, say "N".
> +
> +config DRM_I915_OVERRIDE_TIMEOUTS
> +	bool "Enable timeout overrides"
> +        depends on DRM_I915
> +        default n
> +        help
> +          Enable this option to allow overriding of selected timeouts in the
> +	  driver i915.
> +
> +	  Timeouts should only be overridden for debug and not in normal use.
> +
> +	  If in doubt, say "N".
> +
> +config DRM_I915_TIMEOUT_GUC_LOAD
> +	int "Set the value of the GuC load timeout"
> +        depends on DRM_I915_OVERRIDE_TIMEOUTS
> +        default 100
> +        range 0 10000
> +        help
> +	  Set this option to select the value of the timeout in ms for how long
> +	  the GuC FW load should take.
> +
> +	  The valid range is 0 to 10000
> +
> +	  The default timeout will work in normal use. This option is provided
> +	  for debug.
> +
> +config DRM_I915_TIMEOUT_GUC_REQUEST
> +	int "Set the value of the GuC request timeout"
> +        depends on DRM_I915_OVERRIDE_TIMEOUTS
> +	default 10
> +	range 0 1000
> +	help
> +          Set this option to select the value of the timeout in ms for how long
> +	  a request to the GuC should take.
> +
> +	  The valid range is 0 to 1000
> +
> +	  The default timeout will work in normal use. This option is provided
> +	  for debug.
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 38ef734..efc56d2 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1488,6 +1488,19 @@ struct drm_i915_error_state_buf {
>  #define I915_ENGINE_DEAD_TIMEOUT  (4 * HZ)  /* Seqno, head and subunits dead */
>  #define I915_SEQNO_DEAD_TIMEOUT   (12 * HZ) /* Seqno dead with active head */
>
> +#ifndef CONFIG_DRM_I915_TIMEOUT_GUC_LOAD
> +#define DRM_I915_TIMEOUT_GUC_LOAD 100
> +#else
> +#define DRM_I915_TIMEOUT_GUC_LOAD CONFIG_DRM_I915_TIMEOUT_GUC_LOAD
> +#endif
> +
> +#ifndef CONFIG_DRM_I915_TIMEOUT_GUC_REQUEST
> +#define DRM_I915_TIMEOUT_GUC_REQUEST 10
> +#else
> +#define DRM_I915_TIMEOUT_GUC_REQUEST CONFIG_DRM_I915_TIMEOUT_GUC_REQUEST
> +#endif
> +
> +
>  struct i915_gpu_error {
>  	/* For hangcheck timer */
>  #define DRM_I915_HANGCHECK_PERIOD 1500 /* in ms */
> diff --git a/drivers/gpu/drm/i915/intel_guc_loader.c b/drivers/gpu/drm/i915/intel_guc_loader.c
> index 8b0ae7f..0d7abad 100644
> --- a/drivers/gpu/drm/i915/intel_guc_loader.c
> +++ b/drivers/gpu/drm/i915/intel_guc_loader.c
> @@ -235,7 +235,8 @@ static int guc_ucode_xfer_dma(struct drm_i915_private *dev_priv,
>  	 * (Higher levels of the driver will attempt to fall back to
>  	 * execlist mode if this happens.)
>  	 */
> -	ret = wait_for(guc_ucode_response(dev_priv, &status), 100);
> +	ret = wait_for(guc_ucode_response(dev_priv, &status),
> +			DRM_I915_TIMEOUT_GUC_LOAD);
>
>  	DRM_DEBUG_DRIVER("DMA status 0x%x, GuC status 0x%x\n",
>  			I915_READ(DMA_CTRL), status);
> diff --git a/drivers/gpu/drm/i915/intel_uc.c b/drivers/gpu/drm/i915/intel_uc.c
> index 27e072c..de34119 100644
> --- a/drivers/gpu/drm/i915/intel_uc.c
> +++ b/drivers/gpu/drm/i915/intel_uc.c
> @@ -501,7 +501,10 @@ int intel_guc_send_mmio(struct intel_guc *guc, const u32 *action, u32 len)
>  					   guc_send_reg(guc, 0),
>  					   INTEL_GUC_RECV_MASK,
>  					   INTEL_GUC_RECV_MASK,
> -					   10, 10, &status);
> +					   10,
> +					   DRM_I915_TIMEOUT_GUC_REQUEST,
> +					   &status);
> +
>  	if (status != INTEL_GUC_STATUS_SUCCESS) {
>  		/*
>  		 * Either the GuC explicitly returned an error (which
>


More information about the Intel-gfx mailing list