• David Francis's avatar
    drm/amd/display: MST DSC compute fair share · 8c20a1ed
    David Francis authored
    If there is limited link bandwidth on a MST network,
    it must be divided fairly between the streams on that network
    
    Implement an algorithm to determine the correct DSC config
    for each stream
    
    The algorithm:
    This
         [                   ]          ( )
    represents the range of bandwidths possible for a given stream.
    The [] area represents the range of DSC configs, and the ()
    represents no DSC. The bandwidth used increases from left to right.
    
    First, try disabling DSC on all streams
         [                  ]          (|)
         [                     ]            (|)
    Check this against the bandwidth limits of the link and each branch
    (including each endpoint). If it passes, the job is done
    
    Second, try maximum DSC compression on all streams
    that support DSC
         [|         ]        ( )
         [|                ]         ( )
    If this does not pass, then enabling this combination of streams
    is impossible
    
    Otherwise, divide the remaining bandwidth evenly amongst the streams
         [        |  ]         ( )
         [        |      ]        ( )
    
    If one or more of the streams reach minimum compression, evenly
    divide the reamining bandwidth amongst the remaining streams
         [    |] ( )
         [       |]   ( )
         [                 |   ]               ( )
         [                 |      ]                  ( )
    
    If all streams can reach minimum compression, disable compression
    greedily
         [      |]  ( )
         [        |]    ( )
         [                 ]                                (|)
    
    Perform this algorithm on each full update, on each MST link
    with at least one DSC stream on it
    
    After the configs are computed, call
    dcn20_add_dsc_to_stream_resource on each stream with DSC enabled.
    It is only after all streams are created that we can know which
    of them will need DSC.
    
    Do all of this at the end of amdgpu atomic check.  If it fails,
    fail check; This combination of timings cannot be supported.
    
    v2: Use drm_dp_mst_atomic_check to validate bw for certain dsc
    configurations
    
    v3: Use dc_dsc_policy structure to get min and max bpp rate
    for DSC configuration
    Acked-by: default avatarLyude Paul <lyude@redhat.com>
    Reviewed-by: default avatarWenjing Liu <Wenjing.Liu@amd.com>
    Signed-off-by: default avatarDavid Francis <David.Francis@amd.com>
    Signed-off-by: default avatarMikita Lipski <mikita.lipski@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    8c20a1ed
amdgpu_dm.c 230 KB