class TranscoderDdiControl

Defined at line 48 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

TRANS_DDI_FUNC_CTL (Transcoder DDI Function Control)

This register has reserved bits that are not documented as MBZ (must be

zero), so it should be accessed using read-modify-write.

Tiger Lake: IHD-OS-TGL-Vol 2c-1.22-Rev2.0 Part 2 pages 1370-1375

Kaby Lake: IHD-OS-KBL-Vol 2c-1.17 Part 2 pages 952-956

Skylake: IHD-OS-SKL-Vol 2c-05.16 Part 2 pages 926-930

Public Members

 field_enabled_51
 field_ddi_select_subtle_67
 field_ddi_mode_153
 field_bits_per_color_170
 field_port_sync_primary_transcoder_select_kaby_lake_185
 field_vsync_polarity_not_inverted_228
 field_hsync_polarity_not_inverted_236
 field_is_port_sync_secondary_kaby_lake_248
 field_input_pipe_select_255
 field_display_port_transport_tiger_lake_319
 field_allocate_display_port_virtual_circuit_payload_326
 field_hdmi_scrambler_cts_mode_336
 field_hdmi_scrambler_resets_every_other_line_351
 field_high_tmds_character_rate_tiger_lake_361
 field_display_port_lane_count_selection_368
 field_hdmi_scrambler_enabled_tiger_lake_399
static const uint32_t kModeHdmi
static const uint32_t kModeDvi
static const uint32_t kModeDisplayPortSingleStream
static const uint32_t kModeDisplayPortMultiStream
static const uint32_t k8bpc
static const uint32_t k10bpc
static const uint32_t k6bpc
static const uint32_t k12bpc

Public Methods

template <, >
typename SelfType::ValueType enabled ()

Enables the transcoder's DDI functionality.

Defined at line 51 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_enabled (typename SelfType::ValueType val)

Enables the transcoder's DDI functionality.

Defined at line 51 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType ddi_select_subtle ()

Selects the DDI that the transcoder will connect to.

This field has a non-trivial value encoding. The ddi_*() and set_ddi_*()

helpers should be preferred to accessing the field directly.

This field is tagged `_subtle` because the definition matches the bits used

on Tiger Lake, but it's used on all supported models. Kaby Lake and Skylake

have a very similar field, which only takes up bits 30-28. Fortunately, bit

27 is reserved MBZ (must be zero). So, there's still a 1:1 mapping between

DDI selection and the values of bits 30-27.

We take advantage of this to avoid forking the entire (fairly large)

register definition by papering over this difference in the helpers

`ddi_kaby_lake()` and `set_ddi_kaby_lake()`.

Defined at line 67 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_ddi_select_subtle (typename SelfType::ValueType val)

Selects the DDI that the transcoder will connect to.

This field has a non-trivial value encoding. The ddi_*() and set_ddi_*()

helpers should be preferred to accessing the field directly.

This field is tagged `_subtle` because the definition matches the bits used

on Tiger Lake, but it's used on all supported models. Kaby Lake and Skylake

have a very similar field, which only takes up bits 30-28. Fortunately, bit

27 is reserved MBZ (must be zero). So, there's still a 1:1 mapping between

DDI selection and the values of bits 30-27.

We take advantage of this to avoid forking the entire (fairly large)

register definition by papering over this difference in the helpers

`ddi_kaby_lake()` and `set_ddi_kaby_lake()`.

Defined at line 67 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

std::optional<intel_display::DdiId> ddi_kaby_lake ()

The DDI that the transcoder will connect to.

This helper works for Kaby Lake and Skylake.

This field must not be changed while `enabled` is true. Directing multiple

transcoders to the same DDI is only valid for DisplayPort Multi-Streaming.

The underlying field is ignored by the EDP transcoder, which is attached to

DDI A.

Defined at line 78 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

std::optional<intel_display::DdiId> ddi_tiger_lake ()

The DDI that the transcoder will connect to.

This helper works for Tiger Lake.

This field must not be changed while `enabled` is true. Directing multiple

transcoders to the same DDI is only valid for DisplayPort Multi-Streaming.

The underlying field is ignored by the DSI transcoders. Each DSI transcoder

is attached to a DDI.

Defined at line 99 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

TranscoderDdiControl & set_ddi_kaby_lake (std::optional<intel_display::DdiId> ddi_id)

See `ddi_kaby_lake()` for details.

Defined at line 110 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

TranscoderDdiControl & set_ddi_tiger_lake (std::optional<intel_display::DdiId> ddi_id)

See `ddi_tiger_lake()` for details.

Defined at line 124 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType ddi_mode ()

The transcoder's mode of operation.

This field must not be changed while `enabled` is true.

This field must be changed in the same MMIO write as the

