> -----Original Message-----
> From: Intel-gfx <[email protected]> On Behalf Of Ville
> Syrjala
> Sent: Tuesday, June 25, 2024 12:40 AM
> To: [email protected]
> Subject: [PATCH 08/14] drm/i915/dsb: Precompute DSB_CHICKEN
> 
> From: Ville Syrjälä <[email protected]>
> 
> Adjust the code that determines the correct DSB_CHICKEN value to be usable
> for use within DSB commands themselves. Ie.
> precompute it based on our knowledge of what the hardware state (VRR vs.
> not mainly) will be at the time of the commit.
> 
> Signed-off-by: Ville Syrjälä <[email protected]>

Reviewed-by: Animesh Manna <[email protected]>
 
> ---
>  drivers/gpu/drm/i915/display/intel_dsb.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c
> b/drivers/gpu/drm/i915/display/intel_dsb.c
> index b362a3050c7f..81937908c798 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsb.c
> +++ b/drivers/gpu/drm/i915/display/intel_dsb.c
> @@ -43,6 +43,7 @@ struct intel_dsb {
>        */
>       unsigned int ins_start_offset;
> 
> +     u32 chicken;
>       int hw_dewake_scanline;
>  };
> 
> @@ -149,9 +150,10 @@ static int dsb_scanline_to_hw(struct
> intel_atomic_state *state,
>       return (scanline + vtotal - intel_crtc_scanline_offset(crtc_state)) %
> vtotal;  }
> 
> -static u32 dsb_chicken(struct intel_crtc *crtc)
> +static u32 dsb_chicken(struct intel_atomic_state *state,
> +                    struct intel_crtc *crtc)
>  {
> -     if (crtc->mode_flags & I915_MODE_FLAG_VRR)
> +     if (pre_commit_is_vrr_active(state, crtc))
>               return DSB_SKIP_WAITS_EN |
>                       DSB_CTRL_WAIT_SAFE_WINDOW |
>                       DSB_CTRL_NO_WAIT_VBLANK |
> @@ -449,7 +451,7 @@ static void _intel_dsb_commit(struct intel_dsb *dsb,
> u32 ctrl,
>                         ctrl | DSB_ENABLE);
> 
>       intel_de_write_fw(display, DSB_CHICKEN(pipe, dsb->id),
> -                       dsb_chicken(crtc));
> +                       dsb->chicken);
> 
>       intel_de_write_fw(display, DSB_INTERRUPT(pipe, dsb->id),
>                         dsb_error_int_status(display) |
> DSB_PROG_INT_STATUS | @@ -580,6 +582,7 @@ struct intel_dsb
> *intel_dsb_prepare(struct intel_atomic_state *state,
>       dsb->free_pos = 0;
>       dsb->ins_start_offset = 0;
> 
> +     dsb->chicken = dsb_chicken(state, crtc);
>       dsb->hw_dewake_scanline =
>               dsb_scanline_to_hw(state, crtc, dsb_dewake_scanline(state,
> crtc));
> 
> --
> 2.44.2

Reply via email to