From: Ville Syrjälä <[email protected]>

Extract the code that alings the next instruction to the next
QW boundary into a small helper. I'll have some more uses for
this later.

Also explain why we don't have to zero out the extra DW.

Signed-off-by: Ville Syrjälä <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_dsb.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c 
b/drivers/gpu/drm/i915/display/intel_dsb.c
index 393ea07947b4..d6641cfe8061 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@ -228,13 +228,25 @@ static bool is_dsb_busy(struct intel_display *display, 
enum pipe pipe,
        return intel_de_read_fw(display, DSB_CTRL(pipe, dsb_id)) & 
DSB_STATUS_BUSY;
 }
 
-static void intel_dsb_emit(struct intel_dsb *dsb, u32 ldw, u32 udw)
+static void intel_dsb_ins_align(struct intel_dsb *dsb)
 {
-       if (!assert_dsb_has_room(dsb))
-               return;
-
-       /* Every instruction should be 8 byte aligned. */
+       /*
+        * Every instruction should be 8 byte aligned.
+        *
+        * The only way to get unaligned free_pos is via
+        * intel_dsb_reg_write_indexed() which already
+        * makes sure the next dword is zeroed, so no need
+        * to clear it here.
+        */
        dsb->free_pos = ALIGN(dsb->free_pos, 2);
+}
+
+static void intel_dsb_emit(struct intel_dsb *dsb, u32 ldw, u32 udw)
+{
+       if (!assert_dsb_has_room(dsb))
+               return;
+
+       intel_dsb_ins_align(dsb);
 
        dsb->ins_start_offset = dsb->free_pos;
        dsb->ins[0] = ldw;
-- 
2.49.0

Reply via email to