Series is Reviewed-by: Harry Wentland <harry.wentland@xxxxxxx> Harry On 2019-05-22 11:11 a.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. > > Cc: Leo Li <sunpeng.li@xxxxxxx> > Cc: Harry Wentland <harry.wentland@xxxxxxx> > Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> > --- > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 +++++++++++-------- > 1 file changed, 15 insertions(+), 11 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 a7a9e4d81a17..580c324891fd 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,14 @@ 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 = 8; > > /* 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 +3166,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 +3194,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 +3391,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 +3465,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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/amd-gfx > _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx