mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
drm/i915/dsb: Split intel_dsb_wait() from intel_dsb_commit()
Starting the DSB execution vs. waiting for it stop are two totally different things. Split intel_dsb_wait() from intel_dsb_commit() so that we can eventually allow the DSB to execute asynchronously. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230118163040.29808-4-ville.syrjala@linux.intel.com Reviewed-by: Animesh Manna <animesh.manna@intel.com>
This commit is contained in:
parent
7206b51766
commit
4b284831c6
|
|
@ -1256,8 +1256,10 @@ static void icl_load_luts(const struct intel_crtc_state *crtc_state)
|
|||
break;
|
||||
}
|
||||
|
||||
if (crtc_state->dsb)
|
||||
if (crtc_state->dsb) {
|
||||
intel_dsb_commit(crtc_state->dsb);
|
||||
intel_dsb_wait(crtc_state->dsb);
|
||||
}
|
||||
}
|
||||
|
||||
static u32 chv_cgm_degamma_ldw(const struct drm_color_lut *color)
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ void intel_dsb_commit(struct intel_dsb *dsb)
|
|||
if (is_dsb_busy(dev_priv, pipe, dsb->id)) {
|
||||
drm_err(&dev_priv->drm, "[CRTC:%d:%s] DSB %d is busy\n",
|
||||
crtc->base.base.id, crtc->base.name, dsb->id);
|
||||
goto reset;
|
||||
return;
|
||||
}
|
||||
|
||||
intel_de_write(dev_priv, DSB_CTRL(pipe, dsb->id),
|
||||
|
|
@ -249,13 +249,20 @@ void intel_dsb_commit(struct intel_dsb *dsb)
|
|||
"DSB execution started - head 0x%x, tail 0x%x\n",
|
||||
i915_ggtt_offset(dsb->vma),
|
||||
i915_ggtt_offset(dsb->vma) + tail);
|
||||
}
|
||||
|
||||
void intel_dsb_wait(struct intel_dsb *dsb)
|
||||
{
|
||||
struct intel_crtc *crtc = dsb->crtc;
|
||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||
enum pipe pipe = crtc->pipe;
|
||||
|
||||
if (wait_for(!is_dsb_busy(dev_priv, pipe, dsb->id), 1))
|
||||
drm_err(&dev_priv->drm,
|
||||
"[CRTC:%d:%s] DSB %d timed out waiting for idle\n",
|
||||
crtc->base.base.id, crtc->base.name, dsb->id);
|
||||
|
||||
reset:
|
||||
/* Attempt to reset it */
|
||||
dsb->free_pos = 0;
|
||||
dsb->ins_start_offset = 0;
|
||||
intel_de_write(dev_priv, DSB_CTRL(pipe, dsb->id), 0);
|
||||
|
|
|
|||
|
|
@ -19,5 +19,6 @@ 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_wait(struct intel_dsb *dsb);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user