drm/i915/dsb: Introduce intel_dsb_wait_usec()

Add a function to emit the DSB "wait usecs" instruction.
This is just a usleep() for the DSB.

As a lower bound it seems pretty accurate, but the upper bound
seemed oddly relaxed (ie. sometimes I've seen waits that are
quite a bit longer than specified, not sure why).

Reviewed-by: Animesh Manna <animesh.manna@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240930170415.23841-7-ville.syrjala@linux.intel.com
This commit is contained in:
Ville Syrjälä
2024-09-30 20:04:08 +03:00
parent 63b41d207d
commit de968532fd
2 changed files with 7 additions and 0 deletions

View File

@@ -393,6 +393,12 @@ void intel_dsb_interrupt(struct intel_dsb *dsb)
DSB_OPCODE_INTERRUPT << DSB_OPCODE_SHIFT);
}
void intel_dsb_wait_usec(struct intel_dsb *dsb, int count)
{
intel_dsb_emit(dsb, count,
DSB_OPCODE_WAIT_USEC << DSB_OPCODE_SHIFT);
}
static void intel_dsb_emit_wait_dsl(struct intel_dsb *dsb,
u32 opcode, int lower, int upper)
{

View File

@@ -40,6 +40,7 @@ void intel_dsb_noop(struct intel_dsb *dsb, int count);
void intel_dsb_nonpost_start(struct intel_dsb *dsb);
void intel_dsb_nonpost_end(struct intel_dsb *dsb);
void intel_dsb_interrupt(struct intel_dsb *dsb);
void intel_dsb_wait_usec(struct intel_dsb *dsb, int count);
void intel_dsb_wait_scanline_in(struct intel_atomic_state *state,
struct intel_dsb *dsb,
int lower, int upper);