From: Gustavo Sousa <gustavo.sousa@intel.com>
To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: Luca Coelho <luciano.coelho@intel.com>,
Jani Nikula <jani.nikula@intel.com>
Subject: [PATCH v2 05/17] drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states
Date: Wed, 6 Nov 2024 18:50:31 -0300 [thread overview]
Message-ID: <20241106215231.103474-6-gustavo.sousa@intel.com> (raw)
In-Reply-To: <20241106215231.103474-1-gustavo.sousa@intel.com>
Bspec says that disabling dynamic DC states require taking the DMC
wakelock to cause an DC exit before writing to DC_STATE_EN. Implement
that.
In fact, testing on PTL revealed we end up failing to exit DC5/6 without
this step.
Bspec: 71583
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
.../drm/i915/display/intel_display_power_well.c | 10 +++++++---
drivers/gpu/drm/i915/display/intel_dmc_wl.c | 14 ++++++++++++--
drivers/gpu/drm/i915/display/intel_dmc_wl.h | 2 ++
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
index f0131dd853de..0c77b6252969 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
@@ -994,10 +994,14 @@ void gen9_disable_dc_states(struct intel_display *display)
return;
}
- gen9_set_dc_state(display, DC_STATE_DISABLE);
-
- if (!HAS_DISPLAY(display))
+ if (HAS_DISPLAY(display)) {
+ intel_dmc_wl_get_noreg(display);
+ gen9_set_dc_state(display, DC_STATE_DISABLE);
+ intel_dmc_wl_put_noreg(display);
+ } else {
+ gen9_set_dc_state(display, DC_STATE_DISABLE);
return;
+ }
intel_dmc_wl_disable(display);
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.c b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
index a0a060706305..e837c39491bb 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.c
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.c
@@ -199,7 +199,7 @@ void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (!intel_dmc_wl_check_range(reg))
+ if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg))
return;
spin_lock_irqsave(&wl->lock, flags);
@@ -251,7 +251,7 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
if (!__intel_dmc_wl_supported(display))
return;
- if (!intel_dmc_wl_check_range(reg))
+ if (i915_mmio_reg_valid(reg) && !intel_dmc_wl_check_range(reg))
return;
spin_lock_irqsave(&wl->lock, flags);
@@ -272,3 +272,13 @@ void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg)
out_unlock:
spin_unlock_irqrestore(&wl->lock, flags);
}
+
+void intel_dmc_wl_get_noreg(struct intel_display *display)
+{
+ intel_dmc_wl_get(display, INVALID_MMIO_REG);
+}
+
+void intel_dmc_wl_put_noreg(struct intel_display *display)
+{
+ intel_dmc_wl_put(display, INVALID_MMIO_REG);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dmc_wl.h b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
index adab51208d0a..9aa72a4bf153 100644
--- a/drivers/gpu/drm/i915/display/intel_dmc_wl.h
+++ b/drivers/gpu/drm/i915/display/intel_dmc_wl.h
@@ -27,5 +27,7 @@ void intel_dmc_wl_enable(struct intel_display *display);
void intel_dmc_wl_disable(struct intel_display *display);
void intel_dmc_wl_get(struct intel_display *display, i915_reg_t reg);
void intel_dmc_wl_put(struct intel_display *display, i915_reg_t reg);
+void intel_dmc_wl_get_noreg(struct intel_display *display);
+void intel_dmc_wl_put_noreg(struct intel_display *display);
#endif /* __INTEL_WAKELOCK_H__ */
--
2.47.0
next prev parent reply other threads:[~2024-11-06 21:52 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-06 21:50 [PATCH v2 00/17] drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD Gustavo Sousa
2024-11-06 21:50 ` [PATCH v2 01/17] drm/i915/dmc_wl: Use i915_mmio_reg_offset() instead of reg.reg Gustavo Sousa
2024-11-07 9:23 ` Jani Nikula
2024-11-07 10:39 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 02/17] drm/xe: Mimic i915 behavior for non-sleeping MMIO wait Gustavo Sousa
2024-11-07 10:40 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 03/17] drm/i915/dmc_wl: Use non-sleeping variant of " Gustavo Sousa
2024-11-07 10:42 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 04/17] drm/i915/dmc_wl: Check for non-zero refcount in release work Gustavo Sousa
2024-11-06 21:50 ` Gustavo Sousa [this message]
2024-11-07 10:43 ` [PATCH v2 05/17] drm/i915/dmc_wl: Get wakelock when disabling dynamic DC states Luca Coelho
2024-11-06 21:50 ` [PATCH v2 06/17] drm/i915/dmc_wl: Use sentinel item for range tables Gustavo Sousa
2024-11-06 21:50 ` [PATCH v2 07/17] drm/i915/dmc_wl: Extract intel_dmc_wl_reg_in_range() Gustavo Sousa
2024-11-07 10:44 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 08/17] drm/i915/dmc_wl: Rename lnl_wl_range to powered_off_ranges Gustavo Sousa
2024-11-07 10:46 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 09/17] drm/i915/dmc_wl: Track registers touched by the DMC Gustavo Sousa
2024-11-07 10:47 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 10/17] drm/i915/dmc_wl: Allow simpler syntax for single reg in range tables Gustavo Sousa
2024-11-07 10:48 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 11/17] drm/i915/dmc_wl: Deal with existing references when disabling Gustavo Sousa
2024-11-06 21:50 ` [PATCH v2 12/17] drm/i915/dmc_wl: Couple enable/disable with dynamic DC states Gustavo Sousa
2024-11-06 21:50 ` [PATCH v2 13/17] drm/i915/dmc_wl: Add and use HAS_DMC_WAKELOCK() Gustavo Sousa
2024-11-07 10:49 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 14/17] drm/i915/dmc_wl: Init only after we have runtime device info Gustavo Sousa
2024-11-07 10:50 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 15/17] drm/i915/dmc_wl: Use HAS_DMC() in HAS_DMC_WAKELOCK() Gustavo Sousa
2024-11-07 10:51 ` Luca Coelho
2024-11-06 21:50 ` [PATCH v2 16/17] drm/i915/dmc_wl: Sanitize enable_dmc_wl according to hardware support Gustavo Sousa
2024-11-06 21:50 ` [PATCH v2 17/17] drm/i915/xe3lpd: Use DMC wakelock by default Gustavo Sousa
2024-11-07 10:51 ` Luca Coelho
2024-11-06 22:24 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dmc_wl: Fixes and enablement for Xe3_LPD (rev2) Patchwork
2024-11-06 22:24 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-11-06 22:46 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-11-07 18:36 ` Gustavo Sousa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241106215231.103474-6-gustavo.sousa@intel.com \
--to=gustavo.sousa@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=luciano.coelho@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox