Haven't looked at these quite yet, but I just wanted to say ahead of time that
from a quick glance these look like a big step in the right direction :).
Awesome work!

I will review this ASAP 

On Wed, 2019-09-18 at 16:26 -0400, mikita.lip...@amd.com wrote:
> From: Mikita Lipski <mikita.lip...@amd.com>
> 
> [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 <ly...@redhat.com>
> Signed-off-by: Mikita Lipski <mikita.lip...@amd.com>
> ---
>  .../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;
>  }
>  
-- 
Cheers,
        Lyude Paul

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to