Reviewed-by: Leo Li <sunpeng.li@xxxxxxx> Thanks! On 2019-08-21 12:57 p.m., Nicholas Kazlauskas wrote: > [Why] > The only place where state->max_bpc is updated on the connector is > at the start of atomic check during drm_atomic_connector_check. It > isn't updated when adding the connectors to the atomic state after > the fact. It also doesn't necessarily reflect the right value when > called in amdgpu during mode validation outside of atomic check. > > This can cause the wrong bpc to be used even if the max_requested_bpc > is the correct value. > > [How] > Don't rely on state->max_bpc reflecting the real bpc value and just > do the min(...) based on display info bpc and max_requested_bpc. > > Cc: David Francis <David.Francis@xxxxxxx> > Cc: Bhawanpreet Lakha <Bhawanpreet.Lakha@xxxxxxx> > Cc: Leo Li <sunpeng.li@xxxxxxx> > Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> > --- > .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 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 7cf8dbccce95..73ed7b6bd8d3 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -3216,13 +3216,25 @@ static enum dc_color_depth > convert_color_depth_from_display_info(const struct drm_connector *connector, > const struct drm_connector_state *state) > { > - uint32_t bpc = connector->display_info.bpc; > + uint8_t bpc = (uint8_t)connector->display_info.bpc; > + > + /* Assume 8 bpc by default if no bpc is specified. */ > + bpc = bpc ? bpc : 8; > > if (!state) > state = connector->state; > > if (state) { > - bpc = state->max_bpc; > + /* > + * Cap display bpc based on the user requested value. > + * > + * The value for state->max_bpc may not correctly updated > + * depending on when the connector gets added to the state > + * or if this was called outside of atomic check, so it > + * can't be used directly. > + */ > + bpc = min(bpc, state->max_requested_bpc); > + > /* Round down to the nearest even number. */ > bpc = bpc - (bpc & 1); > } > _______________________________________________ amd-gfx mailing list amd-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/amd-gfx