[PATCH v2 2/2] drm/amd/display: Use new connector state when getting color depth

Harry Wentland hwentlan at amd.com
Wed May 22 18:04:41 UTC 2019


On 2019-05-22 12:00 p.m., Nicholas Kazlauskas wrote:
> [CAUTION: External Email]
> 
> [Why]
> The current state on the connector is queried when getting the max bpc
> rather than the new state. This means that a new max bpc value can only
> currently take effect on the commit *after* it changes.
> 
> The new state should be passed in instead.
> 
> [How]
> Pass down the dm_state as drm state to where we do color depth lookup.
> 
> The passed in state can still be NULL when called from
> amdgpu_dm_connector_mode_valid, so make sure that we have reasonable
> defaults in place. That should probably be addressed at some point.
> 
> This change now (correctly) causes a modeset to occur when changing the
> max bpc for a connector.
> 
> v2: Drop extra TODO.
> 
> Cc: Leo Li <sunpeng.li at amd.com>
> Cc: Harry Wentland <harry.wentland at amd.com>
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
> Acked-by: Alex Deucher <alexander.deucher at amd.com>

Series is
Reviewed-by: Harry Wentland <harry.wentland at amd.com>

Harry

> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 27 ++++++++++---------
>  1 file changed, 15 insertions(+), 12 deletions(-)
> 
> 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 b8e88209ef5d..fd0421794e0f 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -3038,13 +3038,13 @@ static void update_stream_scaling_settings(const struct drm_display_mode *mode,
>  }
> 
>  static enum dc_color_depth
> -convert_color_depth_from_display_info(const struct drm_connector *connector)
> +convert_color_depth_from_display_info(const struct drm_connector *connector,
> +                                     const struct drm_connector_state *state)
>  {
>         uint32_t bpc = connector->display_info.bpc;
> 
> -       /* TODO: Use passed in state instead of the current state. */
> -       if (connector->state) {
> -               bpc = connector->state->max_bpc;
> +       if (state) {
> +               bpc = state->max_bpc;
>                 /* Round down to the nearest even number. */
>                 bpc = bpc - (bpc & 1);
>         }
> @@ -3165,11 +3165,12 @@ static void adjust_colour_depth_from_display_info(struct dc_crtc_timing *timing_
> 
>  }
> 
> -static void
> -fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
> -                                            const struct drm_display_mode *mode_in,
> -                                            const struct drm_connector *connector,
> -                                            const struct dc_stream_state *old_stream)
> +static void fill_stream_properties_from_drm_display_mode(
> +       struct dc_stream_state *stream,
> +       const struct drm_display_mode *mode_in,
> +       const struct drm_connector *connector,
> +       const struct drm_connector_state *connector_state,
> +       const struct dc_stream_state *old_stream)
>  {
>         struct dc_crtc_timing *timing_out = &stream->timing;
>         const struct drm_display_info *info = &connector->display_info;
> @@ -3192,7 +3193,7 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
> 
>         timing_out->timing_3d_format = TIMING_3D_FORMAT_NONE;
>         timing_out->display_color_depth = convert_color_depth_from_display_info(
> -                       connector);
> +               connector, connector_state);
>         timing_out->scan_type = SCANNING_TYPE_NODATA;
>         timing_out->hdmi_vic = 0;
> 
> @@ -3389,6 +3390,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
>  {
>         struct drm_display_mode *preferred_mode = NULL;
>         struct drm_connector *drm_connector;
> +       const struct drm_connector_state *con_state =
> +               dm_state ? &dm_state->base : NULL;
>         struct dc_stream_state *stream = NULL;
>         struct drm_display_mode mode = *drm_mode;
>         bool native_mode_found = false;
> @@ -3461,10 +3464,10 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
>         */
>         if (!scale || mode_refresh != preferred_refresh)
>                 fill_stream_properties_from_drm_display_mode(stream,
> -                       &mode, &aconnector->base, NULL);
> +                       &mode, &aconnector->base, con_state, NULL);
>         else
>                 fill_stream_properties_from_drm_display_mode(stream,
> -                       &mode, &aconnector->base, old_stream);
> +                       &mode, &aconnector->base, con_state, old_stream);
> 
>         update_stream_scaling_settings(&mode, dm_state, stream);
> 
> --
> 2.17.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
> 


More information about the amd-gfx mailing list