class DdiPhysicalLayer

Defined at line 59 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

On Intel display devices, DDIs (Digital Display Interfaces) contain port

logic to interface to the DDI physical layer (PHY), which are the physical

ports in the IO subsystem provided by the hardware.

This class provides interfaces of the physical layers to display drivers, so

that the drivers can:

- `Enable()` / `Disable()` the physical layer of a certain port for display

use;

- Query display device availability (`GetPhysicalLayerInfo()`) on the

physical port.

A typical DDI Physical Layer can communicate with the port IO subsystem to

maintain power state of the physical port, configure physical lanes for

display usage, and query physical device state to report back to the driver.

On older generations of Intel Display Engine (e.g. Kaby Lake and Skylake),

the DDI Physical layers are usually automatically configured by the firmware

and the driver doesn't need to do much to maintain the physical layer state.

However on newer generations (e.g. Ice Lake, Tiger Lake), drivers must

initialize the physical layer before using it for display purpose.

`DdiPhysicalLayer`s are intrusively reference counted. Display Devices can

hold references to enabled PHYs, and release the reference once the display

is removed, which finally disable the PHY for power saving when the PHY is

not referenced by any display.

The Ref-counting Is *Not* Thread-safe. `DdiPhysicalLayer`s and references to

`DdiPhysicalLayer`s must be accessed only by a single thread.

TODO(https://fxbug.dev/42064192): Currently the intel-display driver doesn't fulfill this

requirement. The threading model of the driver needs to be fixed.

References:

Ice Lake:

- IHD-OS-ICLLP-Vol 12-1.22-Rev 2.0 Pages 333-335 "Digital Display Interface"

- IHD-OS-ICLLP-Vol 12-1.22-Rev 2.0 Pages 346-360 "Gen11+ TypeC Programming"

Tiger Lake:

- IHD-OS-TGL-Vol 12-1.22-Rev 2.0 Pages 390-398 "Digital Display Interface"

- IHD-OS-TGL-Vol 12-1.22-Rev 2.0 Pages 399-409 "TypeC Programming"

Public Methods

void DdiPhysicalLayer (DdiId ddi_id)

Defined at line 113 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

void ~DdiPhysicalLayer ()

Defined at line 114 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

void DdiPhysicalLayer (const DdiPhysicalLayer & )

Copying and moving are not allowed.

Defined at line 117 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

DdiPhysicalLayer & operator= (const DdiPhysicalLayer & )

Defined at line 118 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

void DdiPhysicalLayer (DdiPhysicalLayer && )

Defined at line 119 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

bool IsEnabled ()

Indicates whether the DDI PHY is already enabled.

bool IsHealthy ()

Indicates whether the DDI PHY is in a healthy state to be enabled.

Drivers must not `Enable()` a DDI or use it for display if `IsHealthy()`

returns false.

bool Enable ()

Enables the physical layer of the DDI.

Returns true if the DDI PHY is enabled successfully, otherwise returns

false.

This method is idempotent; if a DDI PHY is already enabled when this

function is called, the method will not change the hardware state.

bool Disable ()

Disables the physical layer of the DDI.

Returns true if the DDI PHY is disabled successfully, otherwise returns

false.

This method is idempotent; if a DDI PHY is already disabled when this

function is called, the method will not change the hardware state.

PhysicalLayerInfo GetPhysicalLayerInfo ()
DdiPhysicalLayer & operator= (DdiPhysicalLayer && )

Defined at line 120 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

DdiId ddi_id ()

Defined at line 122 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

Enumerations

enum DdiType
Name Value
kCombo 0
kTypeC 1

Defined at line 61 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

enum ConnectionType
Name Value
kNone 0
kBuiltIn 1
kTypeCDisplayPortAltMode 2
kTypeCThunderbolt 3

Defined at line 70 of file ../../src/graphics/display/drivers/intel-display/ddi-physical-layer.h

Records

Friends

class DdiReference