• Ville Syrjälä's avatar
    drm/dp_mst: Enable registration of AUX devices for MST ports · 562836a2
    Ville Syrjälä authored
    All available downstream ports - physical and logical - are exposed for
    each MST device. They are listed in /dev/, following the same naming
    scheme as SST devices by appending an incremental ID.
    
    Although all downstream ports are exposed, only some will work as
    expected. Consider the following topology:
    
                   +---------+
                   |  ASIC   |
                   +---------+
                  Conn-0|
                        |
                   +----v----+
              +----| MST HUB |----+
              |    +---------+    |
              |                   |
              |Port-1       Port-2|
        +-----v-----+       +-----v-----+
        |  MST      |       |  SST      |
        |  Display  |       |  Display  |
        +-----------+       +-----------+
              |Port-1
              x
    
     MST Path  | MST Device
     ----------+----------------------------------
     sst:0     | MST Hub
     mst:0-1   | MST Display
     mst:0-1-1 | MST Display's disconnected DP out
     mst:0-1-8 | MST Display's internal sink
     mst:0-2   | SST Display
    
    On certain MST displays, the upstream physical port will ACK DPCD reads.
    However, reads on the local logical port to the internal sink will
    *NAK*. i.e. reading mst:0-1 ACKs, but mst:0-1-8 NAKs.
    
    There may also be duplicates. Some displays will return the same GUID
    when reading DPCD from both mst:0-1 and mst:0-1-8.
    
    There are some device-dependent behavior as well. The MST hub used
    during testing will actually *ACK* read requests on a disconnected
    physical port, whereas the MST displays will NAK.
    
    In light of these discrepancies, it's simpler to expose all downstream
    ports - both physical and logical - and let the user decide what to use.
    
    v3 changes:
    * Change WARN_ON_ONCE -> DRM_ERROR on dpcd read errors
    * Docstring and cosmetic fixes
    
    v2 changes:
    
    Moved remote aux device (un)registration to new mst connector late
    register and early unregister helpers. Drivers should call these from
    their own mst connector function hooks.
    
    This is to solve an issue during driver unload, where mst connector
    devices are unregistered before the remote aux devices are. In a setup
    where aux devices are created as children of connector devices, the aux
    device would be removed too early, and uncleanly. Doing so in
    early_unregister solves this issue, as that is called before connector
    unregistration.
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarLeo Li <sunpeng.li@amd.com>
    Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
    Signed-off-by: default avatarHarry Wentland <harry.wentland@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190723232808.28128-3-sunpeng.li@amd.com
    562836a2
drm_dp_mst_topology.c 115 KB