Commit 4b284831 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

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: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230118163040.29808-4-ville.syrjala@linux.intel.com


Reviewed-by: default avatarAnimesh Manna <animesh.manna@intel.com>
parent 7206b517
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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)
+9 −2
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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