[PATCH] drm/amd/display: Remove aconnector condition check for dpcd read

Liu, Zhan Zhan.Liu at amd.com
Fri Apr 17 17:17:24 UTC 2020


+ Joseph



Hi Joseph,

Would you like to help me review this change? This was a follow-up on the discussion we had earlier this year.

Thanks,
Zhan


> -----Original Message-----
> From: Liu, Zhan <zhan.liu at amd.com>
> Sent: 2020/April/16, Thursday 3:24 PM
> To: amd-gfx at lists.freedesktop.org; Liu, Zhan <Zhan.Liu at amd.com>
> Subject: [PATCH] drm/amd/display: Remove aconnector condition check for
> dpcd read
> 
> [Why]
> Aconnector is not necessary to be NULL in order to read dpcd successfully.
> 
> Actually if we rely on checking aconnector here, we won't be able to turn off
> all displays before doing display detection. That will cause some MST hubs
> not able to light up.
> 
> [How]
> Remove aconnector check when turning off all displays at hardware
> initialization stage.
> 
> Signed-off-by: Zhan Liu <zhan.liu at amd.com>
> ---
>  .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 36 ++++++++-----------
>  1 file changed, 14 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> index 9f41efddc9bc..6f33f3f0d023 100644
> --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> @@ -1332,31 +1332,23 @@ void dcn10_init_hw(struct dc *dc)
>  			if (dc->links[i]->connector_signal !=
> SIGNAL_TYPE_DISPLAY_PORT)
>  				continue;
> 
> -			/*
> -			 * core_link_read_dpcd() will invoke
> dm_helpers_dp_read_dpcd(),
> -			 * which needs to read dpcd info with the help of
> aconnector.
> -			 * If aconnector (dc->links[i]->prev) is NULL, then
> dpcd status
> -			 * cannot be read.
> -			 */
> -			if (dc->links[i]->priv) {
> -				/* if any of the displays are lit up turn them
> off */
> -				status = core_link_read_dpcd(dc->links[i],
> DP_SET_POWER,
> -
> 	&dpcd_power_state, sizeof(dpcd_power_state));
> -				if (status == DC_OK && dpcd_power_state ==
> DP_POWER_STATE_D0) {
> -					/* blank dp stream before power off
> receiver*/
> -					if (dc->links[i]->link_enc->funcs-
> >get_dig_frontend) {
> -						unsigned int fe = dc->links[i]-
> >link_enc->funcs->get_dig_frontend(dc->links[i]->link_enc);
> -
> -						for (j = 0; j < dc->res_pool-
> >stream_enc_count; j++) {
> -							if (fe == dc-
> >res_pool->stream_enc[j]->id) {
> -								dc-
> >res_pool->stream_enc[j]->funcs->dp_blank(
> -
> 		dc->res_pool->stream_enc[j]);
> -								break;
> -							}
> +			/* if any of the displays are lit up turn them off */
> +			status = core_link_read_dpcd(dc->links[i],
> DP_SET_POWER,
> +							&dpcd_power_state,
> sizeof(dpcd_power_state));
> +			if (status == DC_OK && dpcd_power_state ==
> DP_POWER_STATE_D0) {
> +				/* blank dp stream before power off
> receiver*/
> +				if (dc->links[i]->link_enc->funcs-
> >get_dig_frontend) {
> +					unsigned int fe =
> +dc->links[i]->link_enc->funcs->get_dig_frontend(dc->links[i]->link_enc)
> +;
> +
> +					for (j = 0; j < dc->res_pool-
> >stream_enc_count; j++) {
> +						if (fe == dc->res_pool-
> >stream_enc[j]->id) {
> +							dc->res_pool-
> >stream_enc[j]->funcs->dp_blank(
> +
> 	dc->res_pool->stream_enc[j]);
> +							break;
>  						}
>  					}
> -					dp_receiver_power_ctrl(dc->links[i],
> false);
>  				}
> +				dp_receiver_power_ctrl(dc->links[i], false);
>  			}
>  		}
>  	}
> --
> 2.17.1



More information about the amd-gfx mailing list