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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

References: https://bugs.freedesktop.org/show_bug.cgi?id=100572
Testcase: igt/gem_exec_nop/headless
Suggested-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>
Cc: Imre Deak <imre.deak@xxxxxxxxx>
---
 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)
-- 
2.14.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux