[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