From: Ville Syrjälä Date: Wed, 18 Jan 2023 16:30:33 +0000 (+0200) Subject: drm/i915/dsb: Allow vblank synchronized DSB execution X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=d5f84973acddbc6140cc82d74ae8f5b3e11c027f;p=linux.git drm/i915/dsb: Allow vblank synchronized DSB execution Allow the caller to ask for the DSB commands to execute during vblank. Signed-off-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20230118163040.29808-7-ville.syrjala@linux.intel.com Reviewed-by: Animesh Manna --- diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c index 2e7fbb2fe1e2a..55ac476972c2d 100644 --- a/drivers/gpu/drm/i915/display/intel_color.c +++ b/drivers/gpu/drm/i915/display/intel_color.c @@ -1258,7 +1258,7 @@ static void icl_load_luts(const struct intel_crtc_state *crtc_state) if (crtc_state->dsb) { intel_dsb_finish(crtc_state->dsb); - intel_dsb_commit(crtc_state->dsb); + intel_dsb_commit(crtc_state->dsb, false); intel_dsb_wait(crtc_state->dsb); } } diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c index 9e25b13459276..9fa75c72f7ad8 100644 --- a/drivers/gpu/drm/i915/display/intel_dsb.c +++ b/drivers/gpu/drm/i915/display/intel_dsb.c @@ -221,10 +221,11 @@ void intel_dsb_finish(struct intel_dsb *dsb) /** * intel_dsb_commit() - Trigger workload execution of DSB. * @dsb: DSB context + * @wait_for_vblank: wait for vblank before executing * * This function is used to do actual write to hardware using DSB. */ -void intel_dsb_commit(struct intel_dsb *dsb) +void intel_dsb_commit(struct intel_dsb *dsb, bool wait_for_vblank) { struct intel_crtc *crtc = dsb->crtc; struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); @@ -242,6 +243,7 @@ void intel_dsb_commit(struct intel_dsb *dsb) } intel_de_write(dev_priv, DSB_CTRL(pipe, dsb->id), + (wait_for_vblank ? DSB_WAIT_FOR_VBLANK : 0) | DSB_ENABLE); intel_de_write(dev_priv, DSB_HEAD(pipe, dsb->id), i915_ggtt_offset(dsb->vma)); diff --git a/drivers/gpu/drm/i915/display/intel_dsb.h b/drivers/gpu/drm/i915/display/intel_dsb.h index 6b22499e8a5d8..b8148b47022dc 100644 --- a/drivers/gpu/drm/i915/display/intel_dsb.h +++ b/drivers/gpu/drm/i915/display/intel_dsb.h @@ -19,7 +19,8 @@ void intel_dsb_finish(struct intel_dsb *dsb); void intel_dsb_cleanup(struct intel_dsb *dsb); void intel_dsb_reg_write(struct intel_dsb *dsb, i915_reg_t reg, u32 val); -void intel_dsb_commit(struct intel_dsb *dsb); +void intel_dsb_commit(struct intel_dsb *dsb, + bool wait_for_vblank); void intel_dsb_wait(struct intel_dsb *dsb); #endif