aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0718-drm-amd-dal-Re-use-stream-encoder-programming-betwee.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0718-drm-amd-dal-Re-use-stream-encoder-programming-betwee.patch')
-rw-r--r--common/recipes-kernel/linux/files/0718-drm-amd-dal-Re-use-stream-encoder-programming-betwee.patch548
1 files changed, 548 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0718-drm-amd-dal-Re-use-stream-encoder-programming-betwee.patch b/common/recipes-kernel/linux/files/0718-drm-amd-dal-Re-use-stream-encoder-programming-betwee.patch
new file mode 100644
index 00000000..8dbebf04
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0718-drm-amd-dal-Re-use-stream-encoder-programming-betwee.patch
@@ -0,0 +1,548 @@
+From f73ae7e29da9a00a3131c7e5a759a2a9e1adfae5 Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Thu, 21 Jan 2016 16:38:09 -0500
+Subject: [PATCH 0718/1110] drm/amd/dal: Re-use stream encoder programming
+ between DCEs
+
+Pass register values into stream_encoder HW programming code
+so we can reuse it between DCEs.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ .../gpu/drm/amd/dal/dc/dce110/dce110_resource.c | 58 +++++++++-----
+ .../drm/amd/dal/dc/dce110/dce110_stream_encoder.c | 89 +++++++++++-----------
+ .../drm/amd/dal/dc/dce110/dce110_stream_encoder.h | 36 +++++++--
+ 3 files changed, 113 insertions(+), 70 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+index adc1668..823926c 100644
+--- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_resource.c
+@@ -91,21 +91,6 @@ static const struct dce110_timing_generator_offsets dce110_tg_offsets[] = {
+ }
+ };
+
+-static const struct dce110_stream_enc_offsets dce110_str_enc_offsets[] = {
+- {
+- .dig = (mmDIG0_DIG_FE_CNTL - mmDIG_FE_CNTL),
+- .dp = (mmDP0_DP_SEC_CNTL - mmDP_SEC_CNTL)
+- },
+- {
+- .dig = (mmDIG1_DIG_FE_CNTL - mmDIG_FE_CNTL),
+- .dp = (mmDP1_DP_SEC_CNTL - mmDP_SEC_CNTL)
+- },
+- {
+- .dig = (mmDIG2_DIG_FE_CNTL - mmDIG_FE_CNTL),
+- .dp = (mmDP2_DP_SEC_CNTL - mmDP_SEC_CNTL)
+- }
+-};
+-
+ static const struct dce110_mem_input_reg_offsets dce110_mi_reg_offsets[] = {
+ {
+ .dcp = (mmDCP0_GRPH_CONTROL - mmGRPH_CONTROL),
+@@ -218,6 +203,43 @@ static const struct dce110_link_enc_registers link_enc_regs[] = {
+ link_regs(2)
+ };
+
++#define stream_enc_regs(id)\
++[id] = {\
++ .AFMT_AVI_INFO0 = mmDIG ## id ## _AFMT_AVI_INFO0,\
++ .AFMT_AVI_INFO1 = mmDIG ## id ## _AFMT_AVI_INFO1,\
++ .AFMT_AVI_INFO2 = mmDIG ## id ## _AFMT_AVI_INFO2,\
++ .AFMT_AVI_INFO3 = mmDIG ## id ## _AFMT_AVI_INFO3,\
++ .AFMT_GENERIC_0 = mmDIG ## id ## _AFMT_GENERIC_0,\
++ .AFMT_GENERIC_7 = mmDIG ## id ## _AFMT_GENERIC_7,\
++ .AFMT_GENERIC_HDR = mmDIG ## id ## _AFMT_GENERIC_HDR,\
++ .AFMT_INFOFRAME_CONTROL0 = mmDIG ## id ## _AFMT_INFOFRAME_CONTROL0,\
++ .AFMT_VBI_PACKET_CONTROL = mmDIG ## id ## _AFMT_VBI_PACKET_CONTROL,\
++ .DIG_FE_CNTL = mmDIG ## id ## _DIG_FE_CNTL,\
++ .DP_MSE_RATE_CNTL = mmDP ## id ## _DP_MSE_RATE_CNTL,\
++ .DP_MSE_RATE_UPDATE = mmDP ## id ## _DP_MSE_RATE_UPDATE,\
++ .DP_PIXEL_FORMAT = mmDP ## id ## _DP_PIXEL_FORMAT,\
++ .DP_SEC_CNTL = mmDP ## id ## _DP_SEC_CNTL,\
++ .DP_STEER_FIFO = mmDP ## id ## _DP_STEER_FIFO,\
++ .DP_VID_M = mmDP ## id ## _DP_VID_M,\
++ .DP_VID_N = mmDP ## id ## _DP_VID_N,\
++ .DP_VID_STREAM_CNTL = mmDP ## id ## _DP_VID_STREAM_CNTL,\
++ .DP_VID_TIMING = mmDP ## id ## _DP_VID_TIMING,\
++ .HDMI_CONTROL = mmDIG ## id ## _HDMI_CONTROL,\
++ .HDMI_GC = mmDIG ## id ## _HDMI_GC,\
++ .HDMI_GENERIC_PACKET_CONTROL0 = mmDIG ## id ## _HDMI_GENERIC_PACKET_CONTROL0,\
++ .HDMI_GENERIC_PACKET_CONTROL1 = mmDIG ## id ## _HDMI_GENERIC_PACKET_CONTROL1,\
++ .HDMI_INFOFRAME_CONTROL0 = mmDIG ## id ## _HDMI_INFOFRAME_CONTROL0,\
++ .HDMI_INFOFRAME_CONTROL1 = mmDIG ## id ## _HDMI_INFOFRAME_CONTROL1,\
++ .HDMI_VBI_PACKET_CONTROL = mmDIG ## id ## _HDMI_VBI_PACKET_CONTROL,\
++ .TMDS_CNTL = mmDIG ## id ## _TMDS_CNTL\
++}
++
++static const struct dce110_stream_enc_registers stream_enc_regs[] = {
++ stream_enc_regs(0),
++ stream_enc_regs(1),
++ stream_enc_regs(2)
++};
++
+ static struct timing_generator *dce110_timing_generator_create(
+ struct adapter_service *as,
+ struct dc_context *ctx,
+@@ -242,7 +264,7 @@ static struct stream_encoder *dce110_stream_encoder_create(
+ enum engine_id eng_id,
+ struct dc_context *ctx,
+ struct dc_bios *bp,
+- const struct dce110_stream_enc_offsets *offsets)
++ const struct dce110_stream_enc_registers *regs)
+ {
+ struct dce110_stream_encoder *enc110 =
+ dc_service_alloc(ctx, sizeof(struct dce110_stream_encoder));
+@@ -250,7 +272,7 @@ static struct stream_encoder *dce110_stream_encoder_create(
+ if (!enc110)
+ return NULL;
+
+- if (dce110_stream_encoder_construct(enc110, ctx, bp, eng_id, offsets))
++ if (dce110_stream_encoder_construct(enc110, ctx, bp, eng_id, regs))
+ return &enc110->base;
+
+ BREAK_TO_DEBUGGER();
+@@ -501,7 +523,7 @@ bool dce110_construct_resource_pool(
+ i, dc->ctx,
+ dal_adapter_service_get_bios_parser(
+ adapter_serv),
+- &dce110_str_enc_offsets[i]);
++ &stream_enc_regs[i]);
+ if (pool->stream_enc[i] == NULL) {
+ BREAK_TO_DEBUGGER();
+ dal_error("DC: failed to create stream_encoder!\n");
+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 87f59ee..5b432d8 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
+@@ -30,11 +30,8 @@
+ #include "dce/dce_11_0_sh_mask.h"
+ #include "dce/dce_11_0_enum.h"
+
+-#define DIG_REG(reg)\
+- (reg + enc110->offsets.dig)
+-
+-#define DP_REG(reg)\
+- (reg + enc110->offsets.dig)
++#define LINK_REG(reg)\
++ (enc110->regs->reg)
+
+ #define VBI_LINE_0 0
+ #define DP_BLANK_MAX_RETRY 20
+@@ -82,7 +79,7 @@ static void dce110_update_generic_info_packet(
+ uint32_t regval;
+ /* choose which generic packet to use */
+ {
+- addr = DIG_REG(mmAFMT_VBI_PACKET_CONTROL);
++ addr = LINK_REG(AFMT_VBI_PACKET_CONTROL);
+
+ regval = dal_read_reg(ctx, addr);
+
+@@ -98,7 +95,7 @@ static void dce110_update_generic_info_packet(
+ /* write generic packet header
+ * (4th byte is for GENERIC0 only) */
+ {
+- addr = DIG_REG(mmAFMT_GENERIC_HDR);
++ addr = LINK_REG(AFMT_GENERIC_HDR);
+
+ regval = 0;
+
+@@ -138,7 +135,7 @@ static void dce110_update_generic_info_packet(
+
+ uint32_t counter = 0;
+
+- addr = DIG_REG(mmAFMT_GENERIC_0);
++ addr = LINK_REG(AFMT_GENERIC_0);
+
+ do {
+ dal_write_reg(ctx, addr++, *content++);
+@@ -147,7 +144,7 @@ static void dce110_update_generic_info_packet(
+ } while (counter < 7);
+ }
+
+- addr = DIG_REG(mmAFMT_GENERIC_7);
++ addr = LINK_REG(AFMT_GENERIC_7);
+
+ dal_write_reg(
+ ctx,
+@@ -156,7 +153,7 @@ static void dce110_update_generic_info_packet(
+
+ /* force double-buffered packet update */
+ {
+- addr = DIG_REG(mmAFMT_VBI_PACKET_CONTROL);
++ addr = LINK_REG(AFMT_VBI_PACKET_CONTROL);
+
+ regval = dal_read_reg(ctx, addr);
+
+@@ -210,11 +207,11 @@ static void dce110_update_hdmi_info_packet(
+ switch (packet_index) {
+ case 0:
+ case 1:
+- addr = DIG_REG(mmHDMI_GENERIC_PACKET_CONTROL0);
++ addr = LINK_REG(HDMI_GENERIC_PACKET_CONTROL0);
+ break;
+ case 2:
+ case 3:
+- addr = DIG_REG(mmHDMI_GENERIC_PACKET_CONTROL1);
++ addr = LINK_REG(HDMI_GENERIC_PACKET_CONTROL1);
+ break;
+ default:
+ /* invalid HW packet index */
+@@ -285,7 +282,7 @@ bool dce110_stream_encoder_construct(
+ struct dc_context *ctx,
+ struct dc_bios *bp,
+ enum engine_id eng_id,
+- const struct dce110_stream_enc_offsets *offsets)
++ const struct dce110_stream_enc_registers *regs)
+ {
+ if (!enc110)
+ return false;
+@@ -296,7 +293,7 @@ bool dce110_stream_encoder_construct(
+ enc110->base.ctx = ctx;
+ enc110->base.id = eng_id;
+ enc110->base.bp = bp;
+- enc110->offsets = *offsets;
++ enc110->regs = regs;
+
+ return true;
+ }
+@@ -308,7 +305,7 @@ void dce110_stream_encoder_dp_set_stream_attribute(
+ {
+ struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
+ struct dc_context *ctx = enc110->base.ctx;
+- const uint32_t addr = DP_REG(mmDP_PIXEL_FORMAT);
++ const uint32_t addr = LINK_REG(DP_PIXEL_FORMAT);
+ uint32_t value = dal_read_reg(ctx, addr);
+
+ /* set pixel encoding */
+@@ -416,7 +413,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ enc110->base.bp, &cntl) != BP_RESULT_OK)
+ return;
+
+- addr = DIG_REG(mmDIG_FE_CNTL);
++ addr = LINK_REG(DIG_FE_CNTL);
+ value = dal_read_reg(ctx, addr);
+
+ switch (crtc_timing->pixel_encoding) {
+@@ -431,7 +428,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ dal_write_reg(ctx, addr, value);
+
+ /* setup HDMI engine */
+- addr = DIG_REG(mmHDMI_CONTROL);
++ addr = LINK_REG(HDMI_CONTROL);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 1, HDMI_CONTROL, HDMI_PACKET_GEN_VERSION);
+ set_reg_field_value(value, 1, HDMI_CONTROL, HDMI_KEEPOUT_MODE);
+@@ -528,7 +525,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+
+ dal_write_reg(ctx, addr, value);
+
+- addr = DIG_REG(mmHDMI_VBI_PACKET_CONTROL);
++ addr = LINK_REG(HDMI_VBI_PACKET_CONTROL);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 1, HDMI_VBI_PACKET_CONTROL, HDMI_GC_CONT);
+ set_reg_field_value(value, 1, HDMI_VBI_PACKET_CONTROL, HDMI_GC_SEND);
+@@ -537,7 +534,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ dal_write_reg(ctx, addr, value);
+
+ /* following belongs to audio */
+- addr = DIG_REG(mmHDMI_INFOFRAME_CONTROL0);
++ addr = LINK_REG(HDMI_INFOFRAME_CONTROL0);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(
+ value,
+@@ -546,7 +543,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ HDMI_AUDIO_INFO_SEND);
+ dal_write_reg(ctx, addr, value);
+
+- addr = DIG_REG(mmAFMT_INFOFRAME_CONTROL0);
++ addr = LINK_REG(AFMT_INFOFRAME_CONTROL0);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(
+ value,
+@@ -555,7 +552,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ AFMT_AUDIO_INFO_UPDATE);
+ dal_write_reg(ctx, addr, value);
+
+- addr = DIG_REG(mmHDMI_INFOFRAME_CONTROL1);
++ addr = LINK_REG(HDMI_INFOFRAME_CONTROL1);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(
+ value,
+@@ -564,7 +561,7 @@ void dce110_stream_encoder_hdmi_set_stream_attribute(
+ HDMI_AUDIO_INFO_LINE);
+ dal_write_reg(ctx, addr, value);
+
+- addr = DIG_REG(mmHDMI_GC);
++ addr = LINK_REG(HDMI_GC);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 0, HDMI_GC, HDMI_GC_AVMUTE);
+ dal_write_reg(ctx, addr, value);
+@@ -578,7 +575,7 @@ void dce110_stream_encoder_dvi_set_stream_attribute(
+ {
+ struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
+ struct dc_context *ctx = enc110->base.ctx;
+- uint32_t addr = DIG_REG(mmDIG_FE_CNTL);
++ uint32_t addr = LINK_REG(DIG_FE_CNTL);
+ uint32_t value = dal_read_reg(ctx, addr);
+ struct bp_encoder_control cntl = {0};
+
+@@ -648,7 +645,7 @@ void dce110_stream_encoder_set_mst_bandwidth(
+ 26));
+
+ {
+- addr = DP_REG(mmDP_MSE_RATE_CNTL);
++ addr = LINK_REG(DP_MSE_RATE_CNTL);
+ value = dal_read_reg(ctx, addr);
+
+ set_reg_field_value(
+@@ -670,7 +667,7 @@ void dce110_stream_encoder_set_mst_bandwidth(
+ /* i.e. DP_MSE_RATE_UPDATE_PENDING field (read only) */
+ /* is reset to 0 (not pending) */
+ {
+- addr = DP_REG(mmDP_MSE_RATE_UPDATE);
++ addr = LINK_REG(DP_MSE_RATE_UPDATE);
+
+ do {
+ value = dal_read_reg(ctx, addr);
+@@ -706,7 +703,7 @@ void dce110_stream_encoder_update_hdmi_info_packets(
+ const uint32_t *content =
+ (const uint32_t *) &info_frame->avi.sb[0];
+
+- addr = DIG_REG(mmAFMT_AVI_INFO0);
++ addr = LINK_REG(AFMT_AVI_INFO0);
+ regval = content[0];
+ dal_write_reg(
+ ctx,
+@@ -714,14 +711,14 @@ void dce110_stream_encoder_update_hdmi_info_packets(
+ regval);
+ regval = content[1];
+
+- addr = DIG_REG(mmAFMT_AVI_INFO1);
++ addr = LINK_REG(AFMT_AVI_INFO1);
+ dal_write_reg(
+ ctx,
+ addr,
+ regval);
+ regval = content[2];
+
+- addr = DIG_REG(mmAFMT_AVI_INFO2);
++ addr = LINK_REG(AFMT_AVI_INFO2);
+ dal_write_reg(
+ ctx,
+ addr,
+@@ -729,7 +726,7 @@ void dce110_stream_encoder_update_hdmi_info_packets(
+ regval = content[3];
+
+ /* move version to AVI_INFO3 */
+- addr = DIG_REG(mmAFMT_AVI_INFO3);
++ addr = LINK_REG(AFMT_AVI_INFO3);
+ set_reg_field_value(
+ regval,
+ info_frame->avi.hb1,
+@@ -741,7 +738,7 @@ void dce110_stream_encoder_update_hdmi_info_packets(
+ addr,
+ regval);
+
+- addr = DIG_REG(mmHDMI_INFOFRAME_CONTROL0);
++ addr = LINK_REG(HDMI_INFOFRAME_CONTROL0);
+
+ control0val = dal_read_reg(ctx, addr);
+
+@@ -759,7 +756,7 @@ void dce110_stream_encoder_update_hdmi_info_packets(
+
+ dal_write_reg(ctx, addr, control0val);
+
+- addr = DIG_REG(mmHDMI_INFOFRAME_CONTROL1);
++ addr = LINK_REG(HDMI_INFOFRAME_CONTROL1);
+
+ control1val = dal_read_reg(ctx, addr);
+
+@@ -771,7 +768,7 @@ void dce110_stream_encoder_update_hdmi_info_packets(
+
+ dal_write_reg(ctx, addr, control1val);
+ } else {
+- addr = DIG_REG(mmHDMI_INFOFRAME_CONTROL0);
++ addr = LINK_REG(HDMI_INFOFRAME_CONTROL0);
+
+ regval = dal_read_reg(ctx, addr);
+
+@@ -804,7 +801,7 @@ void dce110_stream_encoder_stop_hdmi_info_packets(
+ uint32_t value = 0;
+
+ /* stop generic packets 0 & 1 on HDMI */
+- addr = DIG_REG(mmHDMI_GENERIC_PACKET_CONTROL0);
++ addr = LINK_REG(HDMI_GENERIC_PACKET_CONTROL0);
+
+ value = dal_read_reg(ctx, addr);
+
+@@ -842,7 +839,7 @@ void dce110_stream_encoder_stop_hdmi_info_packets(
+ dal_write_reg(ctx, addr, value);
+
+ /* stop generic packets 2 & 3 on HDMI */
+- addr = DIG_REG(mmHDMI_GENERIC_PACKET_CONTROL1);
++ addr = LINK_REG(HDMI_GENERIC_PACKET_CONTROL1);
+
+ value = dal_read_reg(ctx, addr);
+
+@@ -880,7 +877,7 @@ void dce110_stream_encoder_stop_hdmi_info_packets(
+ dal_write_reg(ctx, addr, value);
+
+ /* stop AVI packet on HDMI */
+- addr = DIG_REG(mmHDMI_INFOFRAME_CONTROL0);
++ addr = LINK_REG(HDMI_INFOFRAME_CONTROL0);
+
+ value = dal_read_reg(ctx, addr);
+
+@@ -903,7 +900,7 @@ void dce110_stream_encoder_update_dp_info_packets(
+ {
+ struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
+ struct dc_context *ctx = enc110->base.ctx;
+- uint32_t addr = DP_REG(mmDP_SEC_CNTL);
++ uint32_t addr = LINK_REG(DP_SEC_CNTL);
+ uint32_t value;
+
+ if (info_frame->vsc.valid)
+@@ -946,7 +943,7 @@ void dce110_stream_encoder_stop_dp_info_packets(
+ /* stop generic packets on DP */
+ struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
+ struct dc_context *ctx = enc110->base.ctx;
+- uint32_t addr = DP_REG(mmDP_SEC_CNTL);
++ uint32_t addr = LINK_REG(DP_SEC_CNTL);
+ uint32_t value = dal_read_reg(ctx, addr);
+
+ set_reg_field_value(value, 0, DP_SEC_CNTL, DP_SEC_GSP0_ENABLE);
+@@ -976,7 +973,7 @@ void dce110_stream_encoder_dp_blank(
+ {
+ struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
+ struct dc_context *ctx = enc110->base.ctx;
+- uint32_t addr = DP_REG(mmDP_VID_STREAM_CNTL);
++ uint32_t addr = LINK_REG(DP_VID_STREAM_CNTL);
+ uint32_t value = dal_read_reg(ctx, addr);
+ uint32_t retries = 0;
+ uint32_t max_retries = DP_BLANK_MAX_RETRY * 10;
+@@ -1031,7 +1028,7 @@ void dce110_stream_encoder_dp_blank(
+ * complete, stream status will be stuck in video stream enabled state,
+ * i.e. DP_VID_STREAM_STATUS stuck at 1.
+ */
+- addr = DP_REG(mmDP_STEER_FIFO);
++ addr = LINK_REG(DP_STEER_FIFO);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, true, DP_STEER_FIFO, DP_STEER_FIFO_RESET);
+ dal_write_reg(ctx, addr, value);
+@@ -1065,7 +1062,7 @@ void dce110_stream_encoder_dp_unblank(
+ m_vid = (uint32_t) m_vid_l;
+
+ /* enable auto measurement */
+- addr = DP_REG(mmDP_VID_TIMING);
++ addr = LINK_REG(DP_VID_TIMING);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 0, DP_VID_TIMING, DP_VID_M_N_GEN_EN);
+ dal_write_reg(ctx, addr, value);
+@@ -1073,30 +1070,30 @@ void dce110_stream_encoder_dp_unblank(
+ /* auto measurement need 1 full 0x8000 symbol cycle to kick in,
+ * therefore program initial value for Mvid and Nvid
+ */
+- addr = DP_REG(mmDP_VID_N);
++ addr = LINK_REG(DP_VID_N);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, n_vid, DP_VID_N, DP_VID_N);
+ dal_write_reg(ctx, addr, value);
+
+- addr = DP_REG(mmDP_VID_M);
++ addr = LINK_REG(DP_VID_M);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, m_vid, DP_VID_M, DP_VID_M);
+ dal_write_reg(ctx, addr, value);
+
+- addr = DP_REG(mmDP_VID_TIMING);
++ addr = LINK_REG(DP_VID_TIMING);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 1, DP_VID_TIMING, DP_VID_M_N_GEN_EN);
+ dal_write_reg(ctx, addr, value);
+ }
+
+ /* set DIG_START to 0x1 to resync FIFO */
+- addr = DIG_REG(mmDIG_FE_CNTL);
++ addr = LINK_REG(DIG_FE_CNTL);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 1, DIG_FE_CNTL, DIG_START);
+ dal_write_reg(ctx, addr, value);
+
+ /* switch DP encoder to CRTC data */
+- addr = DP_REG(mmDP_STEER_FIFO);
++ addr = LINK_REG(DP_STEER_FIFO);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(value, 0, DP_STEER_FIFO, DP_STEER_FIFO_RESET);
+ dal_write_reg(ctx, addr, value);
+@@ -1113,7 +1110,7 @@ void dce110_stream_encoder_dp_unblank(
+ * VID_STREAM enable at start of next frame, and this is not
+ * programmable
+ */
+- addr = DP_REG(mmDP_VID_STREAM_CNTL);
++ addr = LINK_REG(DP_VID_STREAM_CNTL);
+ value = dal_read_reg(ctx, addr);
+ set_reg_field_value(
+ value,
+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 7e110b4..5753a1b 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
+@@ -31,15 +31,39 @@
+ #define DCE110STRENC_FROM_STRENC(stream_encoder)\
+ container_of(stream_encoder, struct dce110_stream_encoder, base)
+
+-struct dce110_stream_enc_offsets {
+- int32_t dig;
+- int32_t dp;
++struct dce110_stream_enc_registers {
++ uint32_t AFMT_AVI_INFO0;
++ uint32_t AFMT_AVI_INFO1;
++ uint32_t AFMT_AVI_INFO2;
++ uint32_t AFMT_AVI_INFO3;
++ uint32_t AFMT_GENERIC_0;
++ uint32_t AFMT_GENERIC_7;
++ uint32_t AFMT_GENERIC_HDR;
++ uint32_t AFMT_INFOFRAME_CONTROL0;
++ uint32_t AFMT_VBI_PACKET_CONTROL;
++ uint32_t DIG_FE_CNTL;
++ uint32_t DP_MSE_RATE_CNTL;
++ uint32_t DP_MSE_RATE_UPDATE;
++ uint32_t DP_PIXEL_FORMAT;
++ uint32_t DP_SEC_CNTL;
++ uint32_t DP_STEER_FIFO;
++ uint32_t DP_VID_M;
++ uint32_t DP_VID_N;
++ uint32_t DP_VID_STREAM_CNTL;
++ uint32_t DP_VID_TIMING;
++ uint32_t HDMI_CONTROL;
++ uint32_t HDMI_GC;
++ uint32_t HDMI_GENERIC_PACKET_CONTROL0;
++ uint32_t HDMI_GENERIC_PACKET_CONTROL1;
++ uint32_t HDMI_INFOFRAME_CONTROL0;
++ uint32_t HDMI_INFOFRAME_CONTROL1;
++ uint32_t HDMI_VBI_PACKET_CONTROL;
++ uint32_t TMDS_CNTL;
+ };
+
+ struct dce110_stream_encoder {
+ struct stream_encoder base;
+- struct dce110_stream_enc_offsets offsets;
+- struct dce110_stream_enc_offsets derived_offsets;
++ const struct dce110_stream_enc_registers *regs;
+ };
+
+ bool dce110_stream_encoder_construct(
+@@ -47,7 +71,7 @@ bool dce110_stream_encoder_construct(
+ struct dc_context *ctx,
+ struct dc_bios *bp,
+ enum engine_id eng_id,
+- const struct dce110_stream_enc_offsets *offsets);
++ const struct dce110_stream_enc_registers *regs);
+
+ /***** HW programming ***********/
+ /* setup stream encoder in dp mode */
+--
+2.7.4
+