aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0530-drm-amd-dal-Clean-up-Stream-Encoder.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0530-drm-amd-dal-Clean-up-Stream-Encoder.patch')
-rw-r--r--common/recipes-kernel/linux/files/0530-drm-amd-dal-Clean-up-Stream-Encoder.patch743
1 files changed, 743 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0530-drm-amd-dal-Clean-up-Stream-Encoder.patch b/common/recipes-kernel/linux/files/0530-drm-amd-dal-Clean-up-Stream-Encoder.patch
new file mode 100644
index 00000000..0a114f85
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0530-drm-amd-dal-Clean-up-Stream-Encoder.patch
@@ -0,0 +1,743 @@
+From 3b98862c1d08b4230b91f9eb7e8c4aa1292b0cfe Mon Sep 17 00:00:00 2001
+From: Chris Park <Chris.Park@amd.com>
+Date: Thu, 26 Nov 2015 15:36:48 -0500
+Subject: [PATCH 0530/1110] drm/amd/dal: Clean up Stream Encoder
+
+Remove AFMT Memory Power State Programming.
+Refactor Setup.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 7 -
+ .../drm/amd/dal/dc/dce110/dce110_hw_sequencer.c | 27 +-
+ .../drm/amd/dal/dc/dce110/dce110_stream_encoder.c | 353 +++++++++------------
+ .../drm/amd/dal/dc/dce110/dce110_stream_encoder.h | 33 +-
+ drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h | 5 -
+ 5 files changed, 165 insertions(+), 260 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+index 5a59f38..ec85e87 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+@@ -1014,8 +1014,6 @@ enum dc_status core_link_enable(struct core_stream *stream)
+ }
+
+ if (stream->audio) {
+- stream->ctx->dc->hwss.set_afmt_memory_power_state(
+- stream->ctx, stream->stream_enc->id, true);
+ /* notify audio driver for audio modes of monitor */
+ dal_audio_enable_azalia_audio_jack_presence(stream->audio,
+ stream->stream_enc->id);
+@@ -1054,11 +1052,6 @@ enum dc_status core_link_disable(struct core_stream *stream)
+ stream->sink->link->link_enc, stream->signal))
+ status = DC_ERROR_UNEXPECTED;
+
+- if (stream->audio) {
+- dc->hwss.set_afmt_memory_power_state(
+- stream->ctx, stream->stream_enc->id, false);
+- }
+-
+ return status;
+ }
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
+index cf893c3..cbe27a4 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_hw_sequencer.c
+@@ -696,13 +696,11 @@ static void disable_stream(struct core_stream *stream)
+
+ if (dc_is_hdmi_signal(stream->signal))
+ dce110_stream_encoder_stop_hdmi_info_packets(
+- stream->stream_enc->ctx,
+- stream->stream_enc->id);
++ stream->stream_enc);
+
+ if (dc_is_dp_signal(stream->signal))
+ dce110_stream_encoder_stop_dp_info_packets(
+- stream->stream_enc->ctx,
+- stream->stream_enc->id);
++ stream->stream_enc);
+
+ if (stream->audio) {
+ /* mute audio */
+@@ -822,7 +820,6 @@ static enum dc_status allocate_mst_payload(struct core_stream *stream)
+
+ dce110_stream_encoder_set_mst_bandwidth(
+ stream_encoder,
+- stream_encoder->id,
+ avg_time_slots_per_mtp);
+
+ return DC_OK;
+@@ -845,7 +842,6 @@ static enum dc_status deallocate_mst_payload(struct core_stream *stream)
+ /* slot X.Y */
+ dce110_stream_encoder_set_mst_bandwidth(
+ stream_encoder,
+- stream_encoder->id,
+ avg_time_slots_per_mtp);
+
+ /* TODO: which component is responsible for remove payload table? */
+@@ -941,16 +937,6 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
+ stream->sink->link->link_enc,
+ stream->signal);
+
+- if (!dc_is_dp_signal(stream->signal))
+- if (ENCODER_RESULT_OK != dce110_stream_encoder_setup(
+- stream->stream_enc,
+- &stream->public.timing,
+- stream->signal,
+- stream->audio != NULL)) {
+- BREAK_TO_DEBUGGER();
+- return DC_ERROR_UNEXPECTED;
+- }
+-
+ if (dc_is_dp_signal(stream->signal))
+ dce110_stream_encoder_dp_set_stream_attribute(
+ stream->stream_enc,
+@@ -959,12 +945,15 @@ static enum dc_status apply_single_controller_ctx_to_hw(uint8_t controller_idx,
+ if (dc_is_hdmi_signal(stream->signal))
+ dce110_stream_encoder_hdmi_set_stream_attribute(
+ stream->stream_enc,
+- &stream->public.timing);
++ &stream->public.timing,
++ stream->audio != NULL);
+
+ if (dc_is_dvi_signal(stream->signal))
+ dce110_stream_encoder_dvi_set_stream_attribute(
+ stream->stream_enc,
+- &stream->public.timing);
++ &stream->public.timing,
++ (stream->signal == SIGNAL_TYPE_DVI_DUAL_LINK) ?
++ true : false);
+
+ if (stream->audio != NULL) {
+ if (AUDIO_RESULT_OK != dal_audio_setup(
+@@ -1842,8 +1831,6 @@ static const struct hw_sequencer_funcs dce110_funcs = {
+ .destruct_resource_pool = dce110_destruct_resource_pool,
+ .validate_with_context = dce110_validate_with_context,
+ .validate_bandwidth = dce110_validate_bandwidth,
+- .set_afmt_memory_power_state =
+- dce110_stream_encoder_set_afmt_memory_power_state,
+ .enable_display_pipe_clock_gating = dce110_enable_display_pipe_clock_gating,
+ .enable_display_power_gating = dce110_enable_display_power_gating,
+ .program_bw = dce110_program_bw
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c
+index ac1a948..95dbc35 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.c
+@@ -60,9 +60,9 @@ static void construct(
+
+ static void update_avi_info_packet(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ const struct encoder_info_packet *info_packet)
+ {
++ enum engine_id engine = enc->id;
+ const int32_t offset = fe_engine_offsets[engine];
+ uint32_t regval;
+ uint32_t addr;
+@@ -165,10 +165,10 @@ static void update_avi_info_packet(
+
+ static void update_generic_info_packet(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ uint32_t packet_index,
+ const struct encoder_info_packet *info_packet)
+ {
++ enum engine_id engine = enc->id;
+ uint32_t addr;
+ uint32_t regval;
+ /* choose which generic packet to use */
+@@ -267,10 +267,10 @@ static void update_generic_info_packet(
+
+ static void update_hdmi_info_packet(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ uint32_t packet_index,
+ const struct encoder_info_packet *info_packet)
+ {
++ enum engine_id engine = enc->id;
+ uint32_t cont, send, line;
+ uint32_t addr = fe_engine_offsets[engine];
+ uint32_t regval;
+@@ -278,7 +278,6 @@ static void update_hdmi_info_packet(
+ if (info_packet->valid) {
+ update_generic_info_packet(
+ enc,
+- engine,
+ packet_index,
+ info_packet);
+
+@@ -372,10 +371,10 @@ static void update_hdmi_info_packet(
+
+ static void update_dp_info_packet(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ uint32_t packet_index,
+ const struct encoder_info_packet *info_packet)
+ {
++ enum engine_id engine = enc->id;
+ const uint32_t addr = mmDP_SEC_CNTL + fe_engine_offsets[engine];
+
+ uint32_t value;
+@@ -383,7 +382,6 @@ static void update_dp_info_packet(
+ if (info_packet->valid)
+ update_generic_info_packet(
+ enc,
+- engine,
+ packet_index,
+ info_packet);
+
+@@ -445,10 +443,11 @@ static void update_dp_info_packet(
+ }
+
+ static void dp_steer_fifo_reset(
+- struct dc_context *ctx,
+- enum engine_id engine,
++ struct stream_encoder *enc,
+ bool reset)
+ {
++ struct dc_context *ctx = enc->ctx;
++ enum engine_id engine = enc->id;
+ const uint32_t addr = mmDP_STEER_FIFO + fe_engine_offsets[engine];
+
+ uint32_t value = dal_read_reg(ctx, addr);
+@@ -459,9 +458,9 @@ static void dp_steer_fifo_reset(
+ }
+
+ static void unblank_dp_output(
+- struct stream_encoder *enc,
+- enum engine_id engine)
++ struct stream_encoder *enc)
+ {
++ enum engine_id engine = enc->id;
+ uint32_t addr;
+ uint32_t value;
+
+@@ -472,7 +471,7 @@ static void unblank_dp_output(
+ dal_write_reg(enc->ctx, addr, value);
+
+ /* switch DP encoder to CRTC data */
+- dp_steer_fifo_reset(enc->ctx, engine, false);
++ dp_steer_fifo_reset(enc, false);
+
+ /* wait 100us for DIG/DP logic to prime
+ * (i.e. a few video lines) */
+@@ -497,10 +496,10 @@ static void unblank_dp_output(
+
+ static void setup_vid_stream(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ uint32_t m_vid,
+ uint32_t n_vid)
+ {
++ enum engine_id engine = enc->id;
+ uint32_t addr;
+ uint32_t value;
+
+@@ -530,11 +529,11 @@ static void setup_vid_stream(
+
+ static void set_tmds_stream_attributes(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ const struct dc_crtc_timing *timing,
+ bool is_dvi
+ )
+ {
++ enum engine_id engine = enc->id;
+ uint32_t addr = mmDIG_FE_CNTL + fe_engine_offsets[engine];
+ uint32_t value = dal_read_reg(enc->ctx, addr);
+
+@@ -572,9 +571,9 @@ static void set_tmds_stream_attributes(
+
+ static void set_dp_stream_attributes(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ const struct dc_crtc_timing *timing)
+ {
++ enum engine_id engine = enc->id;
+ const uint32_t addr = mmDP_PIXEL_FORMAT + fe_engine_offsets[engine];
+ uint32_t value = dal_read_reg(enc->ctx, addr);
+
+@@ -660,9 +659,9 @@ static void set_dp_stream_attributes(
+
+ static void setup_hdmi(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ const struct dc_crtc_timing *timing)
+ {
++ enum engine_id engine = enc->id;
+ uint32_t output_pixel_clock = timing->pix_clk_khz;
+ uint32_t value;
+ uint32_t addr;
+@@ -830,40 +829,147 @@ void dce110_stream_encoder_destroy(struct stream_encoder **enc)
+ *enc = NULL;
+ }
+
+-/*
+- * @brief
+- * Associate digital encoder with specified output transmitter
+- * and configure to output signal.
+- * Encoder will be activated later in enable_output()
+- */
+-enum encoder_result dce110_stream_encoder_setup(
++/* setup stream encoder in dp mode */
++void dce110_stream_encoder_dp_set_stream_attribute(
++ struct stream_encoder *enc,
++ struct dc_crtc_timing *crtc_timing)
++{
++ set_dp_stream_attributes(enc, crtc_timing);
++}
++
++/* setup stream encoder in hdmi mode */
++void dce110_stream_encoder_hdmi_set_stream_attribute(
+ struct stream_encoder *enc,
+ struct dc_crtc_timing *crtc_timing,
+- enum signal_type signal,
+ bool enable_audio)
+ {
+- struct bp_encoder_control cntl;
++ struct bp_encoder_control cntl = {0};
+
+ cntl.action = ENCODER_CONTROL_SETUP;
+ cntl.engine_id = enc->id;
+- cntl.signal = signal;
++ cntl.signal = SIGNAL_TYPE_HDMI_TYPE_A;
+ cntl.enable_dp_audio = enable_audio;
+ cntl.pixel_clock = crtc_timing->pix_clk_khz;
+- cntl.lanes_number = (signal == SIGNAL_TYPE_DVI_DUAL_LINK) ?
++ cntl.lanes_number = LANE_COUNT_FOUR;
++ cntl.color_depth = crtc_timing->display_color_depth;
++
++ if (dal_bios_parser_encoder_control(
++ enc->bp, &cntl) != BP_RESULT_OK)
++ return;
++
++
++ set_tmds_stream_attributes(enc, crtc_timing, false);
++
++ /* setup HDMI engine */
++ setup_hdmi(enc, crtc_timing);
++}
++
++/* setup stream encoder in dvi mode */
++void dce110_stream_encoder_dvi_set_stream_attribute(
++ struct stream_encoder *enc,
++ struct dc_crtc_timing *crtc_timing,
++ bool is_dual_link)
++{
++ struct bp_encoder_control cntl = {0};
++
++ cntl.action = ENCODER_CONTROL_SETUP;
++ cntl.engine_id = enc->id;
++ cntl.signal = is_dual_link ?
++ SIGNAL_TYPE_DVI_DUAL_LINK :
++ SIGNAL_TYPE_DVI_SINGLE_LINK;
++ cntl.enable_dp_audio = false;
++ cntl.pixel_clock = crtc_timing->pix_clk_khz;
++ cntl.lanes_number = (is_dual_link) ?
+ LANE_COUNT_EIGHT : LANE_COUNT_FOUR;
+ cntl.color_depth = crtc_timing->display_color_depth;
+
+ if (dal_bios_parser_encoder_control(
+ enc->bp, &cntl) != BP_RESULT_OK)
+- return ENCODER_RESULT_ERROR;
++ return;
+
+- return ENCODER_RESULT_OK;
++ set_tmds_stream_attributes(enc, crtc_timing, true);
++}
++
++void dce110_stream_encoder_set_mst_bandwidth(
++ struct stream_encoder *enc,
++ struct fixed31_32 avg_time_slots_per_mtp)
++{
++ uint32_t x = dal_fixed31_32_floor(
++ avg_time_slots_per_mtp);
++
++ uint32_t y = dal_fixed31_32_ceil(
++ dal_fixed31_32_shl(
++ dal_fixed31_32_sub_int(
++ avg_time_slots_per_mtp,
++ x),
++ 26));
++ enum engine_id engine = enc->id;
++
++ {
++ const uint32_t addr = mmDP_MSE_RATE_CNTL +
++ fe_engine_offsets[engine];
++ uint32_t value = dal_read_reg(enc->ctx, addr);
++
++ set_reg_field_value(
++ value,
++ x,
++ DP_MSE_RATE_CNTL,
++ DP_MSE_RATE_X);
++
++ set_reg_field_value(
++ value,
++ y,
++ DP_MSE_RATE_CNTL,
++ DP_MSE_RATE_Y);
++
++ dal_write_reg(enc->ctx, addr, value);
++ }
++
++ /* wait for update to be completed on the link */
++ /* i.e. DP_MSE_RATE_UPDATE_PENDING field (read only) */
++ /* is reset to 0 (not pending) */
++ {
++ const uint32_t addr = mmDP_MSE_RATE_UPDATE +
++ fe_engine_offsets[engine];
++ uint32_t value, field;
++ uint32_t retries = 0;
++
++ do {
++ value = dal_read_reg(enc->ctx, addr);
++
++ field = get_reg_field_value(
++ value,
++ DP_MSE_RATE_UPDATE,
++ DP_MSE_RATE_UPDATE_PENDING);
++
++ if (!(field &
++ DP_MSE_RATE_UPDATE__DP_MSE_RATE_UPDATE_PENDING_MASK))
++ break;
++
++ dc_service_delay_in_microseconds(enc->ctx, 10);
++
++ ++retries;
++ } while (retries < DP_MST_UPDATE_MAX_RETRY);
++ }
++}
++
++void dce110_stream_encoder_update_hdmi_info_packets(
++ struct stream_encoder *enc,
++ const struct encoder_info_frame *info_frame)
++{
++ update_avi_info_packet(
++ enc,
++ &info_frame->avi);
++ update_hdmi_info_packet(enc, 0, &info_frame->vendor);
++ update_hdmi_info_packet(enc, 1, &info_frame->gamut);
++ update_hdmi_info_packet(enc, 2, &info_frame->spd);
+ }
+
+ void dce110_stream_encoder_stop_hdmi_info_packets(
+- struct dc_context *ctx,
+- enum engine_id engine)
++ struct stream_encoder *enc)
+ {
++ struct dc_context *ctx = enc->ctx;
++ enum engine_id engine = enc->id;
+ uint32_t addr = 0;
+ uint32_t value = 0;
+ uint32_t offset = fe_engine_offsets[engine];
+@@ -962,12 +1068,19 @@ void dce110_stream_encoder_stop_hdmi_info_packets(
+
+ dal_write_reg(ctx, addr, value);
+ }
++void dce110_stream_encoder_update_dp_info_packets(
++ struct stream_encoder *enc,
++ const struct encoder_info_frame *info_frame)
++{
++ update_dp_info_packet(enc, 0, &info_frame->vsc);
++}
+
+ void dce110_stream_encoder_stop_dp_info_packets(
+- struct dc_context *ctx,
+- enum engine_id engine)
++ struct stream_encoder *enc)
+ {
+ /* stop generic packets on DP */
++ struct dc_context *ctx = enc->ctx;
++ enum engine_id engine = enc->id;
+ uint32_t offset = fe_engine_offsets[engine];
+ const uint32_t addr = mmDP_SEC_CNTL + offset;
+ uint32_t value = dal_read_reg(ctx, addr);
+@@ -994,175 +1107,6 @@ void dce110_stream_encoder_stop_dp_info_packets(
+ dal_write_reg(ctx, addr, value);
+ }
+
+-/* setup stream encoder in dp mode */
+-void dce110_stream_encoder_dp_set_stream_attribute(
+- struct stream_encoder *enc,
+- struct dc_crtc_timing *crtc_timing)
+-{
+- set_dp_stream_attributes(enc, enc->id, crtc_timing);
+-}
+-
+-/* setup stream encoder in hdmi mode */
+-void dce110_stream_encoder_hdmi_set_stream_attribute(
+- struct stream_encoder *enc,
+- struct dc_crtc_timing *crtc_timing)
+-{
+- set_tmds_stream_attributes(enc, enc->id, crtc_timing, false);
+-
+- /* setup HDMI engine */
+- setup_hdmi(
+- enc, enc->id, crtc_timing);
+-}
+-
+-/* setup stream encoder in dvi mode */
+-void dce110_stream_encoder_dvi_set_stream_attribute(
+- struct stream_encoder *enc,
+- struct dc_crtc_timing *crtc_timing)
+-{
+- set_tmds_stream_attributes(enc, enc->id, crtc_timing, true);
+-}
+-
+-void dce110_stream_encoder_set_mst_bandwidth(
+- struct stream_encoder *enc,
+- enum engine_id engine,
+- struct fixed31_32 avg_time_slots_per_mtp)
+-{
+- uint32_t x = dal_fixed31_32_floor(
+- avg_time_slots_per_mtp);
+-
+- uint32_t y = dal_fixed31_32_ceil(
+- dal_fixed31_32_shl(
+- dal_fixed31_32_sub_int(
+- avg_time_slots_per_mtp,
+- x),
+- 26));
+-
+- {
+- const uint32_t addr = mmDP_MSE_RATE_CNTL +
+- fe_engine_offsets[engine];
+- uint32_t value = dal_read_reg(enc->ctx, addr);
+-
+- set_reg_field_value(
+- value,
+- x,
+- DP_MSE_RATE_CNTL,
+- DP_MSE_RATE_X);
+-
+- set_reg_field_value(
+- value,
+- y,
+- DP_MSE_RATE_CNTL,
+- DP_MSE_RATE_Y);
+-
+- dal_write_reg(enc->ctx, addr, value);
+- }
+-
+- /* wait for update to be completed on the link
+- * i.e. DP_MSE_RATE_UPDATE_PENDING field (read only)
+- * is reset to 0 (not pending) */
+- {
+- const uint32_t addr = mmDP_MSE_RATE_UPDATE +
+- fe_engine_offsets[engine];
+- uint32_t value, field;
+- uint32_t retries = 0;
+-
+- do {
+- value = dal_read_reg(enc->ctx, addr);
+-
+- field = get_reg_field_value(
+- value,
+- DP_MSE_RATE_UPDATE,
+- DP_MSE_RATE_UPDATE_PENDING);
+-
+- if (!(field &
+- DP_MSE_RATE_UPDATE__DP_MSE_RATE_UPDATE_PENDING_MASK))
+- break;
+-
+- dc_service_delay_in_microseconds(enc->ctx, 10);
+-
+- ++retries;
+- } while (retries < DP_MST_UPDATE_MAX_RETRY);
+- }
+-}
+-
+-
+-/**
+-* set_afmt_memory_power_state
+-*
+-* @brief
+-* Power up audio formatter memory that is mapped to specified DIG
+-*/
+-void dce110_stream_encoder_set_afmt_memory_power_state(
+- const struct dc_context *ctx,
+- enum engine_id id,
+- bool enable)
+-{
+- uint32_t value;
+- uint32_t mem_pwr_force;
+-
+- value = dal_read_reg(ctx, mmDCO_MEM_PWR_CTRL);
+-
+- if (enable)
+- mem_pwr_force = 0;
+- else
+- mem_pwr_force = 3;
+-
+- /* force shutdown mode for appropriate AFMT memory */
+- switch (id) {
+- case ENGINE_ID_DIGA:
+- set_reg_field_value(
+- value,
+- mem_pwr_force,
+- DCO_MEM_PWR_CTRL,
+- HDMI0_MEM_PWR_FORCE);
+- break;
+- case ENGINE_ID_DIGB:
+- set_reg_field_value(
+- value,
+- mem_pwr_force,
+- DCO_MEM_PWR_CTRL,
+- HDMI1_MEM_PWR_FORCE);
+- break;
+- case ENGINE_ID_DIGC:
+- set_reg_field_value(
+- value,
+- mem_pwr_force,
+- DCO_MEM_PWR_CTRL,
+- HDMI2_MEM_PWR_FORCE);
+- break;
+- default:
+- dal_logger_write(
+- ctx->logger,
+- LOG_MAJOR_WARNING,
+- LOG_MINOR_COMPONENT_ENCODER,
+- "%s: Invalid Engine Id\n",
+- __func__);
+- break;
+- }
+-
+- dal_write_reg(ctx, mmDCO_MEM_PWR_CTRL, value);
+-}
+-
+-void dce110_stream_encoder_update_hdmi_info_packets(
+- struct stream_encoder *enc,
+- const struct encoder_info_frame *info_frame)
+-{
+- update_avi_info_packet(
+- enc,
+- enc->id,
+- &info_frame->avi);
+- update_hdmi_info_packet(enc, enc->id, 0, &info_frame->vendor);
+- update_hdmi_info_packet(enc, enc->id, 1, &info_frame->gamut);
+- update_hdmi_info_packet(enc, enc->id, 2, &info_frame->spd);
+-}
+-
+-void dce110_stream_encoder_update_dp_info_packets(
+- struct stream_encoder *enc,
+- const struct encoder_info_frame *info_frame)
+-{
+- update_dp_info_packet(enc, enc->id, 0, &info_frame->vsc);
+-}
+-
+ void dce110_stream_encoder_dp_blank(
+ struct stream_encoder *enc)
+ {
+@@ -1219,7 +1163,7 @@ void dce110_stream_encoder_dp_blank(
+ * the polling. If we set DP_STEER_FIFO_RESET before DP stream blank is
+ * complete, stream status will be stuck in video stream enabled state,
+ * i.e. DP_VID_STREAM_STATUS stuck at 1. */
+- dp_steer_fifo_reset(enc->ctx, engine, true);
++ dp_steer_fifo_reset(enc, true);
+ }
+
+ /* output video stream to link encoder */
+@@ -1243,10 +1187,9 @@ void dce110_stream_encoder_dp_unblank(
+
+ m_vid = (uint32_t) m_vid_l;
+
+- setup_vid_stream(enc,
+- enc->id, m_vid, n_vid);
++ setup_vid_stream(enc, m_vid, n_vid);
+ }
+
+- unblank_dp_output(enc, enc->id);
++ unblank_dp_output(enc);
+ }
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h
+index d4477d1..a520691 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_stream_encoder.h
+@@ -38,21 +38,6 @@ struct stream_encoder *dce110_stream_encoder_create(
+ void dce110_stream_encoder_destroy(struct stream_encoder **enc);
+
+ /***** HW programming ***********/
+-enum encoder_result dce110_stream_encoder_setup(
+- struct stream_encoder *enc,
+- struct dc_crtc_timing *crtc_timing,
+- enum signal_type signal,
+- bool enable_audio);
+-
+-void dce110_stream_encoder_stop_hdmi_info_packets(
+- struct dc_context *ctx,
+- enum engine_id engine);
+-
+-void dce110_stream_encoder_stop_dp_info_packets(
+- struct dc_context *ctx,
+- enum engine_id engine);
+-
+-
+ /* setup stream encoder in dp mode */
+ void dce110_stream_encoder_dp_set_stream_attribute(
+ struct stream_encoder *enc,
+@@ -61,32 +46,34 @@ void dce110_stream_encoder_dp_set_stream_attribute(
+ /* setup stream encoder in hdmi mode */
+ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ struct stream_encoder *enc,
+- struct dc_crtc_timing *crtc_timing);
++ struct dc_crtc_timing *crtc_timing,
++ bool enable_audio);
+
+ /* setup stream encoder in dvi mode */
+ void dce110_stream_encoder_dvi_set_stream_attribute(
+ struct stream_encoder *enc,
+- struct dc_crtc_timing *crtc_timing);
++ struct dc_crtc_timing *crtc_timing,
++ bool is_dual_link);
+
+ /* set throttling for DP MST */
+ void dce110_stream_encoder_set_mst_bandwidth(
+ struct stream_encoder *enc,
+- enum engine_id engine,
+ struct fixed31_32 avg_time_slots_per_mtp);
+
+-void dce110_stream_encoder_set_afmt_memory_power_state(
+- const struct dc_context *ctx,
+- enum engine_id id,
+- bool enable);
+-
+ void dce110_stream_encoder_update_hdmi_info_packets(
+ struct stream_encoder *enc,
+ const struct encoder_info_frame *info_frame);
+
++void dce110_stream_encoder_stop_hdmi_info_packets(
++ struct stream_encoder *enc);
++
+ void dce110_stream_encoder_update_dp_info_packets(
+ struct stream_encoder *enc,
+ const struct encoder_info_frame *info_frame);
+
++void dce110_stream_encoder_stop_dp_info_packets(
++ struct stream_encoder *enc);
++
+ /* output blank/idle stream to link encoder */
+ void dce110_stream_encoder_dp_blank(
+ struct stream_encoder *enc);
+diff --git a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
+index 2c5738f..99a0458 100644
+--- a/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
++++ b/drivers/gpu/drm/amd/dal/dc/inc/hw_sequencer.h
+@@ -134,11 +134,6 @@ struct hw_sequencer_funcs {
+ struct bios_parser *bp,
+ enum pipe_gating_control power_gating);
+
+- void (*set_afmt_memory_power_state)(
+- const struct dc_context *ctx,
+- enum engine_id id,
+- bool enable);
+-
+ /* resource management and validation*/
+ bool (*construct_resource_pool)(
+ struct adapter_service *adapter_serv,
+--
+2.7.4
+