[Intel-gfx] [PATCH 09/14] drm/i915: Clean up vlv/chv sprite plane registers

Souza, Jose jose.souza at intel.com
Fri Jan 14 16:34:14 UTC 2022


On Wed, 2021-12-01 at 17:25 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Use REG_BIT() & co. to polish the vlv/chv sprite plane registers.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_sprite.c |   9 +-
>  drivers/gpu/drm/i915/i915_reg.h             | 103 ++++++++++++--------
>  2 files changed, 70 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c
> index 70083d04a9fd..eb9ce96c030f 100644
> --- a/drivers/gpu/drm/i915/display/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/display/intel_sprite.c
> @@ -313,7 +313,7 @@ static u32 vlv_sprite_ctl_crtc(const struct intel_crtc_state *crtc_state)
>  	u32 sprctl = 0;
>  
>  	if (crtc_state->gamma_enable)
> -		sprctl |= SP_GAMMA_ENABLE;
> +		sprctl |= SP_PIPE_GAMMA_ENABLE;
>  
>  	return sprctl;
>  }
> @@ -436,9 +436,9 @@ vlv_sprite_update_noarm(struct intel_plane *plane,
>  	intel_de_write_fw(dev_priv, SPSTRIDE(pipe, plane_id),
>  			  plane_state->view.color_plane[0].mapping_stride);
>  	intel_de_write_fw(dev_priv, SPPOS(pipe, plane_id),
> -			  (crtc_y << 16) | crtc_x);
> +			  SP_POS_Y(crtc_y) | SP_POS_X(crtc_x));
>  	intel_de_write_fw(dev_priv, SPSIZE(pipe, plane_id),
> -			  ((crtc_h - 1) << 16) | (crtc_w - 1));
> +			  SP_HEIGHT(crtc_h - 1) | SP_WIDTH(crtc_w - 1));
>  
>  	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
>  }
> @@ -479,7 +479,8 @@ vlv_sprite_update_arm(struct intel_plane *plane,
>  	intel_de_write_fw(dev_priv, SPCONSTALPHA(pipe, plane_id), 0);
>  
>  	intel_de_write_fw(dev_priv, SPLINOFF(pipe, plane_id), linear_offset);
> -	intel_de_write_fw(dev_priv, SPTILEOFF(pipe, plane_id), (y << 16) | x);
> +	intel_de_write_fw(dev_priv, SPTILEOFF(pipe, plane_id),
> +			  SP_OFFSET_Y(y) | SP_OFFSET_X(x));
>  
>  	/*
>  	 * The control register self-arms if the plane was previously
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 0bd47a929f5d..4d61e7f2ee7c 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -7146,48 +7146,67 @@ enum {
>  #define SPRSURFLIVE(pipe) _MMIO_PIPE(pipe, _SPRA_SURFLIVE, _SPRB_SURFLIVE)
>  
>  #define _SPACNTR		(VLV_DISPLAY_BASE + 0x72180)
> -#define   SP_ENABLE			(1 << 31)
> -#define   SP_GAMMA_ENABLE		(1 << 30)
> -#define   SP_PIXFORMAT_MASK		(0xf << 26)
> -#define   SP_FORMAT_YUV422		(0x0 << 26)
> -#define   SP_FORMAT_8BPP		(0x2 << 26)
> -#define   SP_FORMAT_BGR565		(0x5 << 26)
> -#define   SP_FORMAT_BGRX8888		(0x6 << 26)
> -#define   SP_FORMAT_BGRA8888		(0x7 << 26)
> -#define   SP_FORMAT_RGBX1010102		(0x8 << 26)
> -#define   SP_FORMAT_RGBA1010102		(0x9 << 26)
> -#define   SP_FORMAT_BGRX1010102		(0xa << 26) /* CHV pipe B */
> -#define   SP_FORMAT_BGRA1010102		(0xb << 26) /* CHV pipe B */
> -#define   SP_FORMAT_RGBX8888		(0xe << 26)
> -#define   SP_FORMAT_RGBA8888		(0xf << 26)
> -#define   SP_ALPHA_PREMULTIPLY		(1 << 23) /* CHV pipe B */
> -#define   SP_SOURCE_KEY			(1 << 22)
> -#define   SP_YUV_FORMAT_BT709		(1 << 18)
> -#define   SP_YUV_ORDER_MASK		(3 << 16)
> -#define   SP_YUV_ORDER_YUYV		(0 << 16)
> -#define   SP_YUV_ORDER_UYVY		(1 << 16)
> -#define   SP_YUV_ORDER_YVYU		(2 << 16)
> -#define   SP_YUV_ORDER_VYUY		(3 << 16)
> -#define   SP_ROTATE_180			(1 << 15)
> -#define   SP_TILED			(1 << 10)
> -#define   SP_MIRROR			(1 << 8) /* CHV pipe B */
> +#define   SP_ENABLE			REG_BIT(31)
> +#define   SP_PIPE_GAMMA_ENABLE		REG_BIT(30)
> +#define   SP_FORMAT_MASK		REG_GENMASK(29, 26)
> +#define   SP_FORMAT_YUV422		REG_FIELD_PREP(SP_FORMAT_MASK, 0)
> +#define   SP_FORMAT_8BPP		REG_FIELD_PREP(SP_FORMAT_MASK, 2)
> +#define   SP_FORMAT_BGR565		REG_FIELD_PREP(SP_FORMAT_MASK, 5)
> +#define   SP_FORMAT_BGRX8888		REG_FIELD_PREP(SP_FORMAT_MASK, 6)
> +#define   SP_FORMAT_BGRA8888		REG_FIELD_PREP(SP_FORMAT_MASK, 7)
> +#define   SP_FORMAT_RGBX1010102		REG_FIELD_PREP(SP_FORMAT_MASK, 8)
> +#define   SP_FORMAT_RGBA1010102		REG_FIELD_PREP(SP_FORMAT_MASK, 9)
> +#define   SP_FORMAT_BGRX1010102		REG_FIELD_PREP(SP_FORMAT_MASK, 10) /* CHV pipe B */
> +#define   SP_FORMAT_BGRA1010102		REG_FIELD_PREP(SP_FORMAT_MASK, 11) /* CHV pipe B */
> +#define   SP_FORMAT_RGBX8888		REG_FIELD_PREP(SP_FORMAT_MASK, 14)
> +#define   SP_FORMAT_RGBA8888		REG_FIELD_PREP(SP_FORMAT_MASK, 15)
> +#define   SP_ALPHA_PREMULTIPLY		REG_BIT(23) /* CHV pipe B */
> +#define   SP_SOURCE_KEY			REG_BIT(22)
> +#define   SP_YUV_FORMAT_BT709		REG_BIT(18)
> +#define   SP_YUV_ORDER_MASK		REG_GENMASK(17, 16)
> +#define   SP_YUV_ORDER_YUYV		REG_FIELD_PREP(SP_YUV_ORDER_MASK, 0)
> +#define   SP_YUV_ORDER_UYVY		REG_FIELD_PREP(SP_YUV_ORDER_MASK, 1)
> +#define   SP_YUV_ORDER_YVYU		REG_FIELD_PREP(SP_YUV_ORDER_MASK, 2)
> +#define   SP_YUV_ORDER_VYUY		REG_FIELD_PREP(SP_YUV_ORDER_MASK, 3)
> +#define   SP_ROTATE_180			REG_BIT(15)
> +#define   SP_TILED			REG_BIT(10)
> +#define   SP_MIRROR			REG_BIT(8) /* CHV pipe B */
>  #define _SPALINOFF		(VLV_DISPLAY_BASE + 0x72184)
>  #define _SPASTRIDE		(VLV_DISPLAY_BASE + 0x72188)
>  #define _SPAPOS			(VLV_DISPLAY_BASE + 0x7218c)
> +#define   SP_POS_Y_MASK			REG_GENMASK(31, 16)
> +#define   SP_POS_Y(y)			REG_FIELD_PREP(SP_POS_Y_MASK, (y))
> +#define   SP_POS_X_MASK			REG_GENMASK(15, 0)
> +#define   SP_POS_X(x)			REG_FIELD_PREP(SP_POS_X_MASK, (x))
>  #define _SPASIZE		(VLV_DISPLAY_BASE + 0x72190)
> +#define   SP_HEIGHT_MASK		REG_GENMASK(31, 16)
> +#define   SP_HEIGHT(h)			REG_FIELD_PREP(SP_HEIGHT_MASK, (h))
> +#define   SP_WIDTH_MASK			REG_GENMASK(15, 0)
> +#define   SP_WIDTH(w)			REG_FIELD_PREP(SP_WIDTH_MASK, (w))
>  #define _SPAKEYMINVAL		(VLV_DISPLAY_BASE + 0x72194)
>  #define _SPAKEYMSK		(VLV_DISPLAY_BASE + 0x72198)
>  #define _SPASURF		(VLV_DISPLAY_BASE + 0x7219c)
> +#define   SP_ADDR_MASK			REG_GENMASK(31, 12)
>  #define _SPAKEYMAXVAL		(VLV_DISPLAY_BASE + 0x721a0)
>  #define _SPATILEOFF		(VLV_DISPLAY_BASE + 0x721a4)
> +#define   SP_OFFSET_Y_MASK		REG_GENMASK(31, 16)
> +#define   SP_OFFSET_Y(y)		REG_FIELD_PREP(SP_OFFSET_Y_MASK, (y))
> +#define   SP_OFFSET_X_MASK		REG_GENMASK(15, 0)
> +#define   SP_OFFSET_X(x)		REG_FIELD_PREP(SP_OFFSET_X_MASK, (x))
>  #define _SPACONSTALPHA		(VLV_DISPLAY_BASE + 0x721a8)
> -#define   SP_CONST_ALPHA_ENABLE		(1 << 31)
> +#define   SP_CONST_ALPHA_ENABLE		REG_BIT(31)
> +#define   SP_CONST_ALPHA_MASK		REG_GENMASK(7, 0)
> +#define   SP_CONST_ALPHA(alpha)		REG_FIELD_PREP(SP_CONST_ALPHA_MASK, (alpha))
>  #define _SPACLRC0		(VLV_DISPLAY_BASE + 0x721d0)
> -#define   SP_CONTRAST(x)		((x) << 18) /* u3.6 */
> -#define   SP_BRIGHTNESS(x)		((x) & 0xff) /* s8 */
> +#define   SP_CONTRAST_MASK		REG_GENMASK(26, 18)
> +#define   SP_CONTRAST(x)		REG_FIELD_PREP(SP_CONTRAST_MASK, (x)) /* u3.6 */
> +#define   SP_BRIGHTNESS_MASK		REG_GENMASK(7, 0)
> +#define   SP_BRIGHTNESS(x)		REG_FIELD_PREP(SP_BRIGHTNESS_MASK, (x)) /* s8 */
>  #define _SPACLRC1		(VLV_DISPLAY_BASE + 0x721d4)
> -#define   SP_SH_SIN(x)			(((x) & 0x7ff) << 16) /* s4.7 */
> -#define   SP_SH_COS(x)			(x) /* u3.7 */
> +#define   SP_SH_SIN_MASK		REG_GENMASK(26, 16)
> +#define   SP_SH_SIN(x)			REG_FIELD_PREP(SP_SH_SIN_MASK, (x)) /* s4.7 */
> +#define   SP_SH_COS_MASK		REG_GENMASK(9, 0)
> +#define   SP_SH_COS(x)			REG_FIELD_PREP(SP_SH_COS_MASK, (x)) /* u3.7 */
>  #define _SPAGAMC		(VLV_DISPLAY_BASE + 0x721e0)
>  
>  #define _SPBCNTR		(VLV_DISPLAY_BASE + 0x72280)
> @@ -7238,28 +7257,36 @@ enum {
>  #define SPCSCYGOFF(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d900)
>  #define SPCSCCBOFF(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d904)
>  #define SPCSCCROFF(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d908)
> -#define  SPCSC_OOFF(x)		(((x) & 0x7ff) << 16) /* s11 */
> -#define  SPCSC_IOFF(x)		(((x) & 0x7ff) << 0) /* s11 */
> +#define  SPCSC_OOFF_MASK	REG_GENMASK(26, 16)
> +#define  SPCSC_OOFF(x)		REG_FIELD_PREP(SPCSC_OOFF_MASK, (x) & 0x7ff) /* s11 */

With REG_FIELD_PREP you don't need to do (x) & 0x7ff.

With all of similar cases fixed:

Reviewed-by: José Roberto de Souza <jose.souza at intel.com>

> +#define  SPCSC_IOFF_MASK	REG_GENMASK(10, 0)
> +#define  SPCSC_IOFF(x)		REG_FIELD_PREP(SPCSC_IOFF_MASK, (x) & 0x7ff) /* s11 */
>  
>  #define SPCSCC01(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d90c)
>  #define SPCSCC23(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d910)
>  #define SPCSCC45(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d914)
>  #define SPCSCC67(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d918)
>  #define SPCSCC8(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d91c)
> -#define  SPCSC_C1(x)		(((x) & 0x7fff) << 16) /* s3.12 */
> -#define  SPCSC_C0(x)		(((x) & 0x7fff) << 0) /* s3.12 */
> +#define  SPCSC_C1_MASK		REG_GENMASK(30, 16)
> +#define  SPCSC_C1(x)		REG_FIELD_PREP(SPCSC_C1_MASK, (x) & 0x7fff) /* s3.12 */
> +#define  SPCSC_C0_MASK		REG_GENMASK(14, 0)
> +#define  SPCSC_C0(x)		REG_FIELD_PREP(SPCSC_C0_MASK, (x) & 0x7fff) /* s3.12 */
>  
>  #define SPCSCYGICLAMP(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d920)
>  #define SPCSCCBICLAMP(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d924)
>  #define SPCSCCRICLAMP(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d928)
> -#define  SPCSC_IMAX(x)		(((x) & 0x7ff) << 16) /* s11 */
> -#define  SPCSC_IMIN(x)		(((x) & 0x7ff) << 0) /* s11 */
> +#define  SPCSC_IMAX_MASK	REG_GENMASK(26, 16)
> +#define  SPCSC_IMAX(x)		REG_FIELD_PREP(SPCSC_IMAX_MASK, (x) & 0x7ff) /* s11 */
> +#define  SPCSC_IMIN_MASK	REG_GENMASK(10, 0)
> +#define  SPCSC_IMIN(x)		REG_FIELD_PREP(SPCSC_IMIN_MASK, (x) & 0x7ff) /* s11 */
>  
>  #define SPCSCYGOCLAMP(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d92c)
>  #define SPCSCCBOCLAMP(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d930)
>  #define SPCSCCROCLAMP(plane_id)	_MMIO_CHV_SPCSC(plane_id, 0x6d934)
> -#define  SPCSC_OMAX(x)		((x) << 16) /* u10 */
> -#define  SPCSC_OMIN(x)		((x) << 0) /* u10 */
> +#define  SPCSC_OMAX_MASK	REG_GENMASK(25, 16)
> +#define  SPCSC_OMAX(x)		REG_FIELD_PREP(SPCSC_OMAX_MASK, (x)) /* u10 */
> +#define  SPCSC_OMIN_MASK	REG_GENMASK(9, 0)
> +#define  SPCSC_OMIN(x)		REG_FIELD_PREP(SPCSC_OMIN_MASK, (x)) /* u10 */
>  
>  /* Skylake plane registers */
>  



More information about the Intel-gfx mailing list