aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0650-drm-amd-dal-Refactor-timing-generator.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0650-drm-amd-dal-Refactor-timing-generator.patch')
-rw-r--r--common/recipes-kernel/linux/files/0650-drm-amd-dal-Refactor-timing-generator.patch717
1 files changed, 0 insertions, 717 deletions
diff --git a/common/recipes-kernel/linux/files/0650-drm-amd-dal-Refactor-timing-generator.patch b/common/recipes-kernel/linux/files/0650-drm-amd-dal-Refactor-timing-generator.patch
deleted file mode 100644
index 4b83b4b3..00000000
--- a/common/recipes-kernel/linux/files/0650-drm-amd-dal-Refactor-timing-generator.patch
+++ /dev/null
@@ -1,717 +0,0 @@
-From 204f22d4fef912e6ee47572f2deecf8d4c5ccc3c Mon Sep 17 00:00:00 2001
-From: Yongqiang Sun <yongqiang.sun@amd.com>
-Date: Wed, 23 Dec 2015 16:27:53 -0500
-Subject: [PATCH 0650/1110] drm/amd/dal: Refactor timing generator.
-
-Change the way to access register the same
-as stream_encoder.
-
-Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com>
-Signed-off-by: Harry Wentland <harry.wentland@amd.com>
-Acked-by: Harry Wentland <Harry.Wentland@amd.com>
----
- .../amd/dal/dc/dce110/dce110_timing_generator.c | 269 ++++++++-------------
- .../amd/dal/dc/dce110/dce110_timing_generator.h | 6 +
- .../drm/amd/dal/include/timing_generator_types.h | 1 -
- 3 files changed, 103 insertions(+), 173 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c
-index 182d23e..3c6c04a 100644
---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c
-+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.c
-@@ -37,64 +37,6 @@
- #include "include/timing_generator_types.h"
- #include "dce110_timing_generator.h"
-
--
--enum tg_regs_idx {
-- IDX_CRTC_UPDATE_LOCK,
-- IDX_CRTC_MASTER_UPDATE_LOCK,
-- IDX_CRTC_MASTER_UPDATE_MODE,
-- IDX_CRTC_H_TOTAL,
-- IDX_CRTC_V_TOTAL,
-- IDX_CRTC_H_BLANK_START_END,
-- IDX_CRTC_V_BLANK_START_END,
-- IDX_CRTC_H_SYNC_A,
-- IDX_CRTC_V_SYNC_A,
-- IDX_CRTC_H_SYNC_A_CNTL,
-- IDX_CRTC_V_SYNC_A_CNTL,
-- IDX_CRTC_INTERLACE_CONTROL,
-- IDX_CRTC_BLANK_CONTROL,
-- IDX_PIPE_PG_STATUS,
--
-- IDX_CRTC_TEST_PATTERN_COLOR,
-- IDX_CRTC_TEST_PATTERN_CONTROL,
-- IDX_CRTC_TEST_PATTERN_PARAMETERS,
-- IDX_CRTC_FLOW_CONTROL,
-- IDX_CRTC_STATUS,
-- IDX_CRTC_STATUS_POSITION,
-- IDX_CRTC_STATUS_FRAME_COUNT,
-- IDX_CRTC_STEREO_CONTROL,
-- IDX_CRTC_STEREO_STATUS,
-- IDX_CRTC_STEREO_FORCE_NEXT_EYE,
-- IDX_CRTC_3D_STRUCTURE_CONTROL,
-- IDX_CRTC_DOUBLE_BUFFER_CONTROL,
-- IDX_CRTC_V_TOTAL_MIN,
-- IDX_CRTC_V_TOTAL_MAX,
-- IDX_CRTC_V_TOTAL_CONTROL,
-- IDX_CRTC_NOM_VERT_POSITION,
-- IDX_CRTC_STATIC_SCREEN_CONTROL,
-- IDX_CRTC_TRIGB_CNTL,
-- IDX_CRTC_FORCE_COUNT_CNTL,
-- IDX_CRTC_GSL_CONTROL,
-- IDX_CRTC_GSL_WINDOW,
--
-- IDX_CRTC_CONTROL,
-- IDX_CRTC_START_LINE_CONTROL,
-- IDX_CRTC_COUNT_CONTROL,
--
-- IDX_MODE_EXT_OVERSCAN_LEFT_RIGHT,
-- IDX_MODE_EXT_OVERSCAN_TOP_BOTTOM,
-- IDX_DCP_GSL_CONTROL,
-- IDX_GRPH_UPDATE,
--
-- IDX_CRTC_VBI_END,
--
-- IDX_BLND_UNDERFLOW_INTERRUPT,
-- IDX_CRTC_BLACK_COLOR,
-- IDX_CRTC_OVERSCAN_COLOR,
-- IDX_CRTC_BLANK_DATA_COLOR,
--
-- TG_REGS_IDX_SIZE
--};
--
- enum black_color_format {
- BLACK_COLOR_FORMAT_RGB_FULLRANGE = 0, /* used as index in array */
- BLACK_COLOR_FORMAT_RGB_LIMITED,
-@@ -105,61 +47,6 @@ enum black_color_format {
- BLACK_COLOR_FORMAT_COUNT
- };
-
--#define regs_for_controller(id)\
--[CONTROLLER_ID_D ## id - 1] =\
--{[IDX_CRTC_UPDATE_LOCK] = mmCRTC ## id ## _CRTC_UPDATE_LOCK,\
--[IDX_CRTC_MASTER_UPDATE_LOCK] = mmCRTC ## id ## _CRTC_MASTER_UPDATE_LOCK,\
--[IDX_CRTC_MASTER_UPDATE_MODE] = mmCRTC ## id ## _CRTC_MASTER_UPDATE_MODE,\
--[IDX_CRTC_H_TOTAL] = mmCRTC ## id ## _CRTC_H_TOTAL,\
--[IDX_CRTC_V_TOTAL] = mmCRTC ## id ## _CRTC_V_TOTAL,\
--[IDX_CRTC_H_BLANK_START_END] = mmCRTC ## id ## _CRTC_H_BLANK_START_END,\
--[IDX_CRTC_V_BLANK_START_END] = mmCRTC ## id ## _CRTC_V_BLANK_START_END,\
--[IDX_CRTC_H_SYNC_A] = mmCRTC ## id ## _CRTC_H_SYNC_A,\
--[IDX_CRTC_V_SYNC_A] = mmCRTC ## id ## _CRTC_V_SYNC_A,\
--[IDX_CRTC_H_SYNC_A_CNTL] = mmCRTC ## id ## _CRTC_H_SYNC_A_CNTL,\
--[IDX_CRTC_V_SYNC_A_CNTL] = mmCRTC ## id ## _CRTC_V_SYNC_A_CNTL,\
--[IDX_CRTC_INTERLACE_CONTROL] = mmCRTC ## id ## _CRTC_INTERLACE_CONTROL,\
--[IDX_CRTC_BLANK_CONTROL] = mmCRTC ## id ## _CRTC_BLANK_CONTROL,\
--[IDX_PIPE_PG_STATUS] = mmPIPE ## id ## _PG_STATUS,\
--[IDX_CRTC_TEST_PATTERN_COLOR] = mmCRTC ## id ## _CRTC_TEST_PATTERN_COLOR,\
--[IDX_CRTC_TEST_PATTERN_CONTROL] = mmCRTC ## id ## _CRTC_TEST_PATTERN_CONTROL,\
--[IDX_CRTC_TEST_PATTERN_PARAMETERS] =\
--mmCRTC ## id ## _CRTC_TEST_PATTERN_PARAMETERS,\
--[IDX_CRTC_FLOW_CONTROL] = mmCRTC ## id ## _CRTC_FLOW_CONTROL,\
--[IDX_CRTC_STATUS] = mmCRTC ## id ## _CRTC_STATUS,\
--[IDX_CRTC_STATUS_POSITION] = mmCRTC ## id ## _CRTC_STATUS_POSITION,\
--[IDX_CRTC_STATUS_FRAME_COUNT] = mmCRTC ## id ## _CRTC_STATUS_FRAME_COUNT,\
--[IDX_CRTC_STEREO_CONTROL] = mmCRTC ## id ## _CRTC_STEREO_CONTROL,\
--[IDX_CRTC_STEREO_STATUS] = mmCRTC ## id ## _CRTC_STEREO_STATUS,\
--[IDX_CRTC_STEREO_FORCE_NEXT_EYE] = \
--mmCRTC ## id ## _CRTC_STEREO_FORCE_NEXT_EYE,\
--[IDX_CRTC_3D_STRUCTURE_CONTROL] = mmCRTC ## id ## _CRTC_3D_STRUCTURE_CONTROL,\
--[IDX_CRTC_DOUBLE_BUFFER_CONTROL] =\
--mmCRTC ## id ## _CRTC_DOUBLE_BUFFER_CONTROL,\
--[IDX_CRTC_V_TOTAL_MIN] = mmCRTC ## id ## _CRTC_V_TOTAL_MIN,\
--[IDX_CRTC_V_TOTAL_MAX] = mmCRTC ## id ## _CRTC_V_TOTAL_MAX,\
--[IDX_CRTC_V_TOTAL_CONTROL] = mmCRTC ## id ## _CRTC_V_TOTAL_CONTROL,\
--[IDX_CRTC_NOM_VERT_POSITION] = mmCRTC ## id ## _CRTC_NOM_VERT_POSITION,\
--[IDX_CRTC_STATIC_SCREEN_CONTROL] =\
--mmCRTC ## id ## _CRTC_STATIC_SCREEN_CONTROL,\
--[IDX_CRTC_TRIGB_CNTL] = mmCRTC ## id ## _CRTC_TRIGB_CNTL,\
--[IDX_CRTC_FORCE_COUNT_CNTL] = mmCRTC ## id ## _CRTC_FORCE_COUNT_NOW_CNTL,\
--[IDX_CRTC_GSL_CONTROL] = mmCRTC ## id ## _CRTC_GSL_CONTROL,\
--[IDX_CRTC_GSL_WINDOW] = mmCRTC ## id ## _CRTC_GSL_WINDOW,\
--[IDX_CRTC_CONTROL] = mmCRTC ## id ## _CRTC_CONTROL,\
--[IDX_CRTC_START_LINE_CONTROL] = mmCRTC ## id ## _CRTC_START_LINE_CONTROL,\
--[IDX_CRTC_COUNT_CONTROL] = mmCRTC ## id ## _CRTC_COUNT_CONTROL,\
--[IDX_MODE_EXT_OVERSCAN_LEFT_RIGHT] = mmSCL ## id ## _EXT_OVERSCAN_LEFT_RIGHT,\
--[IDX_MODE_EXT_OVERSCAN_TOP_BOTTOM] = mmSCL ## id ## _EXT_OVERSCAN_TOP_BOTTOM,\
--[IDX_DCP_GSL_CONTROL] = mmDCP ## id ## _DCP_GSL_CONTROL,\
--[IDX_GRPH_UPDATE] = mmDCP ## id ## _GRPH_UPDATE,\
--[IDX_CRTC_VBI_END] = mmCRTC ## id ## _CRTC_VBI_END,\
--[IDX_BLND_UNDERFLOW_INTERRUPT] = mmBLND ## id ## _BLND_UNDERFLOW_INTERRUPT,\
--[IDX_CRTC_BLACK_COLOR] = mmCRTC ## id ## _CRTC_BLACK_COLOR,\
--[IDX_CRTC_OVERSCAN_COLOR] = mmCRTC ## id ## _CRTC_OVERSCAN_COLOR,\
--[IDX_CRTC_BLANK_DATA_COLOR] = mmCRTC ## id ## _CRTC_BLANK_DATA_COLOR,\
--}
--
- #define NUMBER_OF_FRAME_TO_WAIT_ON_TRIGGERED_RESET 10
-
- #define MAX_H_TOTAL (CRTC_H_TOTAL__CRTC_H_TOTAL_MASK + 1)
-@@ -169,12 +56,23 @@ mmCRTC ## id ## _CRTC_STATIC_SCREEN_CONTROL,\
- #define FROM_TIMING_GENERATOR(tg)\
- container_of(tg, struct dce110_timing_generator, base)
-
--static uint32_t tg_regs[][TG_REGS_IDX_SIZE] = {
-- regs_for_controller(0),
-- regs_for_controller(1),
-- regs_for_controller(2),
--};
-+#define CRTC_REG(reg) (reg + tg110->offsets.crtc)
-+#define DCP_REG(reg) (reg + tg110->offsets.dcp)
-
-+static const struct dce110_timing_generator_offsets reg_offsets[] = {
-+ {
-+ .crtc = 0,
-+ .dcp = 0,
-+ },
-+ {
-+ .crtc = (mmCRTC1_CRTC_CONTROL - mmCRTC0_CRTC_CONTROL),
-+ .dcp = (mmDCP1_GRPH_CONTROL - mmDCP0_GRPH_CONTROL),
-+ },
-+ {
-+ .crtc = (mmCRTC2_CRTC_CONTROL - mmCRTC0_CRTC_CONTROL),
-+ .dcp = (mmDCP2_GRPH_CONTROL - mmDCP0_GRPH_CONTROL),
-+ }
-+};
- /*******************************************************************************
- * GSL Sync related values */
-
-@@ -237,7 +135,10 @@ static bool dce110_timing_generator_construct(
- struct timing_generator *tg,
- enum controller_id id)
- {
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+
- tg->controller_id = id;
-+ tg110->offsets = reg_offsets[id - 1];
- return true;
- }
-
-@@ -345,8 +246,9 @@ static bool dce110_timing_generator_is_in_vertical_blank(
- uint32_t addr = 0;
- uint32_t value = 0;
- uint32_t field = 0;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
-- addr = tg->regs[IDX_CRTC_STATUS];
-+ addr = CRTC_REG(mmCRTC_STATUS);
- value = dal_read_reg(tg->ctx, addr);
- field = get_reg_field_value(value, CRTC_STATUS, CRTC_V_BLANK);
- return field == 1;
-@@ -357,7 +259,8 @@ void dce110_timing_generator_set_early_control(
- uint32_t early_cntl)
- {
- uint32_t regval;
-- uint32_t address = tg->regs[IDX_CRTC_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t address = CRTC_REG(mmCRTC_CONTROL);
-
- regval = dal_read_reg(tg->ctx, address);
- set_reg_field_value(regval, early_cntl,
-@@ -376,13 +279,14 @@ bool dce110_timing_generator_enable_crtc(struct timing_generator *tg)
- /* 0 value is needed by DRR and is also suggested default value for CZ
- */
- uint32_t value;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- value = dal_read_reg(tg->ctx,
-- tg->regs[IDX_CRTC_MASTER_UPDATE_MODE]);
-+ CRTC_REG(mmCRTC_MASTER_UPDATE_MODE));
- set_reg_field_value(value, 3,
- CRTC_MASTER_UPDATE_MODE, MASTER_UPDATE_MODE);
- dal_write_reg(tg->ctx,
-- tg->regs[IDX_CRTC_MASTER_UPDATE_MODE], value);
-+ CRTC_REG(mmCRTC_MASTER_UPDATE_MODE), value);
-
- result = dal_bios_parser_enable_crtc(tg->bp, tg->controller_id, true);
-
-@@ -394,7 +298,8 @@ void dce110_timing_generator_program_blank_color(
- enum color_space color_space)
- {
- struct crtc_black_color black_color;
-- uint32_t addr = tg->regs[IDX_CRTC_BLACK_COLOR];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_BLACK_COLOR);
- uint32_t value = dal_read_reg(tg->ctx, addr);
-
- dce110_timing_generator_color_space_to_black_color(
-@@ -427,7 +332,8 @@ void dce110_timing_generator_program_blank_color(
-
- bool dce110_timing_generator_blank_crtc(struct timing_generator *tg)
- {
-- uint32_t addr = tg->regs[IDX_CRTC_BLANK_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_BLANK_CONTROL);
- uint32_t value = dal_read_reg(tg->ctx, addr);
- uint8_t counter = 100;
-
-@@ -479,7 +385,8 @@ bool dce110_timing_generator_blank_crtc(struct timing_generator *tg)
- */
- bool dce110_timing_generator_unblank_crtc(struct timing_generator *tg)
- {
-- uint32_t addr = tg->regs[IDX_CRTC_BLANK_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_BLANK_CONTROL);
- uint32_t value = dal_read_reg(tg->ctx, addr);
-
- set_reg_field_value(
-@@ -512,7 +419,8 @@ bool dce110_timing_generator_unblank_crtc(struct timing_generator *tg)
- @TODOSTEREO
- static void disable_stereo(struct timing_generator *tg)
- {
-- uint32_t addr = tg->regs[IDX_CRTC_3D_STRUCTURE_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_3D_STRUCTURE_CONTROL);
- uint32_t value = 0;
- uint32_t test = 0;
- uint32_t field = 0;
-@@ -579,9 +487,10 @@ static void program_horz_count_by_2(
- const struct dc_crtc_timing *timing)
- {
- uint32_t regval;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- regval = dal_read_reg(tg->ctx,
-- tg->regs[IDX_CRTC_COUNT_CONTROL]);
-+ CRTC_REG(mmCRTC_COUNT_CONTROL));
-
- set_reg_field_value(regval, 0, CRTC_COUNT_CONTROL,
- CRTC_HORZ_COUNT_BY2_EN);
-@@ -591,7 +500,7 @@ static void program_horz_count_by_2(
- CRTC_HORZ_COUNT_BY2_EN);
-
- dal_write_reg(tg->ctx,
-- tg->regs[IDX_CRTC_COUNT_CONTROL], regval);
-+ CRTC_REG(mmCRTC_COUNT_CONTROL), regval);
- }
-
- /**
-@@ -606,6 +515,7 @@ bool dce110_timing_generator_program_timing_generator(
- enum bp_result result;
- struct bp_hw_crtc_timing_parameters bp_params;
- uint32_t regval;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- uint32_t vsync_offset = dc_crtc_timing->v_border_bottom +
- dc_crtc_timing->v_front_porch;
-@@ -663,7 +573,7 @@ bool dce110_timing_generator_program_timing_generator(
-
-
- regval = dal_read_reg(tg->ctx,
-- tg->regs[IDX_CRTC_START_LINE_CONTROL]);
-+ CRTC_REG(mmCRTC_START_LINE_CONTROL));
-
- if (dce110_timing_generator_get_vsynch_and_front_porch_size(dc_crtc_timing) <= 3) {
- set_reg_field_value(regval, 3,
-@@ -683,7 +593,7 @@ bool dce110_timing_generator_program_timing_generator(
- CRTC_PREFETCH_EN);
- }
- dal_write_reg(tg->ctx,
-- tg->regs[IDX_CRTC_START_LINE_CONTROL], regval);
-+ CRTC_REG(mmCRTC_START_LINE_CONTROL), regval);
-
- /* Enable stereo - only when we need to pack 3D frame. Other types
- * of stereo handled in explicit call */
-@@ -722,19 +632,20 @@ void dce110_timing_generator_program_drr(
- uint32_t v_total_max = 0;
- uint32_t v_total_cntl = 0;
- uint32_t static_screen_cntl = 0;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- uint32_t addr = 0;
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL_MIN];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL_MIN);
- v_total_min = dal_read_reg(tg->ctx, addr);
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL_MAX];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL_MAX);
- v_total_max = dal_read_reg(tg->ctx, addr);
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL_CONTROL];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL_CONTROL);
- v_total_cntl = dal_read_reg(tg->ctx, addr);
-
-- addr = tg->regs[IDX_CRTC_STATIC_SCREEN_CONTROL];
-+ addr = CRTC_REG(mmCRTC_STATIC_SCREEN_CONTROL);
- static_screen_cntl = dal_read_reg(tg->ctx, addr);
-
- if (timing != NULL) {
-@@ -856,16 +767,16 @@ void dce110_timing_generator_program_drr(
- CRTC_FORCE_LOCK_TO_MASTER_VSYNC);
- }
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL_MIN];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL_MIN);
- dal_write_reg(tg->ctx, addr, v_total_min);
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL_MAX];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL_MAX);
- dal_write_reg(tg->ctx, addr, v_total_max);
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL_CONTROL];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL_CONTROL);
- dal_write_reg(tg->ctx, addr, v_total_cntl);
-
-- addr = tg->regs[IDX_CRTC_STATIC_SCREEN_CONTROL];
-+ addr = CRTC_REG(mmCRTC_STATIC_SCREEN_CONTROL);
- dal_write_reg(tg->ctx, addr, static_screen_cntl);
- }
-
-@@ -885,7 +796,8 @@ void dce110_timing_generator_program_drr(
- */
- uint32_t dce110_timing_generator_get_vblank_counter(struct timing_generator *tg)
- {
-- uint32_t addr = tg->regs[IDX_CRTC_STATUS_FRAME_COUNT];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_STATUS_FRAME_COUNT);
- uint32_t value = dal_read_reg(tg->ctx, addr);
- uint32_t field = get_reg_field_value(
- value, CRTC_STATUS_FRAME_COUNT, CRTC_FRAME_COUNT);
-@@ -910,8 +822,9 @@ void dce110_timing_generator_get_crtc_positions(
- int32_t *v_position)
- {
- uint32_t value;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
-- value = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_STATUS_POSITION]);
-+ value = dal_read_reg(tg->ctx, CRTC_REG(mmCRTC_STATUS_POSITION));
-
- *h_position = get_reg_field_value(
- value,
-@@ -939,6 +852,7 @@ uint32_t dce110_timing_generator_get_crtc_scanoutpos(
- int32_t *vbl,
- int32_t *position)
- {
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
- /* TODO 1: Update the implementation once caller is updated
- * WARNING!! This function is returning the whole register value
- * because the caller is expecting it instead of proper vertical and
-@@ -948,10 +862,10 @@ uint32_t dce110_timing_generator_get_crtc_scanoutpos(
- /* TODO 2: re-use dce110_timing_generator_get_crtc_positions() */
-
- *vbl = dal_read_reg(tg->ctx,
-- tg->regs[IDX_CRTC_V_BLANK_START_END]);
-+ CRTC_REG(mmCRTC_V_BLANK_START_END));
-
- *position = dal_read_reg(tg->ctx,
-- tg->regs[IDX_CRTC_STATUS_POSITION]);
-+ CRTC_REG(mmCRTC_STATUS_POSITION));
-
- /* @TODO: return value should indicate if current
- * crtc is inside vblank*/
-@@ -973,13 +887,14 @@ void dce110_timing_generator_program_blanking(
- uint32_t hsync_offset = timing->h_border_right +
- timing->h_front_porch;
- uint32_t h_sync_start = timing->h_addressable + hsync_offset;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- struct dc_context *ctx = tg->ctx;
- uint32_t value = 0;
- uint32_t addr = 0;
- uint32_t tmp = 0;
-
-- addr = tg->regs[IDX_CRTC_H_TOTAL];
-+ addr = CRTC_REG(mmCRTC_H_TOTAL);
- value = dal_read_reg(ctx, addr);
- set_reg_field_value(
- value,
-@@ -988,7 +903,7 @@ void dce110_timing_generator_program_blanking(
- CRTC_H_TOTAL);
- dal_write_reg(ctx, addr, value);
-
-- addr = tg->regs[IDX_CRTC_V_TOTAL];
-+ addr = CRTC_REG(mmCRTC_V_TOTAL);
- value = dal_read_reg(ctx, addr);
- set_reg_field_value(
- value,
-@@ -997,7 +912,7 @@ void dce110_timing_generator_program_blanking(
- CRTC_V_TOTAL);
- dal_write_reg(ctx, addr, value);
-
-- addr = tg->regs[IDX_CRTC_H_BLANK_START_END];
-+ addr = CRTC_REG(mmCRTC_H_BLANK_START_END);
- value = dal_read_reg(ctx, addr);
-
- tmp = timing->h_total -
-@@ -1020,7 +935,7 @@ void dce110_timing_generator_program_blanking(
-
- dal_write_reg(ctx, addr, value);
-
-- addr = tg->regs[IDX_CRTC_V_BLANK_START_END];
-+ addr = CRTC_REG(mmCRTC_V_BLANK_START_END);
- value = dal_read_reg(ctx, addr);
-
- tmp = timing->v_total - (v_sync_start + timing->v_border_top);
-@@ -1054,12 +969,13 @@ void dce110_timing_generator_set_test_pattern(
- struct dc_context *ctx = tg->ctx;
- uint32_t value;
- uint32_t addr;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- /* TODO: add support for other test patterns */
- switch (test_pattern) {
- default:
- value = 0;
-- addr = tg->regs[IDX_CRTC_TEST_PATTERN_PARAMETERS];
-+ addr = CRTC_REG(mmCRTC_TEST_PATTERN_PARAMETERS);
-
- set_reg_field_value(
- value,
-@@ -1074,7 +990,7 @@ void dce110_timing_generator_set_test_pattern(
-
- dal_write_reg(ctx, addr, value);
-
-- addr = tg->regs[IDX_CRTC_TEST_PATTERN_CONTROL];
-+ addr = CRTC_REG(mmCRTC_TEST_PATTERN_CONTROL);
- value = 0;
-
- set_reg_field_value(
-@@ -1221,7 +1137,6 @@ static bool timing_generator_dce110_construct(struct timing_generator *tg,
-
- tg->ctx = ctx;
- tg->bp = dal_adapter_service_get_bios_parser(as);
-- tg->regs = tg_regs[id-1];
-
- tg->max_h_total = CRTC_H_TOTAL__CRTC_H_TOTAL_MASK + 1;
- tg->max_v_total = CRTC_V_TOTAL__CRTC_V_TOTAL_MASK + 1;
-@@ -1270,7 +1185,8 @@ void dce110_timing_generator_setup_global_swap_lock(
- const struct dcp_gsl_params *gsl_params)
- {
- uint32_t value;
-- uint32_t address = tg->regs[IDX_DCP_GSL_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t address = DCP_REG(mmDCP_GSL_CONTROL);
- uint32_t check_point = FLIP_READY_BACK_LOOKUP;
-
- value = dal_read_reg(tg->ctx, address);
-@@ -1302,7 +1218,8 @@ void dce110_timing_generator_setup_global_swap_lock(
- {
- uint32_t value_crtc_vtotal;
-
-- value_crtc_vtotal = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_V_TOTAL]);
-+ value_crtc_vtotal = dal_read_reg(tg->ctx,
-+ CRTC_REG(mmCRTC_V_TOTAL));
-
- set_reg_field_value(value,
- gsl_params->gsl_purpose,
-@@ -1314,7 +1231,7 @@ void dce110_timing_generator_setup_global_swap_lock(
- CRTC_V_TOTAL,
- CRTC_V_TOTAL);
-
-- dal_write_reg(tg->ctx, tg->regs[IDX_CRTC_GSL_WINDOW], 0);
-+ dal_write_reg(tg->ctx, CRTC_REG(mmCRTC_GSL_WINDOW), 0);
- }
-
- set_reg_field_value(value,
-@@ -1325,7 +1242,7 @@ void dce110_timing_generator_setup_global_swap_lock(
- dal_write_reg(tg->ctx, address, value);
-
- /********************************************************************/
-- address = tg->regs[IDX_CRTC_GSL_CONTROL];
-+ address = CRTC_REG(mmCRTC_GSL_CONTROL);
-
- value = 0;
- set_reg_field_value(value,
-@@ -1350,7 +1267,8 @@ void dce110_timing_generator_tear_down_global_swap_lock(
- */
-
- uint32_t value;
-- uint32_t address = tg->regs[IDX_DCP_GSL_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t address = DCP_REG(mmDCP_GSL_CONTROL);
-
- value = 0;
-
-@@ -1381,7 +1299,8 @@ void dce110_timing_generator_tear_down_global_swap_lock(
- {
- uint32_t value_crtc_vtotal;
-
-- value_crtc_vtotal = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_V_TOTAL]);
-+ value_crtc_vtotal = dal_read_reg(tg->ctx,
-+ CRTC_REG(mmCRTC_V_TOTAL));
-
- set_reg_field_value(value,
- 0,
-@@ -1397,7 +1316,7 @@ void dce110_timing_generator_tear_down_global_swap_lock(
- dal_write_reg(tg->ctx, address, value);
-
- /********************************************************************/
-- address = tg->regs[IDX_CRTC_GSL_CONTROL];
-+ address = CRTC_REG(mmCRTC_GSL_CONTROL);
-
- value = 0;
- set_reg_field_value(value,
-@@ -1446,7 +1365,8 @@ void dce110_timing_generator_enable_advanced_request(
- bool enable,
- const struct dc_crtc_timing *timing)
- {
-- uint32_t addr = tg->regs[IDX_CRTC_START_LINE_CONTROL];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_START_LINE_CONTROL);
- uint32_t value = dal_read_reg(tg->ctx, addr);
-
- if (enable && FROM_TIMING_GENERATOR(tg)->advanced_request_enable) {
-@@ -1507,7 +1427,8 @@ void dce110_timing_generator_set_lock_master(struct timing_generator *tg,
- bool lock)
- {
- struct dc_context *ctx = tg->ctx;
-- uint32_t addr = tg->regs[IDX_CRTC_MASTER_UPDATE_LOCK];
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t addr = CRTC_REG(mmCRTC_MASTER_UPDATE_LOCK);
- uint32_t value = dal_read_reg(ctx, addr);
-
- set_reg_field_value(
-@@ -1528,6 +1449,7 @@ void dce110_timing_generator_enable_reset_trigger(
- uint32_t rising_edge = 0;
- uint32_t falling_edge = 0;
- enum trigger_source_select trig_src_select = TRIGGER_SOURCE_SELECT_LOGIC_ZERO;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
- /* Setup trigger edge */
- switch (trigger_params->edge) {
-@@ -1535,7 +1457,7 @@ void dce110_timing_generator_enable_reset_trigger(
- case TRIGGER_EDGE_DEFAULT:
- {
- uint32_t pol_value = dal_read_reg(tg->ctx,
-- tg->regs[IDX_CRTC_V_SYNC_A_CNTL]);
-+ CRTC_REG(mmCRTC_V_SYNC_A_CNTL));
-
- /* Register spec has reversed definition:
- * 0 for positive, 1 for negative */
-@@ -1563,7 +1485,7 @@ void dce110_timing_generator_enable_reset_trigger(
- return;
- }
-
-- value = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_TRIGB_CNTL]);
-+ value = dal_read_reg(tg->ctx, CRTC_REG(mmCRTC_TRIGB_CNTL));
-
- switch(trigger_params->source) {
- /* Currently supporting only a single group, the group zero. */
-@@ -1610,11 +1532,11 @@ void dce110_timing_generator_enable_reset_trigger(
- CRTC_TRIGB_CNTL,
- CRTC_TRIGB_CLEAR);
-
-- dal_write_reg(tg->ctx, tg->regs[IDX_CRTC_TRIGB_CNTL], value);
-+ dal_write_reg(tg->ctx, CRTC_REG(mmCRTC_TRIGB_CNTL), value);
-
- /**************************************************************/
-
-- value = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_FORCE_COUNT_CNTL]);
-+ value = dal_read_reg(tg->ctx, CRTC_REG(mmCRTC_FORCE_COUNT_NOW_CNTL));
-
- set_reg_field_value(value,
- 2, /* force H count to H_TOTAL and V count to V_TOTAL */
-@@ -1631,15 +1553,16 @@ void dce110_timing_generator_enable_reset_trigger(
- CRTC_FORCE_COUNT_NOW_CNTL,
- CRTC_FORCE_COUNT_NOW_CLEAR);
-
-- dal_write_reg(tg->ctx, tg->regs[IDX_CRTC_FORCE_COUNT_CNTL], value);
-+ dal_write_reg(tg->ctx, CRTC_REG(mmCRTC_FORCE_COUNT_NOW_CNTL), value);
- }
-
- void dce110_timing_generator_disable_reset_trigger(
- struct timing_generator *tg)
- {
- uint32_t value;
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-
-- value = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_FORCE_COUNT_CNTL]);
-+ value = dal_read_reg(tg->ctx, CRTC_REG(mmCRTC_FORCE_COUNT_NOW_CNTL));
-
- set_reg_field_value(value,
- 0, /* force counter now mode is disabled */
-@@ -1651,10 +1574,10 @@ void dce110_timing_generator_disable_reset_trigger(
- CRTC_FORCE_COUNT_NOW_CNTL,
- CRTC_FORCE_COUNT_NOW_CLEAR);
-
-- dal_write_reg(tg->ctx, tg->regs[IDX_CRTC_FORCE_COUNT_CNTL], value);
-+ dal_write_reg(tg->ctx, CRTC_REG(mmCRTC_FORCE_COUNT_NOW_CNTL), value);
-
- /********************************************************************/
-- value = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_TRIGB_CNTL]);
-+ value = dal_read_reg(tg->ctx, CRTC_REG(mmCRTC_TRIGB_CNTL));
-
- set_reg_field_value(value,
- TRIGGER_SOURCE_SELECT_LOGIC_ZERO,
-@@ -1671,7 +1594,7 @@ void dce110_timing_generator_disable_reset_trigger(
- CRTC_TRIGB_CNTL,
- CRTC_TRIGB_CLEAR);
-
-- dal_write_reg(tg->ctx, tg->regs[IDX_CRTC_TRIGB_CNTL], value);
-+ dal_write_reg(tg->ctx, CRTC_REG(mmCRTC_TRIGB_CNTL), value);
- }
-
- /**
-@@ -1686,7 +1609,9 @@ void dce110_timing_generator_disable_reset_trigger(
- bool dce110_timing_generator_did_triggered_reset_occur(
- struct timing_generator *tg)
- {
-- uint32_t value = dal_read_reg(tg->ctx, tg->regs[IDX_CRTC_FORCE_COUNT_CNTL]);
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
-+ uint32_t value = dal_read_reg(tg->ctx,
-+ CRTC_REG(mmCRTC_FORCE_COUNT_NOW_CNTL));
-
- return get_reg_field_value(value,
- CRTC_FORCE_COUNT_NOW_CNTL,
-@@ -1744,7 +1669,7 @@ void dce110_timing_generator_set_overscan_color_black(
- struct dc_context *ctx = tg->ctx;
- uint32_t value = 0;
- uint32_t addr;
--
-+ struct dce110_timing_generator *tg110 = FROM_TIMING_GENERATOR(tg);
- /* Overscan Color for YUV display modes:
- * to achieve a black color for both the explicit and implicit overscan,
- * the overscan color registers should be programmed to: */
-@@ -1842,15 +1767,15 @@ void dce110_timing_generator_set_overscan_color_black(
- /* default is sRGB black 0. */
- break;
- }
-- addr = tg->regs[IDX_CRTC_OVERSCAN_COLOR];
-+ addr = CRTC_REG(mmCRTC_OVERSCAN_COLOR);
- dal_write_reg(ctx, addr, value);
-- addr = tg->regs[IDX_CRTC_BLACK_COLOR];
-+ addr = CRTC_REG(mmCRTC_BLACK_COLOR);
- dal_write_reg(ctx, addr, value);
- /* This is desirable to have a constant DAC output voltage during the
- * blank time that is higher than the 0 volt reference level that the
- * DAC outputs when the NBLANK signal
- * is asserted low, such as for output to an analog TV. */
-- addr = tg->regs[IDX_CRTC_BLANK_DATA_COLOR];
-+ addr = CRTC_REG(mmCRTC_BLANK_DATA_COLOR);
- dal_write_reg(ctx, addr, value);
-
- /* TO DO we have to program EXT registers and we need to know LB DATA
-diff --git a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h
-index c75c659..c4a815f 100644
---- a/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h
-+++ b/drivers/gpu/drm/amd/dal/dc/dce110/dce110_timing_generator.h
-@@ -50,8 +50,14 @@
- #define CRTC_OVERSCAN_COLOR_BLACK_COLOR_G_RGB_LIMITED_RANGE 0x40
- #define CRTC_OVERSCAN_COLOR_BLACK_COLOR_R_RGB_LIMITED_RANGE 0X40
-
-+struct dce110_timing_generator_offsets {
-+ uint32_t crtc;
-+ uint32_t dcp;
-+};
-+
- struct dce110_timing_generator {
- struct timing_generator base;
-+ struct dce110_timing_generator_offsets offsets;
- enum sync_source cached_gsl_group;
- bool advanced_request_enable;
- };
-diff --git a/drivers/gpu/drm/amd/dal/include/timing_generator_types.h b/drivers/gpu/drm/amd/dal/include/timing_generator_types.h
-index 9c4d92d..bc04acd 100644
---- a/drivers/gpu/drm/amd/dal/include/timing_generator_types.h
-+++ b/drivers/gpu/drm/amd/dal/include/timing_generator_types.h
-@@ -135,7 +135,6 @@ enum controller_dp_test_pattern {
- };
-
- struct timing_generator {
-- uint32_t *regs;
- struct bios_parser *bp;
- enum controller_id controller_id;
- struct dc_context *ctx;
---
-2.7.4
-