diff mbox series

[v2,1/3] drm/i915: Define WD trancoder for i915

Message ID 20220822081642.159908-2-suraj.kandpal@intel.com (mailing list archive)
State New, archived
Headers show
Series Enable Pipewriteback | expand

Commit Message

Suraj Kandpal Aug. 22, 2022, 8:16 a.m. UTC
From: Suraj Kandpal <suraj.kandpal@intel.com>

Adding WD Types, WD transcoder to enum list and WD Transcoder offsets.
Adding i915 register definitions related to WD transcoder

Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.h  |   6 +
 .../drm/i915/display/intel_display_types.h    |   1 +
 drivers/gpu/drm/i915/i915_reg.h               | 139 ++++++++++++++++++
 3 files changed, 146 insertions(+)

Comments

Arun R Murthy Sept. 9, 2022, 8:57 a.m. UTC | #1
> From: Suraj Kandpal <suraj.kandpal@intel.com>
> 
> Adding WD Types, WD transcoder to enum list and WD Transcoder offsets.
> Adding i915 register definitions related to WD transcoder
> 
> Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.h  |   6 +
>  .../drm/i915/display/intel_display_types.h    |   1 +
>  drivers/gpu/drm/i915/i915_reg.h               | 139 ++++++++++++++++++
>  3 files changed, 146 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h
> b/drivers/gpu/drm/i915/display/intel_display.h
> index fa5371036239..4e9f22954a41 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -120,6 +120,8 @@ enum transcoder {
>  	TRANSCODER_DSI_1,
>  	TRANSCODER_DSI_A = TRANSCODER_DSI_0,	/* legacy DSI */
>  	TRANSCODER_DSI_C = TRANSCODER_DSI_1,	/* legacy DSI */
> +	TRANSCODER_WD_0,
> +	TRANSCODER_WD_1,
> 
>  	I915_MAX_TRANSCODERS
>  };
> @@ -141,6 +143,10 @@ static inline const char *transcoder_name(enum
> transcoder transcoder)
>  		return "DSI A";
>  	case TRANSCODER_DSI_C:
>  		return "DSI C";
> +	case TRANSCODER_WD_0:
> +		return "WD 0";
> +	case TRANSCODER_WD_1:
> +		return "WD 1";
>  	default:
>  		return "<invalid>";
>  	}
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 0da9b208d56e..0e94bd430bcb 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -79,6 +79,7 @@ enum intel_output_type {
>  	INTEL_OUTPUT_DSI = 9,
>  	INTEL_OUTPUT_DDI = 10,
>  	INTEL_OUTPUT_DP_MST = 11,
> +	INTEL_OUTPUT_WD = 12,
>  };
> 
>  enum hdmi_force_audio {
> diff --git a/drivers/gpu/drm/i915/i915_reg.h
> b/drivers/gpu/drm/i915/i915_reg.h index bf5c39d9f953..e3fced4b9980
> 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -2059,6 +2059,8 @@
>  #define TRANSCODER_EDP_OFFSET 0x6f000
>  #define TRANSCODER_DSI0_OFFSET	0x6b000
>  #define TRANSCODER_DSI1_OFFSET	0x6b800
> +#define TRANSCODER_WD0_OFFSET	0x6e000
> +#define TRANSCODER_WD1_OFFSET	0x6e800
> 
>  #define HTOTAL(trans)		_MMIO_TRANS2(trans, _HTOTAL_A)
>  #define HBLANK(trans)		_MMIO_TRANS2(trans, _HBLANK_A)
> @@ -3831,6 +3833,11 @@
>  #define PIPE_DSI0_OFFSET	0x7b000
>  #define PIPE_DSI1_OFFSET	0x7b800
> 
> +/* WD 0 and 1 */
Can this be changed to 
/* WD offset */

> +#define PIPE_WD0_OFFSET		0x7e000
> +#define PIPE_WD1_OFFSET		0x7d000
> +
> +
>  #define PIPECONF(pipe)		_MMIO_PIPE2(pipe, _PIPEACONF)
>  #define PIPEDSL(pipe)		_MMIO_PIPE2(pipe, _PIPEADSL)
>  #define PIPEFRAME(pipe)		_MMIO_PIPE2(pipe,
> _PIPEAFRAMEHIGH)
> @@ -4495,6 +4502,10 @@
>  #define _PIPEDSI0CONF		0x7b008
>  #define _PIPEDSI1CONF		0x7b808
> 
> +/* WD 0 and 1 */
Can this be changed to 
/* WD config regs */