`display_port_transport_tiger_lake` field.

In HDMI mode, the transcoder sends a null packet (32 zero bytes) when

Vsync is asserted. The transcoder also sends a preamble and guardband

before each null packet. These behaviors match the HDMI specification.

In DVI mode, enabling DIP (Data Island Packets) or audio causes the

transcoder to adopt the HDMI behavior described above.

DisplayPort modes SST (Single Stream) or MST (Multi-Stream) must match the

mode selected in the `DpTransportControl` register.

On Tiger Lake, the DSI transcoders ignore this field.

On Kaby Lake, transcoder EDP (and therefore DDI A) must be in the

DisplayPort SST (Single Stream) mode.

Defined at line 153 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_ddi_mode (typename SelfType::ValueType val)

The transcoder's mode of operation.

This field must not be changed while `enabled` is true.

This field must be changed in the same MMIO write as the

`display_port_transport_tiger_lake` field.

In HDMI mode, the transcoder sends a null packet (32 zero bytes) when

Vsync is asserted. The transcoder also sends a preamble and guardband

before each null packet. These behaviors match the HDMI specification.

In DVI mode, enabling DIP (Data Island Packets) or audio causes the

transcoder to adopt the HDMI behavior described above.

DisplayPort modes SST (Single Stream) or MST (Multi-Stream) must match the

mode selected in the `DpTransportControl` register.

On Tiger Lake, the DSI transcoders ignore this field.

On Kaby Lake, transcoder EDP (and therefore DDI A) must be in the

DisplayPort SST (Single Stream) mode.

Defined at line 153 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType bits_per_color ()

Selects the bpc (number of bits per color) output on the connected DDI.

This field must not be changed while `enabled` is true.

HDMI and DSC (Display Stream Compression) don't support 6bpc.

On Tiger Lake, the DSI transcoder ignores this field, and uses the pixel

format in the TRANS_DSI_FUNC_CONF register.

Defined at line 170 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_bits_per_color (typename SelfType::ValueType val)

Selects the bpc (number of bits per color) output on the connected DDI.

This field must not be changed while `enabled` is true.

HDMI and DSC (Display Stream Compression) don't support 6bpc.

On Tiger Lake, the DSI transcoder ignores this field, and uses the pixel

format in the TRANS_DSI_FUNC_CONF register.

Defined at line 170 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType port_sync_primary_transcoder_select_kaby_lake ()

When operating as a port sync secondary, selects the primary transcoder.

This field has a non-trivial value encoding. The

`port_sync_primary_transcoder_kaby_lake()` and

`set_port_sync_primary_transcoder_kaby_lake()` helpers should be preferred

to accessing the field directly.

Defined at line 185 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_port_sync_primary_transcoder_select_kaby_lake (typename SelfType::ValueType val)

When operating as a port sync secondary, selects the primary transcoder.

This field has a non-trivial value encoding. The

`port_sync_primary_transcoder_kaby_lake()` and

`set_port_sync_primary_transcoder_kaby_lake()` helpers should be preferred

to accessing the field directly.

Defined at line 185 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

intel_display::TranscoderId port_sync_primary_transcoder_kaby_lake ()

When operating as a port sync secondary, selects the primary transcoder.

This field is ignored by the EDP transcoder, because it cannot function as

a port sync secondary.

This field's bits are reserved MBZ (must be zero) on Tiger Lake. The field

was moved to the TRANS_DDI_FUNC_CTL2 register and widened.

Defined at line 194 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

TranscoderDdiControl & set_port_sync_primary_kaby_lake (intel_display::TranscoderId transcoder_id)

See `port_sync_primary_kaby_lake()`.

Defined at line 211 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_vsync_polarity_not_inverted (typename SelfType::ValueType val)

If true, VSync is active high. If false, VSync is active low.

On Tiger Lake, the DSI transcoders ignore this field.

Active high is the default, and considered the standard polarity. Active

low is considered an inverted polarity.

Defined at line 228 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType vsync_polarity_not_inverted ()

If true, VSync is active high. If false, VSync is active low.

On Tiger Lake, the DSI transcoders ignore this field.

Active high is the default, and considered the standard polarity. Active

low is considered an inverted polarity.

Defined at line 228 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType hsync_polarity_not_inverted ()

If true, HSync is active high. If false, HSync is active low.

On Tiger Lake, the DSI transcoders ignore this field.

Active high is the default, and considered the standard polarity. Active

low is considered an inverted polarity.

Defined at line 236 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_hsync_polarity_not_inverted (typename SelfType::ValueType val)

If true, HSync is active high. If false, HSync is active low.

On Tiger Lake, the DSI transcoders ignore this field.

Active high is the default, and considered the standard polarity. Active

low is considered an inverted polarity.

