[PATCH v2] drm/i915/power: use intel_de_wait_for_clear() instead of wait_for()
Imre Deak
imre.deak at intel.com
Thu Jun 26 19:28:37 UTC 2025
On Thu, Jun 26, 2025 at 10:26:32PM +0300, Jani Nikula wrote:
> Prefer the register read specific wait function over i915 wait_for_us().
>
> The existing condition is quite complicated. Simplify by checking for
> requesters first, and determine timeout based on that. Refresh
> requesters in case of timeouts, should one have popped up during the
> wait. The downside is that this does not cut the wait short if
> requesters show up *during* the wait, but we're talking about 1 ms so
> shouldn't be an issue.
>
> v2: Refresh requesters only if there were none before (Imre)
>
> Cc: Imre Deak <imre.deak at intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
Reviewed-by: Imre Deak <imre.deak at intel.com>
> ---
> .../drm/i915/display/intel_display_power_well.c | 16 +++++++++++-----
> 1 file changed, 11 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 4a876fa815bd..48cac225a809 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
> @@ -320,8 +320,8 @@ static void hsw_wait_for_power_well_disable(struct intel_display *display,
> {
> const struct i915_power_well_regs *regs = power_well->desc->ops->regs;
> int pw_idx = i915_power_well_instance(power_well)->hsw.idx;
> - bool disabled;
> u32 reqs;
> + int ret;
>
> /*
> * Bspec doesn't require waiting for PWs to get disabled, but still do
> @@ -332,12 +332,18 @@ static void hsw_wait_for_power_well_disable(struct intel_display *display,
> * Skip the wait in case any of the request bits are set and print a
> * diagnostic message.
> */
> - wait_for((disabled = !(intel_de_read(display, regs->driver) &
> - HSW_PWR_WELL_CTL_STATE(pw_idx))) ||
> - (reqs = hsw_power_well_requesters(display, regs, pw_idx)), 1);
> - if (disabled)
> + reqs = hsw_power_well_requesters(display, regs, pw_idx);
> +
> + ret = intel_de_wait_for_clear(display, regs->driver,
> + HSW_PWR_WELL_CTL_STATE(pw_idx),
> + reqs ? 0 : 1);
> + if (!ret)
> return;
>
> + /* Refresh requesters in case they popped up during the wait. */
> + if (!reqs)
> + reqs = hsw_power_well_requesters(display, regs, pw_idx);
> +
> drm_dbg_kms(display->drm,
> "%s forced on (bios:%d driver:%d kvmr:%d debug:%d)\n",
> intel_power_well_name(power_well),
> --
> 2.39.5
>
More information about the Intel-xe
mailing list