> +#define _PIPEWD0CONF		0x7e008
> +#define _PIPEWD1CONF		0x7d008
> +
>  /* Sprite A control */
>  #define _DVSACNTR		0x72180
>  #define   DVS_ENABLE			REG_BIT(31)
> @@ -5720,6 +5731,7 @@
>  #define GEN8_DE_MISC_IER _MMIO(0x4446c)
>  #define  GEN8_DE_MISC_GSE		(1 << 27)
>  #define  GEN8_DE_EDP_PSR		(1 << 19)
> +#define  GEN8_DE_MISC_WD0		(1 << 23)
> 
>  #define GEN8_PCU_ISR _MMIO(0x444e0)
>  #define GEN8_PCU_IMR _MMIO(0x444e4)
> @@ -8714,6 +8726,133 @@ enum skl_power_gate {
>  #define   DSB_ENABLE			(1 << 31)
>  #define   DSB_STATUS			(1 << 0)
> 
> +#define TGL_ROOT_DEVICE_ID		0x9A00
> +#define TGL_ROOT_DEVICE_MASK		0xFF00
> +#define TGL_ROOT_DEVICE_SKU_MASK	0xF
> +#define TGL_ROOT_DEVICE_SKU_ULX		0x2
> +#define TGL_ROOT_DEVICE_SKU_ULT		0x4
> +
> +/* Gen12 WD */
> +#define _MMIO_WD(tc, wd0, wd1)		_MMIO_TRANS((tc) -
> TRANSCODER_WD_0, \
> +							wd0, wd1)
> +
> +#define WD_TRANS_ENABLE			(1 << 31)
> +#define WD_TRANS_DISABLE		0
> +#define WD_TRANS_ACTIVE			(1 << 30)
> +
> +/* WD transcoder control */
> +#define _WD_TRANS_FUNC_CTL_0		0x6e400
> +#define _WD_TRANS_FUNC_CTL_1		0x6ec00
> +#define WD_TRANS_FUNC_CTL(tc)		_MMIO_WD(tc,\
> +					_WD_TRANS_FUNC_CTL_0,\
> +					_WD_TRANS_FUNC_CTL_1)
> +
> +#define TRANS_WD_FUNC_ENABLE		(1 << 31)
> +#define WD_TRIGGERED_CAP_MODE_ENABLE	(1 << 30)
> +#define START_TRIGGER_FRAME		(1 << 29)
> +#define STOP_TRIGGER_FRAME		(1 << 28)
> +#define WD_CTL_POINTER_ETEH		(0 << 18)
> +#define WD_CTL_POINTER_ETDH		(1 << 18)
> +#define WD_CTL_POINTER_DTDH		(2 << 18)
> +#define WD_INPUT_SELECT_MASK		(7 << 12)
> +#define WD_INPUT_PIPE_A			(0 << 12)
> +#define WD_INPUT_PIPE_B			(5 << 12)
> +#define WD_INPUT_PIPE_C			(6 << 12)
> +#define WD_INPUT_PIPE_D			(7 << 12)
> +
> +#define WD_PIX_FMT_MASK			(0x3 << 20)
> +#define WD_PIX_FMT_YUYV			(0x1 << 20)
> +#define WD_PIX_FMT_XYUV8888		(0x2 << 20)
> +#define WD_PIX_FMT_XBGR8888		(0x3 << 20)
> +#define WD_PIX_FMT_Y410			(0x4 << 20)
> +#define WD_PIX_FMT_YUV422		(0x5 << 20)
> +#define WD_PIX_FMT_XBGR2101010		(0x6 << 20)
> +#define WD_PIX_FMT_RGB565		(0x7 << 20)
> +
> +#define WD_FRAME_NUMBER_MASK		15
> +
> +#define _WD_STRIDE_0			0x6e510
> +#define _WD_STRIDE_1			0x6ed10
> +#define WD_STRIDE(tc)			_MMIO_WD(tc,\
> +					_WD_STRIDE_0,\
> +					_WD_STRIDE_1)
> +#define WD_STRIDE_SHIFT			6
> +#define WD_STRIDE_MASK			(0x3ff << WD_STRIDE_SHIFT)
> +
> +#define _WD_STREAMCAP_CTL0		0x6e590
> +#define _WD_STREAMCAP_CTL1		0x6ed90
> +#define WD_STREAMCAP_CTL(tc)		_MMIO_WD(tc,\
> +					_WD_STREAMCAP_CTL0,\
> +					_WD_STREAMCAP_CTL1)
> +
> +#define WD_STREAM_CAP_MODE_EN		(1 << 31)
> +#define WD_STRAT_MASK			(3 << 24)
> +#define WD_SLICING_STRAT_1_1		(0 << 24)
> +#define WD_SLICING_STRAT_2_1		(1 << 24)
> +#define WD_SLICING_STRAT_4_1		(2 << 24)
> +#define WD_SLICING_STRAT_8_1		(3 << 24)
> +#define WD_STREAM_OVERRUN_STATUS	1
> +
> +#define _WD_SURF_0			0x6e514
> +#define _WD_SURF_1			0x6ed14
> +#define WD_SURF(tc)			_MMIO_WD(tc,\
> +					_WD_SURF_0,\
> +					_WD_SURF_1)
> +
> +#define _WD_IMR_0			0x6e560
> +#define _WD_IMR_1			0x6ed60
> +#define WD_IMR(tc)			_MMIO_WD(tc,\
> +					_WD_IMR_0,\
> +					_WD_IMR_1)
> +#define WD_FRAME_COMPLETE_INT		(1 << 7)
> +#define WD_GTT_FAULT_INT		(1 << 6)
> +#define WD_VBLANK_INT			(1 << 5)
> +#define WD_OVERRUN_INT			(1 << 4)
> +#define WD_CAPTURING_INT		(1 << 3)
> +#define WD_WRITE_COMPLETE_INT		(1 << 2)
> +
> +#define _WD_IIR_0			0x6e564
> +#define _WD_IIR_1			0x6ed64
> +#define WD_IIR(tc)			_MMIO_WD(tc,\
> +					_WD_IIR_0,\
> +					_WD_IIR_1)
> +
> +#define _WD_FRAME_STATUS_0		0x6e56b
> +#define _WD_FRAME_STATUS_1		0x6ed6b
> +#define WD_FRAME_STATUS(tc)		_MMIO_WD(tc,\
> +					_WD_FRAME_STATUS_0,\
> +					_WD_FRAME_STATUS_1)
> +
> +#define WD_FRAME_COMPLETE		(1 << 31)
> +#define WD_STATE_IDLE			(0 << 24)
> +#define WD_STATE_CAPSTART		(1 << 24)
> +#define WD_STATE_FRAME_START		(2 << 24)
> +#define WD_STATE_CAPACITIVE		(3 << 24)
> +#define WD_STATE_TG_DONE		(4 << 24)
> +#define WD_STATE_WDX_DONE		(5 << 24)
> +#define WD_STATE_QUICK_CAP		(6 << 24)
> +
> +#define _WD_27_M_0			0x6e524
> +#define _WD_27_M_1			0x6ed24
> +#define WD_27_M(tc)			_MMIO_WD(tc,\
> +					_WD_27_M_0,\
> +					_WD_27_M_1)
> +
> +#define _WD_27_N_0			0x6e528
> +
> +//Address looks wrong in bspec:
> +#define _WD_27_N_1			0x6ec28
> +#define WD_27_N(tc)			_MMIO_WD(tc,\
> +					_WD_27_N_0,\
> +					_WD_27_N_1)
> +
> +#define _WD_TAIL_CFG_0			0x6e520
> +#define _WD_TAIL_CFG_1			0x6ed20
> +
> +#define WD_TAIL_CFG(tc)			_MMIO_WD(tc,\
> +					_WD_TAIL_CFG_0,\
> +					_WD_TAIL_CFG_1)
> +
>  #define CLKREQ_POLICY			_MMIO(0x101038)
>  #define  CLKREQ_POLICY_MEM_UP_OVRD	REG_BIT(1)
> 
With the above said changes
Reviewed-by: Arun R Murthy <arun.r.murthy>