Defined at line 236 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType is_port_sync_secondary_kaby_lake ()

If true, this transcoder operates as a port sync secondary transcoder.

Only the secondary transcoders must be explicitly configured for port sync.

This is set to false for the port sync primary transcoder.

This field is ignored by the EDP transcoder, because it cannot function as

a port sync secondary.

This field's bits are reserved MBZ (must be zero) on Tiger Lake. The field

was moved to the TRANS_DDI_FUNC_CTL2 register.

Defined at line 248 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_is_port_sync_secondary_kaby_lake (typename SelfType::ValueType val)

If true, this transcoder operates as a port sync secondary transcoder.

Only the secondary transcoders must be explicitly configured for port sync.

This is set to false for the port sync primary transcoder.

This field is ignored by the EDP transcoder, because it cannot function as

a port sync secondary.

This field's bits are reserved MBZ (must be zero) on Tiger Lake. The field

was moved to the TRANS_DDI_FUNC_CTL2 register.

Defined at line 248 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType input_pipe_select ()

Selects the input pipe, for transcoders that are not attached to pipes.

This field has a non-trivial value encoding. The input_pipe_*() and

set_input_pipe_*() helpers should be preferred to accessing the field

directly.

Defined at line 255 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_input_pipe_select (typename SelfType::ValueType val)

Selects the input pipe, for transcoders that are not attached to pipes.

This field has a non-trivial value encoding. The input_pipe_*() and

set_input_pipe_*() helpers should be preferred to accessing the field

directly.

Defined at line 255 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

intel_display::PipeId input_pipe_id ()

Selects the input pipe, for transcoders that are not attached to pipes.

On Tiger Lake, this field is only used by the DSI transcoders. On Kaby

Lake, the field is only used by the EDP transcoder. These are the

transcoders that are not attached to pipes.

This field is not documented on Skylake, and its bits are documented as

