[PATCH 6/6] hacsk4rps 5

Andi Shyti andi.shyti at intel.com
Tue Oct 22 13:13:43 UTC 2019


---
 drivers/gpu/drm/i915/gem/i915_gem_pm.c |  1 +
 drivers/gpu/drm/i915/gt/intel_gt_pm.c  | 29 +++++++++++++++++++++++---
 drivers/gpu/drm/i915/gt/intel_gt_pm.h  |  1 +
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_pm.c b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
index 7987b54fb1f5..3b3b3229b100 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_pm.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_pm.c
@@ -58,6 +58,7 @@ static bool switch_to_kernel_context_sync(struct intel_gt *gt)
 
 bool i915_gem_load_power_context(struct drm_i915_private *i915)
 {
+	intel_gt_pm_enable(&i915->gt);
 	return switch_to_kernel_context_sync(&i915->gt);
 }
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.c b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
index 3998ee96b8d2..3fbd81a7cae8 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.c
@@ -70,6 +70,7 @@ static int __gt_park(struct intel_wakeref *wf)
 	intel_gt_park_requests(gt);
 
 	i915_pmu_gt_parked(i915);
+	intel_llc_disable(&gt->llc);
 	intel_rps_park(&gt->rps);
 
 	/* Everything switched off, flush any residual interrupt just in case */
@@ -148,6 +149,31 @@ void intel_gt_sanitize(struct intel_gt *gt, bool force)
 			engine->reset.finish(engine);
 }
 
+void intel_gt_pm_enable(struct intel_gt *gt)
+{
+	struct intel_engine_cs *engine;
+	enum intel_engine_id id;
+
+	/* Powersaving is controlled by the host when inside a VM */
+	if (intel_vgpu_active(gt->i915))
+		return;
+
+	if (is_mock_gt(gt))
+		return;
+
+	intel_gt_pm_get(gt);
+	intel_rps_enable(&gt->rps);
+	intel_llc_enable(&gt->llc);
+
+	for_each_engine(engine, gt->i915, id) {
+		intel_engine_pm_get(engine);
+		engine->serial++; /* force kernel context reload */
+		intel_engine_pm_put(engine);
+	}
+
+	intel_gt_pm_put(gt);
+}
+
 void intel_gt_pm_disable(struct intel_gt *gt)
 {
 	if (is_mock_gt(gt))
@@ -177,9 +203,6 @@ int intel_gt_resume(struct intel_gt *gt)
 	 */
 	intel_gt_pm_get(gt);
 
-	intel_rps_enable(&gt->rps);
-	intel_llc_enable(&gt->llc);
-
 	intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL);
 	intel_rc6_sanitize(&gt->rc6);
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm.h b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
index 997770d3a968..52afb23d2ab4 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt_pm.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt_pm.h
@@ -45,6 +45,7 @@ static inline int intel_gt_pm_wait_for_idle(struct intel_gt *gt)
 void intel_gt_pm_init_early(struct intel_gt *gt);
 void intel_gt_pm_init(struct intel_gt *gt);
 void intel_gt_pm_disable(struct intel_gt *gt);
+void intel_gt_pm_enable(struct intel_gt *gt);
 void intel_gt_pm_fini(struct intel_gt *gt);
 
 void intel_gt_sanitize(struct intel_gt *gt, bool force);
-- 
2.23.0



More information about the Intel-gfx-trybot mailing list