[Intel-gfx] [PATCH v2 1/3] drm/i915: Define WD trancoder for i915
Jani Nikula
jani.nikula at intel.com
Fri Sep 9 09:01:13 UTC 2022
On Fri, 09 Sep 2022, "Murthy, Arun R" <arun.r.murthy at intel.com> wrote:
>> From: Suraj Kandpal <suraj.kandpal at 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 at 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
> --------------------
>
--
Jani Nikula, Intel Open Source Graphics Center
More information about the Intel-gfx
mailing list