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) ||

Reply via email to