From: Mikita Lipski <mikita.lipski@xxxxxxx> [why] In order to comply with new MST atomic check we have to find and add VCPI slots to the state during atomic check whenever their is a change on mode or connector. [how] - Verify that it is a MST connection - Convert new stream's clock and bpp - Calculate PBN based on stream parameters - Find and add VCPI slots to the state Cc: Lyude Paul <lyude@xxxxxxxxxx> Signed-off-by: Mikita Lipski <mikita.lipski@xxxxxxx> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 7b0ca2e1ed8b..d700b962d338 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4432,6 +4432,65 @@ static int dm_encoder_helper_atomic_check(struct drm_encoder *encoder, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state) { + struct drm_atomic_state *state = crtc_state->state; + struct drm_connector *connector = conn_state->connector; + struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector); + struct dm_crtc_state *dm_new_crtc_state = to_dm_crtc_state(crtc_state); + const struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode; + struct drm_dp_mst_topology_mgr *mst_mgr; + struct drm_dp_mst_port *mst_port; + int pbn, slots,clock, bpp = 0; + + if (!dm_new_crtc_state) + return 0; + + if (!aconnector || !aconnector->port) + return 0; + + mst_port = aconnector->port; + mst_mgr = &aconnector->mst_port->mst_mgr; + + if (!mst_mgr->mst_state) + return 0; + + if (!crtc_state->connectors_changed && !crtc_state->mode_changed) + return 0; + + switch (convert_color_depth_from_display_info(connector, conn_state)) { + case COLOR_DEPTH_666: + bpp = 6; + break; + case COLOR_DEPTH_888: + bpp = 8; + break; + case COLOR_DEPTH_101010: + bpp = 10; + break; + case COLOR_DEPTH_121212: + bpp = 12; + break; + case COLOR_DEPTH_141414: + bpp = 14; + break; + case COLOR_DEPTH_161616: + bpp = 16; + break; + default: + ASSERT(bpp != 0); + break; + } + + bpp *= 3; + clock = adjusted_mode->clock; + pbn = drm_dp_calc_pbn_mode(clock, bpp); + slots = drm_dp_atomic_find_vcpi_slots(state, + mst_mgr, + mst_port, + pbn); + if (slots < 0) { + DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", slots); + return slots; + } return 0; } -- 2.17.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel