Add wakeref tracking for the display power domain reference taken to
keep the display power well functionality disabled.

Cc: Chris Wilson <ch...@chris-wilson.co.uk>
Signed-off-by: Imre Deak <imre.d...@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_power.c | 13 +++++++++----
 drivers/gpu/drm/i915/display/intel_display_power.h |  1 +
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c 
b/drivers/gpu/drm/i915/display/intel_display_power.c
index 75e805d11dd9..906211a8c9d0 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power.c
@@ -5663,8 +5663,11 @@ void intel_power_domains_init_hw(struct drm_i915_private 
*i915, bool resume)
                intel_display_power_get(i915, POWER_DOMAIN_INIT);
 
        /* Disable power support if the user asked so. */
-       if (!i915->params.disable_power_well)
-               intel_display_power_get(i915, POWER_DOMAIN_INIT);
+       if (!i915->params.disable_power_well) {
+               drm_WARN_ON(&i915->drm, power_domains->disable_wakeref);
+               i915->power_domains.disable_wakeref = 
intel_display_power_get(i915,
+                                                                             
POWER_DOMAIN_INIT);
+       }
        intel_power_domains_sync_hw(i915);
 
        power_domains->initializing = false;
@@ -5688,7 +5691,8 @@ void intel_power_domains_driver_remove(struct 
drm_i915_private *i915)
 
        /* Remove the refcount we took to keep power well support disabled. */
        if (!i915->params.disable_power_well)
-               intel_display_power_put_unchecked(i915, POWER_DOMAIN_INIT);
+               intel_display_power_put(i915, POWER_DOMAIN_INIT,
+                                       i915->power_domains.disable_wakeref);
 
        intel_display_power_flush_work_sync(i915);
 
@@ -5777,7 +5781,8 @@ void intel_power_domains_suspend(struct drm_i915_private 
*i915,
         * power wells if power domains must be deinitialized for suspend.
         */
        if (!i915->params.disable_power_well)
-               intel_display_power_put_unchecked(i915, POWER_DOMAIN_INIT);
+               intel_display_power_put(i915, POWER_DOMAIN_INIT,
+                                       
fetch_and_zero(&i915->power_domains.disable_wakeref));
 
        intel_display_power_flush_work(i915);
        intel_power_domains_verify_state(i915);
diff --git a/drivers/gpu/drm/i915/display/intel_display_power.h 
b/drivers/gpu/drm/i915/display/intel_display_power.h
index 05e924bd070a..70c2806d8f63 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.h
+++ b/drivers/gpu/drm/i915/display/intel_display_power.h
@@ -213,6 +213,7 @@ struct i915_power_domains {
        int power_well_count;
 
        intel_wakeref_t init_wakeref;
+       intel_wakeref_t disable_wakeref;
 
        struct mutex lock;
        int domain_use_count[POWER_DOMAIN_NUM];
-- 
2.25.1

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

Reply via email to