Re: [PATCH 07/13] drm/i915/dsb: Improve the indexed reg write checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Ville
> Syrjala
> Sent: Friday, December 16, 2022 6:08 AM
> To: intel-gfx@xxxxxxxxxxxxxxxxxxxxx
> Subject:  [PATCH 07/13] drm/i915/dsb: Improve the indexed reg
> write checks
> 
> From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> 
> Currently intel_dsb_indexed_reg_write() just assumes the previus

Typo - previous instruction.

> instructions is also an indexed register write, and thus only checks the
> register offset. Make the check more robust by actually checking the
> instruction opcode as well.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>

With the above minor fix, LGTM.
Reviewed-by: Animesh Manna <animesh.manna@xxxxxxxxx>

> ---
>  drivers/gpu/drm/i915/display/intel_dsb.c | 21 ++++++++++++++++++---
>  1 file changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c
> b/drivers/gpu/drm/i915/display/intel_dsb.c
> index fb20d9ee84a4..fcc3f49c5445 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsb.c
> +++ b/drivers/gpu/drm/i915/display/intel_dsb.c
> @@ -102,6 +102,23 @@ static void intel_dsb_emit(struct intel_dsb *dsb, u32
> ldw, u32 udw)
>  	buf[dsb->free_pos++] = udw;
>  }
> 
> +static bool intel_dsb_prev_ins_is_write(struct intel_dsb *dsb,
> +					u32 opcode, i915_reg_t reg)
> +{
> +	const u32 *buf = dsb->cmd_buf;
> +	u32 prev_opcode, prev_reg;
> +
> +	prev_opcode = buf[dsb->ins_start_offset + 1] >>
> DSB_OPCODE_SHIFT;
> +	prev_reg = buf[dsb->ins_start_offset + 1] & DSB_REG_VALUE_MASK;
> +
> +	return prev_opcode == opcode && prev_reg ==
> i915_mmio_reg_offset(reg);
> +}
> +
> +static bool intel_dsb_prev_ins_is_indexed_write(struct intel_dsb *dsb,
> +i915_reg_t reg) {
> +	return intel_dsb_prev_ins_is_write(dsb,
> DSB_OPCODE_INDEXED_WRITE,
> +reg); }
> +
>  /**
>   * intel_dsb_indexed_reg_write() -Write to the DSB context for auto
>   * increment register.
> @@ -119,7 +136,6 @@ void intel_dsb_indexed_reg_write(struct intel_dsb
> *dsb,
>  				 i915_reg_t reg, u32 val)
>  {
>  	u32 *buf = dsb->cmd_buf;
> -	u32 reg_val;
> 
>  	if (!assert_dsb_has_room(dsb))
>  		return;
> @@ -140,8 +156,7 @@ void intel_dsb_indexed_reg_write(struct intel_dsb
> *dsb,
>  	 * we are writing odd no of dwords, Zeros will be added in the end
> for
>  	 * padding.
>  	 */
> -	reg_val = buf[dsb->ins_start_offset + 1] & DSB_REG_VALUE_MASK;
> -	if (reg_val != i915_mmio_reg_offset(reg)) {
> +	if (!intel_dsb_prev_ins_is_indexed_write(dsb, reg)) {
>  		/* Every instruction should be 8 byte aligned. */
>  		dsb->free_pos = ALIGN(dsb->free_pos, 2);
> 
> --
> 2.37.4





[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux