On Thu, 2026-06-11 at 10:49 -0400, Stephen J. Fuhry wrote:
> intel_dp_short_pulse() calls intel_psr_short_pulse() before the
> direct
> intel_alpm_get_error() check.  For PSR2-enabled panels,
> intel_psr_short_pulse()
> calls psr_alpm_check(), which reads and clears
> DP_ALPM_LOCK_TIMEOUT_ERROR via
> intel_alpm_get_error().  The subsequent direct call in
> intel_dp_short_pulse()
> then reads zero and skips calling intel_alpm_disable() and setting
> sink_alpm_error, leaving LOBF potentially enabled despite the ALPM
> error.
> 
> Fix this by having psr_alpm_check() also call intel_alpm_disable()
> and set
> sink_alpm_error when it handles an ALPM error.  This mirrors what the
> direct
> call in intel_dp_short_pulse() would have done, ensuring correct
> cleanup
> regardless of which code path consumes the error bit first.
> 
> intel_alpm_disable() is already called under psr->lock from
> intel_psr_disable_locked() for the Panel Replay path, so the lock
> ordering
> is established and safe.

This one we don't need. LOBF can't be enabled while PSR2 is enabled. If
ALPM error gets triggered when PSR2 is enabled -> PSR2 is disabled.
After that LOBF might be used. If there is a problem with LOBF then
ALPM error is supposed to get triggered again and then LOBF is
disabled.

BR,
Jouni Högander

> 
> Suggested-by: sashiko AI review <[email protected]>
> Fixes: 2063174c22da ("drm/i915/lobf: Check for sink error and disable
> LOBF")
> Signed-off-by: Stephen J. Fuhry <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 9382ad1e01d8..0701c8b94aa2 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -3869,6 +3869,8 @@ static void psr_alpm_check(struct intel_dp
> *intel_dp)
>       if (intel_alpm_get_error(intel_dp)) {
>               intel_psr_disable_locked(intel_dp);
>               psr->sink_not_reliable = true;
> +             intel_alpm_disable(intel_dp);
> +             intel_dp->alpm.sink_alpm_error = true;
>       }
>  }
> --
> 2.39.5

Reply via email to