| From 22a01eae62434abb8f05b44cbc871add926c36d1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 9 Apr 2020 17:37:40 +0800 |
| Subject: drm/amd/display: blank dp stream before re-train the link |
| |
| From: Xiaodong Yan <Xiaodong.Yan@amd.com> |
| |
| [ Upstream commit 718a5569b6fa6e1f49f1ae76a3c18acb4ddb74f1 ] |
| |
| [Why] |
| When link loss happened, monitor can not light up if only re-train the |
| link. |
| |
| [How] |
| Blank all the DP streams on this link before re-train the link, and then |
| unblank the stream |
| |
| Signed-off-by: Xiaodong Yan <Xiaodong.Yan@amd.com> |
| Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> |
| Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 12 ++++++++++++ |
| 1 file changed, 12 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c |
| index fd9e69634c50a..1b6c75a4dd60a 100644 |
| --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c |
| +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c |
| @@ -2885,6 +2885,12 @@ bool dc_link_handle_hpd_rx_irq(struct dc_link *link, union hpd_irq_data *out_hpd |
| sizeof(hpd_irq_dpcd_data), |
| "Status: "); |
| |
| + for (i = 0; i < MAX_PIPES; i++) { |
| + pipe_ctx = &link->dc->current_state->res_ctx.pipe_ctx[i]; |
| + if (pipe_ctx && pipe_ctx->stream && pipe_ctx->stream->link == link) |
| + link->dc->hwss.blank_stream(pipe_ctx); |
| + } |
| + |
| for (i = 0; i < MAX_PIPES; i++) { |
| pipe_ctx = &link->dc->current_state->res_ctx.pipe_ctx[i]; |
| if (pipe_ctx && pipe_ctx->stream && pipe_ctx->stream->link == link) |
| @@ -2904,6 +2910,12 @@ bool dc_link_handle_hpd_rx_irq(struct dc_link *link, union hpd_irq_data *out_hpd |
| if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST) |
| dc_link_reallocate_mst_payload(link); |
| |
| + for (i = 0; i < MAX_PIPES; i++) { |
| + pipe_ctx = &link->dc->current_state->res_ctx.pipe_ctx[i]; |
| + if (pipe_ctx && pipe_ctx->stream && pipe_ctx->stream->link == link) |
| + link->dc->hwss.unblank_stream(pipe_ctx, &previous_link_settings); |
| + } |
| + |
| status = false; |
| if (out_link_loss) |
| *out_link_loss = true; |
| -- |
| 2.20.1 |
| |