Commit 430bb83d authored by Xu, Jinze's avatar Xu, Jinze Committed by Alex Deucher

drm/amd/display: Reset fifo after enable otg

[Why]
In fast boot sequence, when change dispclk, otg is disabled but digfe
is enabled. This may cause dig fifo error.

[How]
Reset dig fifo after enable otg.
Reviewed-by: default avatarJun Lei <Jun.Lei@amd.com>
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarWayne Lin <wayne.lin@amd.com>
Signed-off-by: default avatarJinZe.Xu <JinZe.Xu@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent d26c4ffb
...@@ -1602,6 +1602,11 @@ static enum dc_status apply_single_controller_ctx_to_hw( ...@@ -1602,6 +1602,11 @@ static enum dc_status apply_single_controller_ctx_to_hw(
pipe_ctx->stream_res.stream_enc, pipe_ctx->stream_res.stream_enc,
pipe_ctx->stream_res.tg->inst); pipe_ctx->stream_res.tg->inst);
if (dc_is_dp_signal(pipe_ctx->stream->signal) &&
pipe_ctx->stream_res.stream_enc->funcs->reset_fifo)
pipe_ctx->stream_res.stream_enc->funcs->reset_fifo(
pipe_ctx->stream_res.stream_enc);
if (dc_is_dp_signal(pipe_ctx->stream->signal)) if (dc_is_dp_signal(pipe_ctx->stream->signal))
dp_source_sequence_trace(link, DPCD_SOURCE_SEQ_AFTER_CONNECT_DIG_FE_OTG); dp_source_sequence_trace(link, DPCD_SOURCE_SEQ_AFTER_CONNECT_DIG_FE_OTG);
......
...@@ -902,6 +902,19 @@ void enc1_stream_encoder_stop_dp_info_packets( ...@@ -902,6 +902,19 @@ void enc1_stream_encoder_stop_dp_info_packets(
} }
void enc1_stream_encoder_reset_fifo(
struct stream_encoder *enc)
{
struct dcn10_stream_encoder *enc1 = DCN10STRENC_FROM_STRENC(enc);
/* set DIG_START to 0x1 to reset FIFO */
REG_UPDATE(DIG_FE_CNTL, DIG_START, 1);
udelay(100);
/* write 0 to take the FIFO out of reset */
REG_UPDATE(DIG_FE_CNTL, DIG_START, 0);
}
void enc1_stream_encoder_dp_blank( void enc1_stream_encoder_dp_blank(
struct dc_link *link, struct dc_link *link,
struct stream_encoder *enc) struct stream_encoder *enc)
...@@ -1587,6 +1600,8 @@ static const struct stream_encoder_funcs dcn10_str_enc_funcs = { ...@@ -1587,6 +1600,8 @@ static const struct stream_encoder_funcs dcn10_str_enc_funcs = {
enc1_stream_encoder_send_immediate_sdp_message, enc1_stream_encoder_send_immediate_sdp_message,
.stop_dp_info_packets = .stop_dp_info_packets =
enc1_stream_encoder_stop_dp_info_packets, enc1_stream_encoder_stop_dp_info_packets,
.reset_fifo =
enc1_stream_encoder_reset_fifo,
.dp_blank = .dp_blank =
enc1_stream_encoder_dp_blank, enc1_stream_encoder_dp_blank,
.dp_unblank = .dp_unblank =
......
...@@ -626,6 +626,9 @@ void enc1_stream_encoder_send_immediate_sdp_message( ...@@ -626,6 +626,9 @@ void enc1_stream_encoder_send_immediate_sdp_message(
void enc1_stream_encoder_stop_dp_info_packets( void enc1_stream_encoder_stop_dp_info_packets(
struct stream_encoder *enc); struct stream_encoder *enc);
void enc1_stream_encoder_reset_fifo(
struct stream_encoder *enc);
void enc1_stream_encoder_dp_blank( void enc1_stream_encoder_dp_blank(
struct dc_link *link, struct dc_link *link,
struct stream_encoder *enc); struct stream_encoder *enc);
......
...@@ -593,6 +593,8 @@ static const struct stream_encoder_funcs dcn20_str_enc_funcs = { ...@@ -593,6 +593,8 @@ static const struct stream_encoder_funcs dcn20_str_enc_funcs = {
enc1_stream_encoder_send_immediate_sdp_message, enc1_stream_encoder_send_immediate_sdp_message,
.stop_dp_info_packets = .stop_dp_info_packets =
enc1_stream_encoder_stop_dp_info_packets, enc1_stream_encoder_stop_dp_info_packets,
.reset_fifo =
enc1_stream_encoder_reset_fifo,
.dp_blank = .dp_blank =
enc1_stream_encoder_dp_blank, enc1_stream_encoder_dp_blank,
.dp_unblank = .dp_unblank =
......
...@@ -805,6 +805,8 @@ static const struct stream_encoder_funcs dcn30_str_enc_funcs = { ...@@ -805,6 +805,8 @@ static const struct stream_encoder_funcs dcn30_str_enc_funcs = {
enc3_stream_encoder_update_dp_info_packets, enc3_stream_encoder_update_dp_info_packets,
.stop_dp_info_packets = .stop_dp_info_packets =
enc1_stream_encoder_stop_dp_info_packets, enc1_stream_encoder_stop_dp_info_packets,
.reset_fifo =
enc1_stream_encoder_reset_fifo,
.dp_blank = .dp_blank =
enc1_stream_encoder_dp_blank, enc1_stream_encoder_dp_blank,
.dp_unblank = .dp_unblank =
......
...@@ -164,6 +164,10 @@ struct stream_encoder_funcs { ...@@ -164,6 +164,10 @@ struct stream_encoder_funcs {
void (*stop_dp_info_packets)( void (*stop_dp_info_packets)(
struct stream_encoder *enc); struct stream_encoder *enc);
void (*reset_fifo)(
struct stream_encoder *enc
);
void (*dp_blank)( void (*dp_blank)(
struct dc_link *link, struct dc_link *link,
struct stream_encoder *enc); struct stream_encoder *enc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment