[Intel-gfx] [PATCH] drm/i915: Disable DMC powersaving during GT operations

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Tue Sep 12 12:45:58 UTC 2017


On 12/09/2017 13:37, Chris Wilson wrote:
> The DMC typifies the worst example of firmware: it overrides system
> behaviour and is fubar. When no displays are active, the DMC appears to
> continually toggle its control register trying to change display power
> states. This in turn has the side effect of slowing down the GT by a few
> orders of magntidue, making headless operations intolerably slow.
> 
> This seems to affect all machines with dmc (so a byproduct of the dmc
> code itself being shared) and severely limits throughput on the CI bxt
> and triggers the watchdog for incomplete tests.
> 
> Altenative suggestion is to blacklist all DMC firmware until it is
> fixed.

I've sent this as https://patchwork.freedesktop.org/patch/154942/ some 
time ago. You asked for a long code comment back then. :)

Anyway, I don't mind we merge one of the two since it is taking an 
eternity to get this fixes in the firmware. So:

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko

> References: https://bugs.freedesktop.org/show_bug.cgi?id=100572
> Testcase: igt/gem_exec_nop/headless
> Suggested-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Cc: Imre Deak <imre.deak at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_gem.c         | 3 +++
>   drivers/gpu/drm/i915/i915_gem_request.c | 3 +++
>   2 files changed, 6 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index ba72a4bdaa78..e3236c1d44f0 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3331,6 +3331,9 @@ i915_gem_idle_work_handler(struct work_struct *work)
>   	intel_engines_mark_idle(dev_priv);
>   	i915_gem_timelines_mark_idle(dev_priv);
>   
> +	if (dev_priv->csr.dmc_payload)
> +		intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET);
> +
>   	GEM_BUG_ON(!dev_priv->gt.awake);
>   	dev_priv->gt.awake = false;
>   	rearm_hangcheck = false;
> diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
> index 813a3b546d6e..3c8ebdb5b0b4 100644
> --- a/drivers/gpu/drm/i915/i915_gem_request.c
> +++ b/drivers/gpu/drm/i915/i915_gem_request.c
> @@ -254,6 +254,9 @@ static void mark_busy(struct drm_i915_private *i915)
>   	intel_runtime_pm_get_noresume(i915);
>   	i915->gt.awake = true;
>   
> +	if (i915->csr.dmc_payload)
> +		intel_display_power_get(i915, POWER_DOMAIN_MODESET);
> +
>   	intel_enable_gt_powersave(i915);
>   	i915_update_gfx_val(i915);
>   	if (INTEL_GEN(i915) >= 6)
> 


More information about the Intel-gfx mailing list