Thanks and Regards,
Arun R Murthy
--------------------
Jani Nikula Sept. 9, 2022, 9:01 a.m. UTC | #2
On Fri, 09 Sep 2022, "Murthy, Arun R" <arun.r.murthy@intel.com> wrote:
>> From: Suraj Kandpal <suraj.kandpal@intel.com>
>> 
>> Adding WD Types, WD transcoder to enum list and WD Transcoder offsets.
>> Adding i915 register definitions related to WD transcoder
>> 
>> Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_display.h  |   6 +
>>  .../drm/i915/display/intel_display_types.h    |   1 +
>>  drivers/gpu/drm/i915/i915_reg.h               | 139 ++++++++++++++++++
>>  3 files changed, 146 insertions(+)
>> 
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.h
>> b/drivers/gpu/drm/i915/display/intel_display.h
>> index fa5371036239..4e9f22954a41 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.h
>> +++ b/drivers/gpu/drm/i915/display/intel_display.h
>> @@ -120,6 +120,8 @@ enum transcoder {
>>  	TRANSCODER_DSI_1,
>>  	TRANSCODER_DSI_A = TRANSCODER_DSI_0,	/* legacy DSI */
>>  	TRANSCODER_DSI_C = TRANSCODER_DSI_1,	/* legacy DSI */
>> +	TRANSCODER_WD_0,
>> +	TRANSCODER_WD_1,
>> 
>>  	I915_MAX_TRANSCODERS
>>  };
>> @@ -141,6 +143,10 @@ static inline const char *transcoder_name(enum
>> transcoder transcoder)
>>  		return "DSI A";
>>  	case TRANSCODER_DSI_C:
>>  		return "DSI C";
>> +	case TRANSCODER_WD_0:
>> +		return "WD 0";
>> +	case TRANSCODER_WD_1:
>> +		return "WD 1";
>>  	default:
>>  		return "<invalid>";
>>  	}
>> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
>> b/drivers/gpu/drm/i915/display/intel_display_types.h
>> index 0da9b208d56e..0e94bd430bcb 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
>> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
>> @@ -79,6 +79,7 @@ enum intel_output_type {
>>  	INTEL_OUTPUT_DSI = 9,
>>  	INTEL_OUTPUT_DDI = 10,
>>  	INTEL_OUTPUT_DP_MST = 11,
>> +	INTEL_OUTPUT_WD = 12,
>>  };
>> 
>>  enum hdmi_force_audio {
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h
>> b/drivers/gpu/drm/i915/i915_reg.h index bf5c39d9f953..e3fced4b9980
>> 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -2059,6 +2059,8 @@
>>  #define TRANSCODER_EDP_OFFSET 0x6f000
>>  #define TRANSCODER_DSI0_OFFSET	0x6b000
>>  #define TRANSCODER_DSI1_OFFSET	0x6b800
>> +#define TRANSCODER_WD0_OFFSET	0x6e000
>> +#define TRANSCODER_WD1_OFFSET	0x6e800
>> 
>>  #define HTOTAL(trans)		_MMIO_TRANS2(trans, _HTOTAL_A)
>>  #define HBLANK(trans)		_MMIO_TRANS2(trans, _HBLANK_A)
>> @@ -3831,6 +3833,11 @@
>>  #define PIPE_DSI0_OFFSET	0x7b000
>>  #define PIPE_DSI1_OFFSET	0x7b800
>> 
>> +/* WD 0 and 1 */
> Can this be changed to 
> /* WD offset */

Nah, the comments should be removed altogether, they add zero
value. That's literally what the macro name says already.

BR,
Jani.

>
>> +#define PIPE_WD0_OFFSET		0x7e000
>> +#define PIPE_WD1_OFFSET		0x7d000
>> +
>> +
>>  #define PIPECONF(pipe)		_MMIO_PIPE2(pipe, _PIPEACONF)
>>  #define PIPEDSL(pipe)		_MMIO_PIPE2(pipe, _PIPEADSL)
>>  #define PIPEFRAME(pipe)		_MMIO_PIPE2(pipe,
>> _PIPEAFRAMEHIGH)
>> @@ -4495,6 +4502,10 @@
>>  #define _PIPEDSI0CONF		0x7b008
>>  #define _PIPEDSI1CONF		0x7b808
>> 
>> +/* WD 0 and 1 */
> Can this be changed to 
> /* WD config regs */
>
>> +#define _PIPEWD0CONF		0x7e008
>> +#define _PIPEWD1CONF		0x7d008
>> +
>>  /* Sprite A control */
>>  #define _DVSACNTR		0x72180
>>  #define   DVS_ENABLE			REG_BIT(31)
>> @@ -5720,6 +5731,7 @@
>>  #define GEN8_DE_MISC_IER _MMIO(0x4446c)
>>  #define  GEN8_DE_MISC_GSE		(1 << 27)
>>  #define  GEN8_DE_EDP_PSR		(1 << 19)
>> +#define  GEN8_DE_MISC_WD0		(1 << 23)
>> 
>>  #define GEN8_PCU_ISR _MMIO(0x444e0)
>>  #define GEN8_PCU_IMR _MMIO(0x444e4)
>> @@ -8714,6 +8726,133 @@ enum skl_power_gate {
>>  #define   DSB_ENABLE			(1 << 31)
>>  #define   DSB_STATUS			(1 << 0)
>> 
>> +#define TGL_ROOT_DEVICE_ID		0x9A00
>> +#define TGL_ROOT_DEVICE_MASK		0xFF00
>> +#define TGL_ROOT_DEVICE_SKU_MASK	0xF
>> +#define TGL_ROOT_DEVICE_SKU_ULX		0x2
>> +#define TGL_ROOT_DEVICE_SKU_ULT		0x4
>> +
>> +/* Gen12 WD */
>> +#define _MMIO_WD(tc, wd0, wd1)		_MMIO_TRANS((tc) -
>> TRANSCODER_WD_0, \
>> +							wd0, wd1)
>> +
>> +#define WD_TRANS_ENABLE			(1 << 31)
>> +#define WD_TRANS_DISABLE		0
>> +#define WD_TRANS_ACTIVE			(1 << 30)
>> +
>> +/* WD transcoder control */
>> +#define _WD_TRANS_FUNC_CTL_0		0x6e400
>> +#define _WD_TRANS_FUNC_CTL_1		0x6ec00
>> +#define WD_TRANS_FUNC_CTL(tc)		_MMIO_WD(tc,\
>> +					_WD_TRANS_FUNC_CTL_0,\
>> +					_WD_TRANS_FUNC_CTL_1)
>> +
>> +#define TRANS_WD_FUNC_ENABLE		(1 << 31)
>> +#define WD_TRIGGERED_CAP_MODE_ENABLE	(1 << 30)
>> +#define START_TRIGGER_FRAME		(1 << 29)
>> +#define STOP_TRIGGER_FRAME		(1 << 28)
>> +#define WD_CTL_POINTER_ETEH		(0 << 18)
>> +#define WD_CTL_POINTER_ETDH		(1 << 18)
>> +#define WD_CTL_POINTER_DTDH		(2 << 18)
>> +#define WD_INPUT_SELECT_MASK		(7 << 12)
>> +#define WD_INPUT_PIPE_A			(0 << 12)
>> +#define WD_INPUT_PIPE_B			(5 << 12)
>> +#define WD_INPUT_PIPE_C			(6 << 12)
>> +#define WD_INPUT_PIPE_D			(7 << 12)
>> +
>> +#define WD_PIX_FMT_MASK			(0x3 << 20)
>> +#define WD_PIX_FMT_YUYV			(0x1 << 20)
>> +#define WD_PIX_FMT_XYUV8888		(0x2 << 20)
>> +#define WD_PIX_FMT_XBGR8888		(0x3 << 20)
>> +#define WD_PIX_FMT_Y410			(0x4 << 20)
>> +#define WD_PIX_FMT_YUV422		(0x5 << 20)
>> +#define WD_PIX_FMT_XBGR2101010		(0x6 << 20)
>> +#define WD_PIX_FMT_RGB565		(0x7 << 20)
>> +
>> +#define WD_FRAME_NUMBER_MASK		15
>> +
>> +#define _WD_STRIDE_0			0x6e510
>> +#define _WD_STRIDE_1			0x6ed10
>> +#define WD_STRIDE(tc)			_MMIO_WD(tc,\
>> +					_WD_STRIDE_0,\
>> +					_WD_STRIDE_1)
>> +#define WD_STRIDE_SHIFT			6
>> +#define WD_STRIDE_MASK			(0x3ff << WD_STRIDE_SHIFT)
>> +
>> +#define _WD_STREAMCAP_CTL0		0x6e590
>> +#define _WD_STREAMCAP_CTL1		0x6ed90
>> +#define WD_STREAMCAP_CTL(tc)		_MMIO_WD(tc,\
>> +					_WD_STREAMCAP_CTL0,\
>> +					_WD_STREAMCAP_CTL1)
>> +
>> +#define WD_STREAM_CAP_MODE_EN		(1 << 31)
>> +#define WD_STRAT_MASK			(3 << 24)
>> +#define WD_SLICING_STRAT_1_1		(0 << 24)
>> +#define WD_SLICING_STRAT_2_1		(1 << 24)
>> +#define WD_SLICING_STRAT_4_1		(2 << 24)
>> +#define WD_SLICING_STRAT_8_1		(3 << 24)
>> +#define WD_STREAM_OVERRUN_STATUS	1
>> +
>> +#define _WD_SURF_0			0x6e514
>> +#define _WD_SURF_1			0x6ed14
>> +#define WD_SURF(tc)			_MMIO_WD(tc,\
>> +					_WD_SURF_0,\
>> +					_WD_SURF_1)
>> +
>> +#define _WD_IMR_0			0x6e560
>> +#define _WD_IMR_1			0x6ed60
>> +#define WD_IMR(tc)			_MMIO_WD(tc,\
>> +					_WD_IMR_0,\
>> +					_WD_IMR_1)
>> +#define WD_FRAME_COMPLETE_INT		(1 << 7)
>> +#define WD_GTT_FAULT_INT		(1 << 6)
>> +#define WD_VBLANK_INT			(1 << 5)
>> +#define WD_OVERRUN_INT			(1 << 4)
>> +#define WD_CAPTURING_INT		(1 << 3)
>> +#define WD_WRITE_COMPLETE_INT		(1 << 2)
>> +
>> +#define _WD_IIR_0			0x6e564
>> +#define _WD_IIR_1			0x6ed64
>> +#define WD_IIR(tc)			_MMIO_WD(tc,\
>> +					_WD_IIR_0,\
>> +					_WD_IIR_1)
>> +
>> +#define _WD_FRAME_STATUS_0		0x6e56b
>> +#define _WD_FRAME_STATUS_1		0x6ed6b
>> +#define WD_FRAME_STATUS(tc)		_MMIO_WD(tc,\
>> +					_WD_FRAME_STATUS_0,\
>> +					_WD_FRAME_STATUS_1)
>> +
>> +#define WD_FRAME_COMPLETE		(1 << 31)
>> +#define WD_STATE_IDLE			(0 << 24)
>> +#define WD_STATE_CAPSTART		(1 << 24)
>> +#define WD_STATE_FRAME_START		(2 << 24)
>> +#define WD_STATE_CAPACITIVE		(3 << 24)
>> +#define WD_STATE_TG_DONE		(4 << 24)
>> +#define WD_STATE_WDX_DONE		(5 << 24)
>> +#define WD_STATE_QUICK_CAP		(6 << 24)
>> +
>> +#define _WD_27_M_0			0x6e524
>> +#define _WD_27_M_1			0x6ed24
>> +#define WD_27_M(tc)			_MMIO_WD(tc,\
>> +					_WD_27_M_0,\
>> +					_WD_27_M_1)
>> +
>> +#define _WD_27_N_0			0x6e528
>> +
>> +//Address looks wrong in bspec:
>> +#define _WD_27_N_1			0x6ec28
>> +#define WD_27_N(tc)			_MMIO_WD(tc,\
>> +					_WD_27_N_0,\
>> +					_WD_27_N_1)
>> +
>> +#define _WD_TAIL_CFG_0			0x6e520
>> +#define _WD_TAIL_CFG_1			0x6ed20
>> +
>> +#define WD_TAIL_CFG(tc)			_MMIO_WD(tc,\
>> +					_WD_TAIL_CFG_0,\
>> +					_WD_TAIL_CFG_1)
>> +
>>  #define CLKREQ_POLICY			_MMIO(0x101038)
>>  #define  CLKREQ_POLICY_MEM_UP_OVRD	REG_BIT(1)
>> 
> With the above said changes
> Reviewed-by: Arun R Murthy <arun.r.murthy>
>
> Thanks and Regards,
> Arun R Murthy
> --------------------
>
Arun R Murthy Sept. 9, 2022, 9:03 a.m. UTC | #3
> On Fri, 09 Sep 2022, "Murthy, Arun R" <arun.r.murthy@intel.com> wrote:
> >> From: Suraj Kandpal <suraj.kandpal@intel.com>
> >>
> >> Adding WD Types, WD transcoder to enum list and WD Transcoder
> offsets.
> >> Adding i915 register definitions related to WD transcoder
> >>
> >> Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
> >> ---
> >>  drivers/gpu/drm/i915/display/intel_display.h  |   6 +
> >>  .../drm/i915/display/intel_display_types.h    |   1 +
> >>  drivers/gpu/drm/i915/i915_reg.h               | 139 ++++++++++++++++++
> >>  3 files changed, 146 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/i915/display/intel_display.h
> >> b/drivers/gpu/drm/i915/display/intel_display.h
> >> index fa5371036239..4e9f22954a41 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_display.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> >> @@ -120,6 +120,8 @@ enum transcoder {
> >>  	TRANSCODER_DSI_1,
> >>  	TRANSCODER_DSI_A = TRANSCODER_DSI_0,	/* legacy DSI */
> >>  	TRANSCODER_DSI_C = TRANSCODER_DSI_1,	/* legacy DSI */
> >> +	TRANSCODER_WD_0,
> >> +	TRANSCODER_WD_1,
> >>
> >>  	I915_MAX_TRANSCODERS
> >>  };
> >> @@ -141,6 +143,10 @@ static inline const char *transcoder_name(enum
> >> transcoder transcoder)
> >>  		return "DSI A";
> >>  	case TRANSCODER_DSI_C:
> >>  		return "DSI C";
> >> +	case TRANSCODER_WD_0:
> >> +		return "WD 0";
> >> +	case TRANSCODER_WD_1:
> >> +		return "WD 1";
> >>  	default:
> >>  		return "<invalid>";
> >>  	}
> >> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> >> b/drivers/gpu/drm/i915/display/intel_display_types.h
> >> index 0da9b208d56e..0e94bd430bcb 100644
> >> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> >> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> >> @@ -79,6 +79,7 @@ enum intel_output_type {
> >>  	INTEL_OUTPUT_DSI = 9,
> >>  	INTEL_OUTPUT_DDI = 10,
> >>  	INTEL_OUTPUT_DP_MST = 11,
> >> +	INTEL_OUTPUT_WD = 12,
> >>  };
> >>
> >>  enum hdmi_force_audio {
> >> diff --git a/drivers/gpu/drm/i915/i915_reg.h
> >> b/drivers/gpu/drm/i915/i915_reg.h index bf5c39d9f953..e3fced4b9980
> >> 100644
> >> --- a/drivers/gpu/drm/i915/i915_reg.h
> >> +++ b/drivers/gpu/drm/i915/i915_reg.h
> >> @@ -2059,6 +2059,8 @@
> >>  #define TRANSCODER_EDP_OFFSET 0x6f000
> >>  #define TRANSCODER_DSI0_OFFSET	0x6b000
> >>  #define TRANSCODER_DSI1_OFFSET	0x6b800
> >> +#define TRANSCODER_WD0_OFFSET	0x6e000
> >> +#define TRANSCODER_WD1_OFFSET	0x6e800
> >>
> >>  #define HTOTAL(trans)		_MMIO_TRANS2(trans, _HTOTAL_A)
> >>  #define HBLANK(trans)		_MMIO_TRANS2(trans, _HBLANK_A)
> >> @@ -3831,6 +3833,11 @@
> >>  #define PIPE_DSI0_OFFSET	0x7b000
> >>  #define PIPE_DSI1_OFFSET	0x7b800
> >>
> >> +/* WD 0 and 1 */
> > Can this be changed to
> > /* WD offset */
> 
> Nah, the comments should be removed altogether, they add zero value.
> That's literally what the macro name says already.
> 
That should be best!
Please remove this.

Thanks and Regards,
Arun R Murthy
-------------------
l Open Source Graphics Center
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index fa5371036239..4e9f22954a41 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -120,6 +120,8 @@  enum transcoder {
 	TRANSCODER_DSI_1,
 	TRANSCODER_DSI_A = TRANSCODER_DSI_0,	/* legacy DSI */
 	TRANSCODER_DSI_C = TRANSCODER_DSI_1,	/* legacy DSI */
+	TRANSCODER_WD_0,
+	TRANSCODER_WD_1,
 
 	I915_MAX_TRANSCODERS
 };
@@ -141,6 +143,10 @@  static inline const char *transcoder_name(enum transcoder transcoder)
 		return "DSI A";
 	case TRANSCODER_DSI_C:
 		return "DSI C";
+	case TRANSCODER_WD_0:
+		return "WD 0";
+	case TRANSCODER_WD_1:
+		return "WD 1";
 	default:
 		return "<invalid>";
 	}
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 0da9b208d56e..0e94bd430bcb 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -79,6 +79,7 @@  enum intel_output_type {
 	INTEL_OUTPUT_DSI = 9,
 	INTEL_OUTPUT_DDI = 10,
 	INTEL_OUTPUT_DP_MST = 11,
+	INTEL_OUTPUT_WD = 12,
 };
 
 enum hdmi_force_audio {
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index bf5c39d9f953..e3fced4b9980 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2059,6 +2059,8 @@ 
 #define TRANSCODER_EDP_OFFSET 0x6f000
 #define TRANSCODER_DSI0_OFFSET	0x6b000
 #define TRANSCODER_DSI1_OFFSET	0x6b800
+#define TRANSCODER_WD0_OFFSET	0x6e000
+#define TRANSCODER_WD1_OFFSET	0x6e800
 
 #define HTOTAL(trans)		_MMIO_TRANS2(trans, _HTOTAL_A)
 #define HBLANK(trans)		_MMIO_TRANS2(trans, _HBLANK_A)
@@ -3831,6 +3833,11 @@ 
 #define PIPE_DSI0_OFFSET	0x7b000
 #define PIPE_DSI1_OFFSET	0x7b800
 
+/* WD 0 and 1 */
+#define PIPE_WD0_OFFSET		0x7e000
+#define PIPE_WD1_OFFSET		0x7d000
+
+
 #define PIPECONF(pipe)		_MMIO_PIPE2(pipe, _PIPEACONF)
 #define PIPEDSL(pipe)		_MMIO_PIPE2(pipe, _PIPEADSL)
 #define PIPEFRAME(pipe)		_MMIO_PIPE2(pipe, _PIPEAFRAMEHIGH)
@@ -4495,6 +4502,10 @@ 
 #define _PIPEDSI0CONF		0x7b008
 #define _PIPEDSI1CONF		0x7b808
 
+/* WD 0 and 1 */
+#define _PIPEWD0CONF		0x7e008
+#define _PIPEWD1CONF		0x7d008
+
 /* Sprite A control */
 #define _DVSACNTR		0x72180
 #define   DVS_ENABLE			REG_BIT(31)
@@ -5720,6 +5731,7 @@ 
 #define GEN8_DE_MISC_IER _MMIO(0x4446c)
 #define  GEN8_DE_MISC_GSE		(1 << 27)
 #define  GEN8_DE_EDP_PSR		(1 << 19)
+#define  GEN8_DE_MISC_WD0		(1 << 23)
 
 #define GEN8_PCU_ISR _MMIO(0x444e0)
 #define GEN8_PCU_IMR _MMIO(0x444e4)
@@ -8714,6 +8726,133 @@  enum skl_power_gate {
 #define   DSB_ENABLE			(1 << 31)
 #define   DSB_STATUS			(1 << 0)
 
+#define TGL_ROOT_DEVICE_ID		0x9A00
+#define TGL_ROOT_DEVICE_MASK		0xFF00
+#define TGL_ROOT_DEVICE_SKU_MASK	0xF
+#define TGL_ROOT_DEVICE_SKU_ULX		0x2
+#define TGL_ROOT_DEVICE_SKU_ULT		0x4
+
+/* Gen12 WD */
+#define _MMIO_WD(tc, wd0, wd1)		_MMIO_TRANS((tc) - TRANSCODER_WD_0, \
+							wd0, wd1)
+
+#define WD_TRANS_ENABLE			(1 << 31)
+#define WD_TRANS_DISABLE		0
+#define WD_TRANS_ACTIVE			(1 << 30)
+
+/* WD transcoder control */
+#define _WD_TRANS_FUNC_CTL_0		0x6e400
+#define _WD_TRANS_FUNC_CTL_1		0x6ec00
+#define WD_TRANS_FUNC_CTL(tc)		_MMIO_WD(tc,\
+					_WD_TRANS_FUNC_CTL_0,\
+					_WD_TRANS_FUNC_CTL_1)
+
+#define TRANS_WD_FUNC_ENABLE		(1 << 31)
+#define WD_TRIGGERED_CAP_MODE_ENABLE	(1 << 30)
+#define START_TRIGGER_FRAME		(1 << 29)
+#define STOP_TRIGGER_FRAME		(1 << 28)
+#define WD_CTL_POINTER_ETEH		(0 << 18)
+#define WD_CTL_POINTER_ETDH		(1 << 18)
+#define WD_CTL_POINTER_DTDH		(2 << 18)
+#define WD_INPUT_SELECT_MASK		(7 << 12)
+#define WD_INPUT_PIPE_A			(0 << 12)
+#define WD_INPUT_PIPE_B			(5 << 12)
+#define WD_INPUT_PIPE_C			(6 << 12)
+#define WD_INPUT_PIPE_D			(7 << 12)
+
+#define WD_PIX_FMT_MASK			(0x3 << 20)
+#define WD_PIX_FMT_YUYV			(0x1 << 20)
+#define WD_PIX_FMT_XYUV8888		(0x2 << 20)
+#define WD_PIX_FMT_XBGR8888		(0x3 << 20)
+#define WD_PIX_FMT_Y410			(0x4 << 20)
+#define WD_PIX_FMT_YUV422		(0x5 << 20)
+#define WD_PIX_FMT_XBGR2101010		(0x6 << 20)
+#define WD_PIX_FMT_RGB565		(0x7 << 20)
+
+#define WD_FRAME_NUMBER_MASK		15
+
+#define _WD_STRIDE_0			0x6e510
+#define _WD_STRIDE_1			0x6ed10
+#define WD_STRIDE(tc)			_MMIO_WD(tc,\
+					_WD_STRIDE_0,\
+					_WD_STRIDE_1)
+#define WD_STRIDE_SHIFT			6
+#define WD_STRIDE_MASK			(0x3ff << WD_STRIDE_SHIFT)
+
+#define _WD_STREAMCAP_CTL0		0x6e590
+#define _WD_STREAMCAP_CTL1		0x6ed90
+#define WD_STREAMCAP_CTL(tc)		_MMIO_WD(tc,\
+					_WD_STREAMCAP_CTL0,\
+					_WD_STREAMCAP_CTL1)
+
+#define WD_STREAM_CAP_MODE_EN		(1 << 31)
+#define WD_STRAT_MASK			(3 << 24)
+#define WD_SLICING_STRAT_1_1		(0 << 24)
+#define WD_SLICING_STRAT_2_1		(1 << 24)
+#define WD_SLICING_STRAT_4_1		(2 << 24)
+#define WD_SLICING_STRAT_8_1		(3 << 24)
+#define WD_STREAM_OVERRUN_STATUS	1
+
+#define _WD_SURF_0			0x6e514
+#define _WD_SURF_1			0x6ed14
+#define WD_SURF(tc)			_MMIO_WD(tc,\
+					_WD_SURF_0,\
+					_WD_SURF_1)
+
+#define _WD_IMR_0			0x6e560
+#define _WD_IMR_1			0x6ed60
+#define WD_IMR(tc)			_MMIO_WD(tc,\
+					_WD_IMR_0,\
+					_WD_IMR_1)
+#define WD_FRAME_COMPLETE_INT		(1 << 7)
+#define WD_GTT_FAULT_INT		(1 << 6)
+#define WD_VBLANK_INT			(1 << 5)
+#define WD_OVERRUN_INT			(1 << 4)
+#define WD_CAPTURING_INT		(1 << 3)
+#define WD_WRITE_COMPLETE_INT		(1 << 2)
+
+#define _WD_IIR_0			0x6e564
+#define _WD_IIR_1			0x6ed64
+#define WD_IIR(tc)			_MMIO_WD(tc,\
+					_WD_IIR_0,\
+					_WD_IIR_1)
+
+#define _WD_FRAME_STATUS_0		0x6e56b
+#define _WD_FRAME_STATUS_1		0x6ed6b
+#define WD_FRAME_STATUS(tc)		_MMIO_WD(tc,\
+					_WD_FRAME_STATUS_0,\
+					_WD_FRAME_STATUS_1)
+
+#define WD_FRAME_COMPLETE		(1 << 31)
+#define WD_STATE_IDLE			(0 << 24)
+#define WD_STATE_CAPSTART		(1 << 24)
+#define WD_STATE_FRAME_START		(2 << 24)
+#define WD_STATE_CAPACITIVE		(3 << 24)
+#define WD_STATE_TG_DONE		(4 << 24)
+#define WD_STATE_WDX_DONE		(5 << 24)
+#define WD_STATE_QUICK_CAP		(6 << 24)
+
+#define _WD_27_M_0			0x6e524
+#define _WD_27_M_1			0x6ed24
+#define WD_27_M(tc)			_MMIO_WD(tc,\
+					_WD_27_M_0,\
+					_WD_27_M_1)
+
+#define _WD_27_N_0			0x6e528
+
+//Address looks wrong in bspec:
+#define _WD_27_N_1			0x6ec28
+#define WD_27_N(tc)			_MMIO_WD(tc,\
+					_WD_27_N_0,\
+					_WD_27_N_1)
+
+#define _WD_TAIL_CFG_0			0x6e520
+#define _WD_TAIL_CFG_1			0x6ed20
+
+#define WD_TAIL_CFG(tc)			_MMIO_WD(tc,\
+					_WD_TAIL_CFG_0,\
+					_WD_TAIL_CFG_1)
+
 #define CLKREQ_POLICY			_MMIO(0x101038)
 #define  CLKREQ_POLICY_MEM_UP_OVRD	REG_BIT(1)