[Intel-gfx] [PATCH] drm/i915/perf: add missing delay for OA muxes configuration

Lionel Landwerlin lionel.g.landwerlin at intel.com
Wed Jul 10 11:00:59 UTC 2019


On 10/07/2019 13:55, Chris Wilson wrote:
> From: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
>
> This was dropped from the original patch series, we weren't sure
> whether it was needed at the time. More recent tests show it's
> definitely needed to have acurate performance data.
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Fixes: 19f81df2859eb1 ("drm/i915/perf: Add OA unit support for Gen 8+")
> Acked-by: Chris Wilson <chris at chris-wilson.co.uk>
> [ickle: combine duplicate code and comments]
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>


Thanks looks cleaner indeed.

Sorry for the mess.


-Lionel


> ---
>   drivers/gpu/drm/i915/i915_perf.c | 48 ++++++++++++++++++--------------
>   1 file changed, 27 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
> index 27842e7bcfed..78a8609ffecf 100644
> --- a/drivers/gpu/drm/i915/i915_perf.c
> +++ b/drivers/gpu/drm/i915/i915_perf.c
> @@ -1569,28 +1569,10 @@ static void config_oa_regs(struct drm_i915_private *dev_priv,
>   	}
>   }
>   
> -static int hsw_enable_metric_set(struct i915_perf_stream *stream)
> +static void delay_after_mux(void)
>   {
> -	struct drm_i915_private *dev_priv = stream->dev_priv;
> -	const struct i915_oa_config *oa_config = stream->oa_config;
> -
> -	/* PRM:
> -	 *
> -	 * OA unit is using “crclk” for its functionality. When trunk
> -	 * level clock gating takes place, OA clock would be gated,
> -	 * unable to count the events from non-render clock domain.
> -	 * Render clock gating must be disabled when OA is enabled to
> -	 * count the events from non-render domain. Unit level clock
> -	 * gating for RCS should also be disabled.
> -	 */
> -	I915_WRITE(GEN7_MISCCPCTL, (I915_READ(GEN7_MISCCPCTL) &
> -				    ~GEN7_DOP_CLOCK_GATE_ENABLE));
> -	I915_WRITE(GEN6_UCGCTL1, (I915_READ(GEN6_UCGCTL1) |
> -				  GEN6_CSUNIT_CLOCK_GATE_DISABLE));
> -
> -	config_oa_regs(dev_priv, oa_config->mux_regs, oa_config->mux_regs_len);
> -
> -	/* It apparently takes a fairly long time for a new MUX
> +	/*
> +	 * It apparently takes a fairly long time for a new MUX
>   	 * configuration to be be applied after these register writes.
>   	 * This delay duration was derived empirically based on the
>   	 * render_basic config but hopefully it covers the maximum
> @@ -1612,6 +1594,29 @@ static int hsw_enable_metric_set(struct i915_perf_stream *stream)
>   	 * a delay at this location would mitigate any invalid reports.
>   	 */
>   	usleep_range(15000, 20000);
> +}
> +
> +static int hsw_enable_metric_set(struct i915_perf_stream *stream)
> +{
> +	struct drm_i915_private *dev_priv = stream->dev_priv;
> +	const struct i915_oa_config *oa_config = stream->oa_config;
> +
> +	/* PRM:
> +	 *
> +	 * OA unit is using “crclk” for its functionality. When trunk
> +	 * level clock gating takes place, OA clock would be gated,
> +	 * unable to count the events from non-render clock domain.
> +	 * Render clock gating must be disabled when OA is enabled to
> +	 * count the events from non-render domain. Unit level clock
> +	 * gating for RCS should also be disabled.
> +	 */
> +	I915_WRITE(GEN7_MISCCPCTL, (I915_READ(GEN7_MISCCPCTL) &
> +				    ~GEN7_DOP_CLOCK_GATE_ENABLE));
> +	I915_WRITE(GEN6_UCGCTL1, (I915_READ(GEN6_UCGCTL1) |
> +				  GEN6_CSUNIT_CLOCK_GATE_DISABLE));
> +
> +	config_oa_regs(dev_priv, oa_config->mux_regs, oa_config->mux_regs_len);
> +	delay_after_mux();
>   
>   	config_oa_regs(dev_priv, oa_config->b_counter_regs,
>   		       oa_config->b_counter_regs_len);
> @@ -1837,6 +1842,7 @@ static int gen8_enable_metric_set(struct i915_perf_stream *stream)
>   		return ret;
>   
>   	config_oa_regs(dev_priv, oa_config->mux_regs, oa_config->mux_regs_len);
> +	delay_after_mux();
>   
>   	config_oa_regs(dev_priv, oa_config->b_counter_regs,
>   		       oa_config->b_counter_regs_len);




More information about the Intel-gfx mailing list