Subject: linux-next: manual merge of the drm-intel tree with the drm-intel-fixes tree

From: Mark Brown <[email-masked]>
Date: Tue, 3 Dec 2024 20:05:29 +0000

Hi all,

Today's linux-next merge of the drm-intel tree got a conflict in:

  drivers/gpu/drm/i915/display/intel_dsb.c

between commit:

  ebd1e5faa72af ("drm/i915/dsb: Don't use indexed register writes needlessly")

from the drm-intel-fixes tree and commit:

  ecba559a88ab8 ("drm/i915/dsb: Don't use indexed register writes needlessly")

from the drm-intel tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

diff --cc drivers/gpu/drm/i915/display/intel_dsb.c
index 4d3785f5cb525,e6f8fc743fb40..0000000000000
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@@ -304,55 -295,34 +295,43 @@@ void intel_dsb_reg_write_indexed(struc
  	 * we are writing odd no of dwords, Zeros will be added in the end for
  	 * padding.
  	 */
- 	if (!intel_dsb_prev_ins_is_mmio_write(dsb, reg) &&
- 	    !intel_dsb_prev_ins_is_indexed_write(dsb, reg)) {
- 		intel_dsb_emit(dsb, val,
- 			       (DSB_OPCODE_MMIO_WRITE << DSB_OPCODE_SHIFT) |
- 			       (DSB_BYTE_EN << DSB_BYTE_EN_SHIFT) |
+ 	if (!intel_dsb_prev_ins_is_indexed_write(dsb, reg))
+ 		intel_dsb_emit(dsb, 0, /* count */
+ 			       (DSB_OPCODE_INDEXED_WRITE << DSB_OPCODE_SHIFT) |
  			       i915_mmio_reg_offset(reg));
- 	} else {
- 		if (!assert_dsb_has_room(dsb))
- 			return;
  
- 		/* convert to indexed write? */
- 		if (intel_dsb_prev_ins_is_mmio_write(dsb, reg)) {
- 			u32 prev_val = dsb->ins[0];
+ 	if (!assert_dsb_has_room(dsb))
+ 		return;
  
- 			dsb->ins[0] = 1; /* count */
- 			dsb->ins[1] = (DSB_OPCODE_INDEXED_WRITE << DSB_OPCODE_SHIFT) |
- 				i915_mmio_reg_offset(reg);
+ 	/* Update the count */
+ 	dsb->ins[0]++;
+ 	intel_dsb_buffer_write(&dsb->dsb_buf, dsb->ins_start_offset + 0,
+ 			       dsb->ins[0]);
  
- 			intel_dsb_buffer_write(&dsb->dsb_buf, dsb->ins_start_offset + 0,
- 					       dsb->ins[0]);
- 			intel_dsb_buffer_write(&dsb->dsb_buf, dsb->ins_start_offset + 1,
- 					       dsb->ins[1]);
- 			intel_dsb_buffer_write(&dsb->dsb_buf, dsb->ins_start_offset + 2,
- 					       prev_val);
+ 	intel_dsb_buffer_write(&dsb->dsb_buf, dsb->free_pos++, val);
+ 	/* if number of data words is odd, then the last dword should be 0.*/
+ 	if (dsb->free_pos & 0x1)
+ 		intel_dsb_buffer_write(&dsb->dsb_buf, dsb->free_pos, 0);
+ }
  
- 			dsb->free_pos++;
- 		}
- 
- 		intel_dsb_buffer_write(&dsb->dsb_buf, dsb->free_pos++, val);
- 		/* Update the count */
- 		dsb->ins[0]++;
- 		intel_dsb_buffer_write(&dsb->dsb_buf, dsb->ins_start_offset + 0,
- 				       dsb->ins[0]);
- 
- 		/* if number of data words is odd, then the last dword should be 0.*/
- 		if (dsb->free_pos & 0x1)
- 			intel_dsb_buffer_write(&dsb->dsb_buf, dsb->free_pos, 0);
- 	}
+ void intel_dsb_reg_write(struct intel_dsb *dsb,
+ 			 i915_reg_t reg, u32 val)
+ {
+ 	intel_dsb_emit(dsb, val,
+ 		       (DSB_OPCODE_MMIO_WRITE << DSB_OPCODE_SHIFT) |
+ 		       (DSB_BYTE_EN << DSB_BYTE_EN_SHIFT) |
+ 		       i915_mmio_reg_offset(reg));
  }
  
 +void intel_dsb_reg_write(struct intel_dsb *dsb,
 +			 i915_reg_t reg, u32 val)
 +{
 +	intel_dsb_emit(dsb, val,
 +		       (DSB_OPCODE_MMIO_WRITE << DSB_OPCODE_SHIFT) |
 +		       (DSB_BYTE_EN << DSB_BYTE_EN_SHIFT) |
 +		       i915_mmio_reg_offset(reg));
 +}
 +
  static u32 intel_dsb_mask_to_byte_en(u32 mask)
  {
  	return (!!(mask & 0xff000000) << 3 |