On Thu, 2025-11-06 at 22:00 +0200, Jani Nikula wrote: > First, we can't assume pipe == crtc index. If a pipe is fused off in > between, it no longer holds. intel_crtc_for_pipe() is the only proper > way to get from a pipe to the corresponding crtc. > > Second, drivers aren't supposed to access or index drm->vblank[] > directly. There's drm_crtc_vblank_crtc() for this. > > Use both functions to fix the pipe to vblank conversion.
Reviewed-by: Jouni Högander <[email protected]> > > Fixes: f02658c46cf7 ("drm/i915/psr: Add mechanism to notify PSR of > pipe enable/disable") > Cc: Jouni Högander <[email protected]> > Cc: <[email protected]> # v6.16+ > Signed-off-by: Jani Nikula <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_psr.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c > b/drivers/gpu/drm/i915/display/intel_psr.c > index 05014ffe3ce1..c77a92ea7919 100644 > --- a/drivers/gpu/drm/i915/display/intel_psr.c > +++ b/drivers/gpu/drm/i915/display/intel_psr.c > @@ -932,7 +932,8 @@ static bool is_dc5_dc6_blocked(struct intel_dp > *intel_dp) > { > struct intel_display *display = to_intel_display(intel_dp); > u32 current_dc_state = > intel_display_power_get_current_dc_state(display); > - struct drm_vblank_crtc *vblank = &display->drm- > >vblank[intel_dp->psr.pipe]; > + struct intel_crtc *crtc = intel_crtc_for_pipe(display, > intel_dp->psr.pipe); > + struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(&crtc- > >base); > > return (current_dc_state != DC_STATE_EN_UPTO_DC5 && > current_dc_state != DC_STATE_EN_UPTO_DC6) ||