reserved. However, several PRM locations (IHD-OS-SKL-Vol 12-05.16 section

"Display Connections" pages 103, section "Pipe to Transcoder to DDI

Mappings" page 107) mention that the EDP transcoder can connect to pipes

A-C. So, the field likely works the same way as on Kaby Lake.

Defined at line 268 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

TranscoderDdiControl & set_input_pipe_id (intel_display::PipeId input_pipe_id)

See `input_pipe()` for details.

Defined at line 284 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
DisplayPortTransportTigerLake display_port_transport_tiger_lake ()

Selects the DisplayPort transport that receives this transcoder's data.

This field is only used when DisplayPort MST (multi-streaming) is enabled.

This must be changed in the same MMIO operation as `ddi_mode`.

Defined at line 319 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_display_port_transport_tiger_lake (DisplayPortTransportTigerLake val)

Selects the DisplayPort transport that receives this transcoder's data.

This field is only used when DisplayPort MST (multi-streaming) is enabled.

This must be changed in the same MMIO operation as `ddi_mode`.

Defined at line 319 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType allocate_display_port_virtual_circuit_payload ()

If true, VC (Virtual Channel) payload allocation is enabled.

This field is ignored by the transcoders attached to DDIs that don't

support multi-streaming. These are the DSI transcoders On Tiger Lake, and

the EDP transcoder on Kaby Lake and Skylake.

Defined at line 326 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_allocate_display_port_virtual_circuit_payload (typename SelfType::ValueType val)

If true, VC (Virtual Channel) payload allocation is enabled.

This field is ignored by the transcoders attached to DDIs that don't

support multi-streaming. These are the DSI transcoders On Tiger Lake, and

the EDP transcoder on Kaby Lake and Skylake.

Defined at line 326 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType hdmi_scrambler_cts_mode ()

If true, the HDMI scrambler is in CTS (Compliance Test Specification) mode.

This field must not be changed while `hdmi_scrambler_enabled` is true.

This field is not documented on Kaby Lake and Skylake. The bit is reserved

MBZ (must be zero). This extends the good read semantics of `hdmi_enabled_`

-- reading zero means that the CTS mode is disabled, which makes perfect

sense while the HDMI scrambler is disabled.

Defined at line 336 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_hdmi_scrambler_cts_mode (typename SelfType::ValueType val)

If true, the HDMI scrambler is in CTS (Compliance Test Specification) mode.

This field must not be changed while `hdmi_scrambler_enabled` is true.

This field is not documented on Kaby Lake and Skylake. The bit is reserved

MBZ (must be zero). This extends the good read semantics of `hdmi_enabled_`

-- reading zero means that the CTS mode is disabled, which makes perfect

sense while the HDMI scrambler is disabled.

Defined at line 336 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType hdmi_scrambler_resets_every_other_line ()

If false, the HDMI scrambler is reset on every line.

This field is only used when the HDMI scrambler is in CTS mode. In that

case, it determines whether the transcoder sends a SSCP (Scrambler

Synchronization Control Period) during HSync for every line, or for every

other line.

This field must be not be set while `hdmi_scrambler_cts_mode` is true.

This field is not documented on Kaby Lake and Skylake. The bit is reserved

MBZ (must be zero). This extends the good read semantics of

`hdmi_scrambler_cts_mode` -- the CTS mode is never enabled, and this field

can always be ignored.

Defined at line 351 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_hdmi_scrambler_resets_every_other_line (typename SelfType::ValueType val)

If false, the HDMI scrambler is reset on every line.

This field is only used when the HDMI scrambler is in CTS mode. In that

case, it determines whether the transcoder sends a SSCP (Scrambler

Synchronization Control Period) during HSync for every line, or for every

other line.

This field must be not be set while `hdmi_scrambler_cts_mode` is true.

This field is not documented on Kaby Lake and Skylake. The bit is reserved

MBZ (must be zero). This extends the good read semantics of

`hdmi_scrambler_cts_mode` -- the CTS mode is never enabled, and this field

can always be ignored.

Defined at line 351 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType high_tmds_character_rate_tiger_lake ()

If true, the high TMDS character rate is enabled over the HDMI link.

This field must be set to true if and only if the HDMI link symbol rate is

greater than 340 MHz.

This field is not documented on Kaby Lake and Skylake. The bits are

reserved MBZ (must be zero), which makes for good read semantics -- reading

zero means that the high TMDS character rate is not enabled.

Defined at line 361 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_high_tmds_character_rate_tiger_lake (typename SelfType::ValueType val)

If true, the high TMDS character rate is enabled over the HDMI link.

This field must be set to true if and only if the HDMI link symbol rate is

greater than 340 MHz.

This field is not documented on Kaby Lake and Skylake. The bits are

reserved MBZ (must be zero), which makes for good read semantics -- reading

zero means that the high TMDS character rate is not enabled.

Defined at line 361 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType display_port_lane_count_selection ()

Selects the number of DisplayPort or DSI lanes enabled.

This field has a non-trivial value encoding. The

`display_port_lane_count()` and `set_display_port_lane_count()` helpers

should be preferred to accessing the field directly.

Defined at line 368 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_display_port_lane_count_selection (typename SelfType::ValueType val)

Selects the number of DisplayPort or DSI lanes enabled.

This field has a non-trivial value encoding. The

`display_port_lane_count()` and `set_display_port_lane_count()` helpers

should be preferred to accessing the field directly.

Defined at line 368 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

uint8_t display_port_lane_count ()

The number of DisplayPort lanes enabled.

This field is ignored for HDMI or DVI, as these modes always use 4 lanes.

Only the DSI transcoders support using 3 lanes.

When the transcoder mode is a DisplayPort mode, the field must match the

`display_port_lane_count` in the attached DDI's DdiBufferControl register.

Defined at line 377 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

TranscoderDdiControl set_display_port_lane_count (uint8_t lane_count)

See `display_port_lane_count()` for details.

Defined at line 384 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
typename SelfType::ValueType hdmi_scrambler_enabled_tiger_lake ()

If true, scrambling is enabled over the HDMI link.

Scrambling must be enabled for HDMI link symbol rates above 340 MHz.

Scrambling should also be enabled at lower speeds, when the receiver

supports scrambling at those speeds.

This field is not documented on Kaby Lake and Skylake. The bits are

reserved MBZ (must be zero), which makes for good read semantics -- reading

zero means that no HDMI scrambler is enabled.

Defined at line 399 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

template <, >
SelfType & set_hdmi_scrambler_enabled_tiger_lake (typename SelfType::ValueType val)

If true, scrambling is enabled over the HDMI link.

Scrambling must be enabled for HDMI link symbol rates above 340 MHz.

Scrambling should also be enabled at lower speeds, when the receiver

supports scrambling at those speeds.

This field is not documented on Kaby Lake and Skylake. The bits are

reserved MBZ (must be zero), which makes for good read semantics -- reading

zero means that no HDMI scrambler is enabled.

Defined at line 399 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

hwreg::RegisterAddr<TranscoderDdiControl> GetForKabyLakeTranscoder (intel_display::TranscoderId transcoder_id)

Defined at line 401 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

hwreg::RegisterAddr<TranscoderDdiControl> GetForTigerLakeTranscoder (intel_display::TranscoderId transcoder_id)

Defined at line 412 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

Enumerations

enum DisplayPortTransportTigerLake
Name Value
kA 0
kB 1
kC 2
kD 3

Values for `display_port_transport_tiger_lake`.

Defined at line 307 of file ../../src/graphics/display/drivers/intel-display/registers-transcoder.h

Records