> -----Original Message----- > From: Intel-gfx <intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Ville > Syrjala > Sent: Tuesday, June 25, 2024 12:40 AM > To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx > Subject: [PATCH 08/14] drm/i915/dsb: Precompute DSB_CHICKEN > > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > 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ä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Animesh Manna <animesh.manna@xxxxxxxxx> > --- > 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