[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