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