drm/amd/display: Refactor HUBP into component folder.
authorBhuvana Chandra Pinninti <bhuvanachandra.pinninti@amd.com>
Thu, 25 Apr 2024 11:33:59 +0000 (17:03 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 8 May 2024 19:17:03 +0000 (15:17 -0400)
[why]
cleaning up the code refactor requires hubp to be in its own component.

[how]
move all files under newly created hubp folder and fixing the makefiles.

Reviewed-by: Martin Leung <martin.leung@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Bhuvana Chandra Pinninti <bhuvanachandra.pinninti@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
44 files changed:
drivers/gpu/drm/amd/display/Makefile
drivers/gpu/drm/amd/display/dc/Makefile
drivers/gpu/drm/amd/display/dc/dcn10/Makefile
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer_debug.c
drivers/gpu/drm/amd/display/dc/dcn20/Makefile
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn201/Makefile
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn21/Makefile
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn30/Makefile
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn31/Makefile
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn32/Makefile
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/dcn35/Makefile
drivers/gpu/drm/amd/display/dc/dcn35/dcn35_hubp.c [deleted file]
drivers/gpu/drm/amd/display/dc/dcn35/dcn35_hubp.h [deleted file]
drivers/gpu/drm/amd/display/dc/hubp/Makefile [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn20/dcn20_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn20/dcn20_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn201/dcn201_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn201/dcn201_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn21/dcn21_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn21/dcn21_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn30/dcn30_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn30/dcn30_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn31/dcn31_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn31/dcn31_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn32/dcn32_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn32/dcn32_hubp.h [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn35/dcn35_hubp.c [new file with mode: 0644]
drivers/gpu/drm/amd/display/dc/hubp/dcn35/dcn35_hubp.h [new file with mode: 0644]

index 641073f..8297fbc 100644 (file)
@@ -36,6 +36,7 @@ subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/dc/optc
 subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/dc/dpp
 subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/dc/hubbub
 subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/dc/dccg
+subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/dc/hubp
 subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/modules/inc
 subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/modules/freesync
 subdir-ccflags-y += -I$(FULL_AMD_DISPLAY_PATH)/modules/color
index e0c67f4..9c2f932 100644 (file)
@@ -22,7 +22,7 @@
 #
 # Makefile for Display Core (dc) component.
 
-DC_LIBS = basics bios dml clk_mgr dce gpio hwss irq link virtual dsc resource optc dpp hubbub dccg
+DC_LIBS = basics bios dml clk_mgr dce gpio hwss irq link virtual dsc resource optc dpp hubbub dccg hubp
 
 ifdef CONFIG_DRM_AMD_DC_FP
 
index 508306b..6848426 100644 (file)
@@ -25,7 +25,7 @@
 DCN10 = dcn10_ipp.o \
                dcn10_hw_sequencer_debug.o \
                dcn10_opp.o \
-               dcn10_hubp.o dcn10_mpc.o \
+               dcn10_mpc.o \
                dcn10_cm_common.o \
                dcn10_stream_encoder.o dcn10_link_encoder.o
 
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c
deleted file mode 100644 (file)
index bf39981..0000000
+++ /dev/null
@@ -1,1396 +0,0 @@
-/*
- * Copyright 2012-15 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-#include "dm_services.h"
-#include "dce_calcs.h"
-#include "reg_helper.h"
-#include "basics/conversion.h"
-#include "dcn10_hubp.h"
-
-#define REG(reg)\
-       hubp1->hubp_regs->reg
-
-#define CTX \
-       hubp1->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp1->hubp_shift->field_name, hubp1->hubp_mask->field_name
-
-void hubp1_set_blank(struct hubp *hubp, bool blank)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t blank_en = blank ? 1 : 0;
-
-       REG_UPDATE_2(DCHUBP_CNTL,
-                       HUBP_BLANK_EN, blank_en,
-                       HUBP_TTU_DISABLE, blank_en);
-
-       if (blank) {
-               uint32_t reg_val = REG_READ(DCHUBP_CNTL);
-
-               if (reg_val) {
-                       /* init sequence workaround: in case HUBP is
-                        * power gated, this wait would timeout.
-                        *
-                        * we just wrote reg_val to non-0, if it stay 0
-                        * it means HUBP is gated
-                        */
-                       REG_WAIT(DCHUBP_CNTL,
-                                       HUBP_NO_OUTSTANDING_REQ, 1,
-                                       1, 200);
-               }
-
-               hubp->mpcc_id = 0xf;
-               hubp->opp_id = OPP_ID_INVALID;
-       }
-}
-
-static void hubp1_disconnect(struct hubp *hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL,
-                       HUBP_TTU_DISABLE, 1);
-
-       REG_UPDATE(CURSOR_CONTROL,
-                       CURSOR_ENABLE, 0);
-}
-
-static void hubp1_disable_control(struct hubp *hubp, bool disable_hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t disable = disable_hubp ? 1 : 0;
-
-       REG_UPDATE(DCHUBP_CNTL,
-                       HUBP_DISABLE, disable);
-}
-
-static unsigned int hubp1_get_underflow_status(struct hubp *hubp)
-{
-       uint32_t hubp_underflow = 0;
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_GET(DCHUBP_CNTL,
-               HUBP_UNDERFLOW_STATUS,
-               &hubp_underflow);
-
-       return hubp_underflow;
-}
-
-
-void hubp1_clear_underflow(struct hubp *hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, 1);
-}
-
-static void hubp1_set_hubp_blank_en(struct hubp *hubp, bool blank)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t blank_en = blank ? 1 : 0;
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_BLANK_EN, blank_en);
-}
-
-void hubp1_vready_workaround(struct hubp *hubp,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       uint32_t value = 0;
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       /* set HBUBREQ_DEBUG_DB[12] = 1 */
-       value = REG_READ(HUBPREQ_DEBUG_DB);
-
-       /* hack mode disable */
-       value |= 0x100;
-       value &= ~0x1000;
-
-       if ((pipe_dest->vstartup_start - 2*(pipe_dest->vready_offset+pipe_dest->vupdate_width
-               + pipe_dest->vupdate_offset) / pipe_dest->htotal) <= pipe_dest->vblank_end) {
-               /* if (eco_fix_needed(otg_global_sync_timing)
-                * set HBUBREQ_DEBUG_DB[12] = 1 */
-               value |= 0x1000;
-       }
-
-       REG_WRITE(HUBPREQ_DEBUG_DB, value);
-}
-
-void hubp1_program_tiling(
-       struct hubp *hubp,
-       const union dc_tiling_info *info,
-       const enum surface_pixel_format pixel_format)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE_6(DCSURF_ADDR_CONFIG,
-                       NUM_PIPES, log_2(info->gfx9.num_pipes),
-                       NUM_BANKS, log_2(info->gfx9.num_banks),
-                       PIPE_INTERLEAVE, info->gfx9.pipe_interleave,
-                       NUM_SE, log_2(info->gfx9.num_shader_engines),
-                       NUM_RB_PER_SE, log_2(info->gfx9.num_rb_per_se),
-                       MAX_COMPRESSED_FRAGS, log_2(info->gfx9.max_compressed_frags));
-
-       REG_UPDATE_4(DCSURF_TILING_CONFIG,
-                       SW_MODE, info->gfx9.swizzle,
-                       META_LINEAR, info->gfx9.meta_linear,
-                       RB_ALIGNED, info->gfx9.rb_aligned,
-                       PIPE_ALIGNED, info->gfx9.pipe_aligned);
-}
-
-void hubp1_program_size(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       const struct plane_size *plane_size,
-       struct dc_plane_dcc_param *dcc)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t pitch, meta_pitch, pitch_c, meta_pitch_c;
-
-       /* Program data and meta surface pitch (calculation from addrlib)
-        * 444 or 420 luma
-        */
-       if (format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN && format < SURFACE_PIXEL_FORMAT_SUBSAMPLE_END) {
-               ASSERT(plane_size->chroma_pitch != 0);
-               /* Chroma pitch zero can cause system hang! */
-
-               pitch = plane_size->surface_pitch - 1;
-               meta_pitch = dcc->meta_pitch - 1;
-               pitch_c = plane_size->chroma_pitch - 1;
-               meta_pitch_c = dcc->meta_pitch_c - 1;
-       } else {
-               pitch = plane_size->surface_pitch - 1;
-               meta_pitch = dcc->meta_pitch - 1;
-               pitch_c = 0;
-               meta_pitch_c = 0;
-       }
-
-       if (!dcc->enable) {
-               meta_pitch = 0;
-               meta_pitch_c = 0;
-       }
-
-       REG_UPDATE_2(DCSURF_SURFACE_PITCH,
-                       PITCH, pitch, META_PITCH, meta_pitch);
-
-       if (format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN)
-               REG_UPDATE_2(DCSURF_SURFACE_PITCH_C,
-                       PITCH_C, pitch_c, META_PITCH_C, meta_pitch_c);
-}
-
-void hubp1_program_rotation(
-       struct hubp *hubp,
-       enum dc_rotation_angle rotation,
-       bool horizontal_mirror)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t mirror;
-
-
-       if (horizontal_mirror)
-               mirror = 1;
-       else
-               mirror = 0;
-
-       /* Program rotation angle and horz mirror - no mirror */
-       if (rotation == ROTATION_ANGLE_0)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 0,
-                               H_MIRROR_EN, mirror);
-       else if (rotation == ROTATION_ANGLE_90)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 1,
-                               H_MIRROR_EN, mirror);
-       else if (rotation == ROTATION_ANGLE_180)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 2,
-                               H_MIRROR_EN, mirror);
-       else if (rotation == ROTATION_ANGLE_270)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 3,
-                               H_MIRROR_EN, mirror);
-}
-
-void hubp1_program_pixel_format(
-       struct hubp *hubp,
-       enum surface_pixel_format format)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t red_bar = 3;
-       uint32_t blue_bar = 2;
-
-       /* swap for ABGR format */
-       if (format == SURFACE_PIXEL_FORMAT_GRPH_ABGR8888
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F) {
-               red_bar = 2;
-               blue_bar = 3;
-       }
-
-       REG_UPDATE_2(HUBPRET_CONTROL,
-                       CROSSBAR_SRC_CB_B, blue_bar,
-                       CROSSBAR_SRC_CR_R, red_bar);
-
-       /* Mapping is same as ipp programming (cnvc) */
-
-       switch (format) {
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 1);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 3);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 8);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB2101010:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 10);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616: /*we use crossbar already*/
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 26); /* ARGB16161616_UNORM */
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F:/*we use crossbar already*/
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 24);
-               break;
-
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 65);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 64);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCbCr:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 67);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCrCb:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 66);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_AYCrCb8888:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 12);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FIX:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 112);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FIX:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 113);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_ACrYCb2101010:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 114);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FLOAT:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 118);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FLOAT:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 119);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGBE:
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 116,
-                               ALPHA_PLANE_EN, 0);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA:
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 116,
-                               ALPHA_PLANE_EN, 1);
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       /* don't see the need of program the xbar in DCN 1.0 */
-}
-
-bool hubp1_program_surface_flip_and_addr(
-       struct hubp *hubp,
-       const struct dc_plane_address *address,
-       bool flip_immediate)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-
-       //program flip type
-       REG_UPDATE(DCSURF_FLIP_CONTROL,
-                       SURFACE_FLIP_TYPE, flip_immediate);
-
-
-       if (address->type == PLN_ADDR_TYPE_GRPH_STEREO) {
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0x1);
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x1);
-
-       } else {
-               // turn off stereo if not in stereo
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0x0);
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x0);
-       }
-
-
-
-       /* HW automatically latch rest of address register on write to
-        * DCSURF_PRIMARY_SURFACE_ADDRESS if SURFACE_UPDATE_LOCK is not used
-        *
-        * program high first and then the low addr, order matters!
-        */
-       switch (address->type) {
-       case PLN_ADDR_TYPE_GRAPHICS:
-               /* DCN1.0 does not support const color
-                * TODO: program DCHUBBUB_RET_PATH_DCC_CFGx_0/1
-                * base on address->grph.dcc_const_color
-                * x = 0, 2, 4, 6 for pipe 0, 1, 2, 3 for rgb and luma
-                * x = 1, 3, 5, 7 for pipe 0, 1, 2, 3 for chroma
-                */
-
-               if (address->grph.addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_2(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface);
-
-               if (address->grph.meta_addr.quad_part != 0) {
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph.meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->grph.meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->grph.addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->grph.addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
-               if (address->video_progressive.luma_addr.quad_part == 0
-                       || address->video_progressive.chroma_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                               PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
-                               address->video_progressive.chroma_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
-                               PRIMARY_META_SURFACE_ADDRESS_C,
-                               address->video_progressive.chroma_meta_addr.low_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                               address->video_progressive.luma_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                               PRIMARY_META_SURFACE_ADDRESS,
-                               address->video_progressive.luma_meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
-                       PRIMARY_SURFACE_ADDRESS_HIGH_C,
-                       address->video_progressive.chroma_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
-                       PRIMARY_SURFACE_ADDRESS_C,
-                       address->video_progressive.chroma_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                       PRIMARY_SURFACE_ADDRESS_HIGH,
-                       address->video_progressive.luma_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                       PRIMARY_SURFACE_ADDRESS,
-                       address->video_progressive.luma_addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_GRPH_STEREO:
-               if (address->grph_stereo.left_addr.quad_part == 0)
-                       break;
-               if (address->grph_stereo.right_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface,
-                               SECONDARY_SURFACE_TMZ, address->tmz_surface,
-                               SECONDARY_SURFACE_TMZ_C, address->tmz_surface,
-                               SECONDARY_META_SURFACE_TMZ, address->tmz_surface,
-                               SECONDARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph_stereo.right_meta_addr.high_part);
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
-                                       SECONDARY_META_SURFACE_ADDRESS,
-                                       address->grph_stereo.right_meta_addr.low_part);
-               }
-               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph_stereo.left_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->grph_stereo.left_meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
-                               SECONDARY_SURFACE_ADDRESS_HIGH,
-                               address->grph_stereo.right_addr.high_part);
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
-                               SECONDARY_SURFACE_ADDRESS,
-                               address->grph_stereo.right_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->grph_stereo.left_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->grph_stereo.left_addr.low_part);
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       hubp->request_address = *address;
-
-       return true;
-}
-
-void hubp1_dcc_control(struct hubp *hubp, bool enable,
-               enum hubp_ind_block_size independent_64b_blks)
-{
-       uint32_t dcc_en = enable ? 1 : 0;
-       uint32_t dcc_ind_64b_blk = independent_64b_blks ? 1 : 0;
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                       PRIMARY_SURFACE_DCC_EN, dcc_en,
-                       PRIMARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk,
-                       SECONDARY_SURFACE_DCC_EN, dcc_en,
-                       SECONDARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk);
-}
-
-void hubp1_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level)
-{
-       hubp1_dcc_control(hubp, dcc->enable, dcc->independent_64b_blks);
-       hubp1_program_tiling(hubp, tiling_info, format);
-       hubp1_program_size(hubp, format, plane_size, dcc);
-       hubp1_program_rotation(hubp, rotation, horizontal_mirror);
-       hubp1_program_pixel_format(hubp, format);
-}
-
-void hubp1_program_requestor(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE(HUBPRET_CONTROL,
-                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
-       REG_SET_4(DCN_EXPANSION_MODE, 0,
-                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
-                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
-                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
-                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
-       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG, 0,
-               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, rq_regs->rq_regs_l.dpte_group_size,
-               MPTE_GROUP_SIZE, rq_regs->rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, rq_regs->rq_regs_l.pte_row_height_linear);
-       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG_C, 0,
-               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.dpte_group_size,
-               MPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.mpte_group_size,
-               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, rq_regs->rq_regs_c.pte_row_height_linear);
-}
-
-
-void hubp1_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       /* DLG - Per hubp */
-       REG_SET_2(BLANK_OFFSET_0, 0,
-               REFCYC_H_BLANK_END, dlg_attr->refcyc_h_blank_end,
-               DLG_V_BLANK_END, dlg_attr->dlg_vblank_end);
-
-       REG_SET(BLANK_OFFSET_1, 0,
-               MIN_DST_Y_NEXT_START, dlg_attr->min_dst_y_next_start);
-
-       REG_SET(DST_DIMENSIONS, 0,
-               REFCYC_PER_HTOTAL, dlg_attr->refcyc_per_htotal);
-
-       REG_SET_2(DST_AFTER_SCALER, 0,
-               REFCYC_X_AFTER_SCALER, dlg_attr->refcyc_x_after_scaler,
-               DST_Y_AFTER_SCALER, dlg_attr->dst_y_after_scaler);
-
-       REG_SET(REF_FREQ_TO_PIX_FREQ, 0,
-               REF_FREQ_TO_PIX_FREQ, dlg_attr->ref_freq_to_pix_freq);
-
-       /* DLG - Per luma/chroma */
-       REG_SET(VBLANK_PARAMETERS_1, 0,
-               REFCYC_PER_PTE_GROUP_VBLANK_L, dlg_attr->refcyc_per_pte_group_vblank_l);
-
-       if (REG(NOM_PARAMETERS_0))
-               REG_SET(NOM_PARAMETERS_0, 0,
-                       DST_Y_PER_PTE_ROW_NOM_L, dlg_attr->dst_y_per_pte_row_nom_l);
-
-       if (REG(NOM_PARAMETERS_1))
-               REG_SET(NOM_PARAMETERS_1, 0,
-                       REFCYC_PER_PTE_GROUP_NOM_L, dlg_attr->refcyc_per_pte_group_nom_l);
-
-       REG_SET(NOM_PARAMETERS_4, 0,
-               DST_Y_PER_META_ROW_NOM_L, dlg_attr->dst_y_per_meta_row_nom_l);
-
-       REG_SET(NOM_PARAMETERS_5, 0,
-               REFCYC_PER_META_CHUNK_NOM_L, dlg_attr->refcyc_per_meta_chunk_nom_l);
-
-       REG_SET_2(PER_LINE_DELIVERY, 0,
-               REFCYC_PER_LINE_DELIVERY_L, dlg_attr->refcyc_per_line_delivery_l,
-               REFCYC_PER_LINE_DELIVERY_C, dlg_attr->refcyc_per_line_delivery_c);
-
-       REG_SET(VBLANK_PARAMETERS_2, 0,
-               REFCYC_PER_PTE_GROUP_VBLANK_C, dlg_attr->refcyc_per_pte_group_vblank_c);
-
-       if (REG(NOM_PARAMETERS_2))
-               REG_SET(NOM_PARAMETERS_2, 0,
-                       DST_Y_PER_PTE_ROW_NOM_C, dlg_attr->dst_y_per_pte_row_nom_c);
-
-       if (REG(NOM_PARAMETERS_3))
-               REG_SET(NOM_PARAMETERS_3, 0,
-                       REFCYC_PER_PTE_GROUP_NOM_C, dlg_attr->refcyc_per_pte_group_nom_c);
-
-       REG_SET(NOM_PARAMETERS_6, 0,
-               DST_Y_PER_META_ROW_NOM_C, dlg_attr->dst_y_per_meta_row_nom_c);
-
-       REG_SET(NOM_PARAMETERS_7, 0,
-               REFCYC_PER_META_CHUNK_NOM_C, dlg_attr->refcyc_per_meta_chunk_nom_c);
-
-       /* TTU - per hubp */
-       REG_SET_2(DCN_TTU_QOS_WM, 0,
-               QoS_LEVEL_LOW_WM, ttu_attr->qos_level_low_wm,
-               QoS_LEVEL_HIGH_WM, ttu_attr->qos_level_high_wm);
-
-       /* TTU - per luma/chroma */
-       /* Assumed surf0 is luma and 1 is chroma */
-
-       REG_SET_3(DCN_SURF0_TTU_CNTL0, 0,
-               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_l,
-               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_l,
-               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_l);
-
-       REG_SET_3(DCN_SURF1_TTU_CNTL0, 0,
-               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_c,
-               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_c,
-               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_c);
-
-       REG_SET_3(DCN_CUR0_TTU_CNTL0, 0,
-               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_cur0,
-               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_cur0,
-               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_cur0);
-}
-
-static void hubp1_setup(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       /* otg is locked when this func is called. Register are double buffered.
-        * disable the requestors is not needed
-        */
-       hubp1_program_requestor(hubp, rq_regs);
-       hubp1_program_deadline(hubp, dlg_attr, ttu_attr);
-       hubp1_vready_workaround(hubp, pipe_dest);
-}
-
-static void hubp1_setup_interdependent(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_SET_2(PREFETCH_SETTINS, 0,
-               DST_Y_PREFETCH, dlg_attr->dst_y_prefetch,
-               VRATIO_PREFETCH, dlg_attr->vratio_prefetch);
-
-       REG_SET(PREFETCH_SETTINS_C, 0,
-               VRATIO_PREFETCH_C, dlg_attr->vratio_prefetch_c);
-
-       REG_SET_2(VBLANK_PARAMETERS_0, 0,
-               DST_Y_PER_VM_VBLANK, dlg_attr->dst_y_per_vm_vblank,
-               DST_Y_PER_ROW_VBLANK, dlg_attr->dst_y_per_row_vblank);
-
-       REG_SET(VBLANK_PARAMETERS_3, 0,
-               REFCYC_PER_META_CHUNK_VBLANK_L, dlg_attr->refcyc_per_meta_chunk_vblank_l);
-
-       REG_SET(VBLANK_PARAMETERS_4, 0,
-               REFCYC_PER_META_CHUNK_VBLANK_C, dlg_attr->refcyc_per_meta_chunk_vblank_c);
-
-       REG_SET_2(PER_LINE_DELIVERY_PRE, 0,
-               REFCYC_PER_LINE_DELIVERY_PRE_L, dlg_attr->refcyc_per_line_delivery_pre_l,
-               REFCYC_PER_LINE_DELIVERY_PRE_C, dlg_attr->refcyc_per_line_delivery_pre_c);
-
-       REG_SET(DCN_SURF0_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               ttu_attr->refcyc_per_req_delivery_pre_l);
-       REG_SET(DCN_SURF1_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               ttu_attr->refcyc_per_req_delivery_pre_c);
-       REG_SET(DCN_CUR0_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE, ttu_attr->refcyc_per_req_delivery_pre_cur0);
-
-       REG_SET_2(DCN_GLOBAL_TTU_CNTL, 0,
-               MIN_TTU_VBLANK, ttu_attr->min_ttu_vblank,
-               QoS_LEVEL_FLIP, ttu_attr->qos_level_flip);
-}
-
-bool hubp1_is_flip_pending(struct hubp *hubp)
-{
-       uint32_t flip_pending = 0;
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       struct dc_plane_address earliest_inuse_address;
-
-       if (hubp && hubp->power_gated)
-               return false;
-
-       REG_GET(DCSURF_FLIP_CONTROL,
-                       SURFACE_FLIP_PENDING, &flip_pending);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
-                       SURFACE_EARLIEST_INUSE_ADDRESS, &earliest_inuse_address.grph.addr.low_part);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
-                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &earliest_inuse_address.grph.addr.high_part);
-
-       if (flip_pending)
-               return true;
-
-       if (earliest_inuse_address.grph.addr.quad_part != hubp->request_address.grph.addr.quad_part)
-               return true;
-
-       return false;
-}
-
-static uint32_t aperture_default_system = 1;
-static uint32_t context0_default_system; /* = 0;*/
-
-static void hubp1_set_vm_system_aperture_settings(struct hubp *hubp,
-               struct vm_system_aperture_param *apt)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_default;
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
-
-       mc_vm_apt_default.quad_part = apt->sys_default.quad_part >> 12;
-       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 12;
-       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 12;
-
-       REG_SET_2(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, 0,
-               MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, aperture_default_system, /* 1 = system physical memory */
-               MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mc_vm_apt_default.high_part);
-       REG_SET(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, 0,
-               MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mc_vm_apt_default.low_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, 0,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, mc_vm_apt_low.high_part);
-       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, 0,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mc_vm_apt_low.low_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, 0,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mc_vm_apt_high.high_part);
-       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, 0,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mc_vm_apt_high.low_part);
-}
-
-static void hubp1_set_vm_context0_settings(struct hubp *hubp,
-               const struct vm_context0_param *vm0)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       /* pte base */
-       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, 0,
-                       VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, vm0->pte_base.high_part);
-       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, 0,
-                       VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, vm0->pte_base.low_part);
-
-       /* pte start */
-       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, 0,
-                       VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, vm0->pte_start.high_part);
-       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, 0,
-                       VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, vm0->pte_start.low_part);
-
-       /* pte end */
-       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, 0,
-                       VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, vm0->pte_end.high_part);
-       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, 0,
-                       VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, vm0->pte_end.low_part);
-
-       /* fault handling */
-       REG_SET_2(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, 0,
-                       VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, vm0->fault_default.high_part,
-                       VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM, context0_default_system);
-       REG_SET(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, 0,
-                       VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, vm0->fault_default.low_part);
-
-       /* control: enable VM PTE*/
-       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
-                       ENABLE_L1_TLB, 1,
-                       SYSTEM_ACCESS_MODE, 3);
-}
-
-void min_set_viewport(
-       struct hubp *hubp,
-       const struct rect *viewport,
-       const struct rect *viewport_c)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION, 0,
-                 PRI_VIEWPORT_WIDTH, viewport->width,
-                 PRI_VIEWPORT_HEIGHT, viewport->height);
-
-       REG_SET_2(DCSURF_PRI_VIEWPORT_START, 0,
-                 PRI_VIEWPORT_X_START, viewport->x,
-                 PRI_VIEWPORT_Y_START, viewport->y);
-
-       /*for stereo*/
-       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION, 0,
-                 SEC_VIEWPORT_WIDTH, viewport->width,
-                 SEC_VIEWPORT_HEIGHT, viewport->height);
-
-       REG_SET_2(DCSURF_SEC_VIEWPORT_START, 0,
-                 SEC_VIEWPORT_X_START, viewport->x,
-                 SEC_VIEWPORT_Y_START, viewport->y);
-
-       /* DC supports NV12 only at the moment */
-       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION_C, 0,
-                 PRI_VIEWPORT_WIDTH_C, viewport_c->width,
-                 PRI_VIEWPORT_HEIGHT_C, viewport_c->height);
-
-       REG_SET_2(DCSURF_PRI_VIEWPORT_START_C, 0,
-                 PRI_VIEWPORT_X_START_C, viewport_c->x,
-                 PRI_VIEWPORT_Y_START_C, viewport_c->y);
-
-       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION_C, 0,
-                 SEC_VIEWPORT_WIDTH_C, viewport_c->width,
-                 SEC_VIEWPORT_HEIGHT_C, viewport_c->height);
-
-       REG_SET_2(DCSURF_SEC_VIEWPORT_START_C, 0,
-                 SEC_VIEWPORT_X_START_C, viewport_c->x,
-                 SEC_VIEWPORT_Y_START_C, viewport_c->y);
-}
-
-void hubp1_read_state_common(struct hubp *hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       struct dcn_hubp_state *s = &hubp1->state;
-       struct _vcs_dpi_display_dlg_regs_st *dlg_attr = &s->dlg_attr;
-       struct _vcs_dpi_display_ttu_regs_st *ttu_attr = &s->ttu_attr;
-       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
-       uint32_t aperture_low_msb, aperture_low_lsb;
-       uint32_t aperture_high_msb, aperture_high_lsb;
-
-       /* Requester */
-       REG_GET(HUBPRET_CONTROL,
-                       DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs->plane1_base_address);
-       REG_GET_4(DCN_EXPANSION_MODE,
-                       DRQ_EXPANSION_MODE, &rq_regs->drq_expansion_mode,
-                       PRQ_EXPANSION_MODE, &rq_regs->prq_expansion_mode,
-                       MRQ_EXPANSION_MODE, &rq_regs->mrq_expansion_mode,
-                       CRQ_EXPANSION_MODE, &rq_regs->crq_expansion_mode);
-
-       REG_GET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, &aperture_low_msb);
-
-       REG_GET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, &aperture_low_lsb);
-
-       REG_GET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, &aperture_high_msb);
-
-       REG_GET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, &aperture_high_lsb);
-
-       // On DCN1, aperture is broken down into MSB and LSB; only keep bits [47:18] to match later DCN format
-       rq_regs->aperture_low_addr = (aperture_low_msb << 26) | (aperture_low_lsb >> 6);
-       rq_regs->aperture_high_addr = (aperture_high_msb << 26) | (aperture_high_lsb >> 6);
-
-       /* DLG - Per hubp */
-       REG_GET_2(BLANK_OFFSET_0,
-               REFCYC_H_BLANK_END, &dlg_attr->refcyc_h_blank_end,
-               DLG_V_BLANK_END, &dlg_attr->dlg_vblank_end);
-
-       REG_GET(BLANK_OFFSET_1,
-               MIN_DST_Y_NEXT_START, &dlg_attr->min_dst_y_next_start);
-
-       REG_GET(DST_DIMENSIONS,
-               REFCYC_PER_HTOTAL, &dlg_attr->refcyc_per_htotal);
-
-       REG_GET_2(DST_AFTER_SCALER,
-               REFCYC_X_AFTER_SCALER, &dlg_attr->refcyc_x_after_scaler,
-               DST_Y_AFTER_SCALER, &dlg_attr->dst_y_after_scaler);
-
-       if (REG(PREFETCH_SETTINS))
-               REG_GET_2(PREFETCH_SETTINS,
-                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
-                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
-       else
-               REG_GET_2(PREFETCH_SETTINGS,
-                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
-                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
-
-       REG_GET_2(VBLANK_PARAMETERS_0,
-               DST_Y_PER_VM_VBLANK, &dlg_attr->dst_y_per_vm_vblank,
-               DST_Y_PER_ROW_VBLANK, &dlg_attr->dst_y_per_row_vblank);
-
-       REG_GET(REF_FREQ_TO_PIX_FREQ,
-               REF_FREQ_TO_PIX_FREQ, &dlg_attr->ref_freq_to_pix_freq);
-
-       /* DLG - Per luma/chroma */
-       REG_GET(VBLANK_PARAMETERS_1,
-               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr->refcyc_per_pte_group_vblank_l);
-
-       REG_GET(VBLANK_PARAMETERS_3,
-               REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr->refcyc_per_meta_chunk_vblank_l);
-
-       if (REG(NOM_PARAMETERS_0))
-               REG_GET(NOM_PARAMETERS_0,
-                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr->dst_y_per_pte_row_nom_l);
-
-       if (REG(NOM_PARAMETERS_1))
-               REG_GET(NOM_PARAMETERS_1,
-                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr->refcyc_per_pte_group_nom_l);
-
-       REG_GET(NOM_PARAMETERS_4,
-               DST_Y_PER_META_ROW_NOM_L, &dlg_attr->dst_y_per_meta_row_nom_l);
-
-       REG_GET(NOM_PARAMETERS_5,
-               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr->refcyc_per_meta_chunk_nom_l);
-
-       REG_GET_2(PER_LINE_DELIVERY_PRE,
-               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr->refcyc_per_line_delivery_pre_l,
-               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr->refcyc_per_line_delivery_pre_c);
-
-       REG_GET_2(PER_LINE_DELIVERY,
-               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr->refcyc_per_line_delivery_l,
-               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr->refcyc_per_line_delivery_c);
-
-       if (REG(PREFETCH_SETTINS_C))
-               REG_GET(PREFETCH_SETTINS_C,
-                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
-       else
-               REG_GET(PREFETCH_SETTINGS_C,
-                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
-
-       REG_GET(VBLANK_PARAMETERS_2,
-               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr->refcyc_per_pte_group_vblank_c);
-
-       REG_GET(VBLANK_PARAMETERS_4,
-               REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr->refcyc_per_meta_chunk_vblank_c);
-
-       if (REG(NOM_PARAMETERS_2))
-               REG_GET(NOM_PARAMETERS_2,
-                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr->dst_y_per_pte_row_nom_c);
-
-       if (REG(NOM_PARAMETERS_3))
-               REG_GET(NOM_PARAMETERS_3,
-                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr->refcyc_per_pte_group_nom_c);
-
-       REG_GET(NOM_PARAMETERS_6,
-               DST_Y_PER_META_ROW_NOM_C, &dlg_attr->dst_y_per_meta_row_nom_c);
-
-       REG_GET(NOM_PARAMETERS_7,
-               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr->refcyc_per_meta_chunk_nom_c);
-
-       /* TTU - per hubp */
-       REG_GET_2(DCN_TTU_QOS_WM,
-               QoS_LEVEL_LOW_WM, &ttu_attr->qos_level_low_wm,
-               QoS_LEVEL_HIGH_WM, &ttu_attr->qos_level_high_wm);
-
-       REG_GET_2(DCN_GLOBAL_TTU_CNTL,
-               MIN_TTU_VBLANK, &ttu_attr->min_ttu_vblank,
-               QoS_LEVEL_FLIP, &ttu_attr->qos_level_flip);
-
-       /* TTU - per luma/chroma */
-       /* Assumed surf0 is luma and 1 is chroma */
-
-       REG_GET_3(DCN_SURF0_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_l,
-               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_l,
-               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_l);
-
-       REG_GET(DCN_SURF0_TTU_CNTL1,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               &ttu_attr->refcyc_per_req_delivery_pre_l);
-
-       REG_GET_3(DCN_SURF1_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_c,
-               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_c,
-               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_c);
-
-       REG_GET(DCN_SURF1_TTU_CNTL1,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               &ttu_attr->refcyc_per_req_delivery_pre_c);
-
-       /* Rest of hubp */
-       REG_GET(DCSURF_SURFACE_CONFIG,
-                       SURFACE_PIXEL_FORMAT, &s->pixel_format);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
-                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &s->inuse_addr_hi);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
-                       SURFACE_EARLIEST_INUSE_ADDRESS, &s->inuse_addr_lo);
-
-       REG_GET_2(DCSURF_PRI_VIEWPORT_DIMENSION,
-                       PRI_VIEWPORT_WIDTH, &s->viewport_width,
-                       PRI_VIEWPORT_HEIGHT, &s->viewport_height);
-
-       REG_GET_2(DCSURF_SURFACE_CONFIG,
-                       ROTATION_ANGLE, &s->rotation_angle,
-                       H_MIRROR_EN, &s->h_mirror_en);
-
-       REG_GET(DCSURF_TILING_CONFIG,
-                       SW_MODE, &s->sw_mode);
-
-       REG_GET(DCSURF_SURFACE_CONTROL,
-                       PRIMARY_SURFACE_DCC_EN, &s->dcc_en);
-
-       REG_GET_3(DCHUBP_CNTL,
-                       HUBP_BLANK_EN, &s->blank_en,
-                       HUBP_TTU_DISABLE, &s->ttu_disable,
-                       HUBP_UNDERFLOW_STATUS, &s->underflow_status);
-
-       REG_GET(HUBP_CLK_CNTL,
-                       HUBP_CLOCK_ENABLE, &s->clock_en);
-
-       REG_GET(DCN_GLOBAL_TTU_CNTL,
-                       MIN_TTU_VBLANK, &s->min_ttu_vblank);
-
-       REG_GET_2(DCN_TTU_QOS_WM,
-                       QoS_LEVEL_LOW_WM, &s->qos_level_low_wm,
-                       QoS_LEVEL_HIGH_WM, &s->qos_level_high_wm);
-
-       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS,
-                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_lo);
-
-       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH,
-                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_hi);
-
-       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS,
-                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_lo);
-
-       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_hi);
-}
-
-void hubp1_read_state(struct hubp *hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       struct dcn_hubp_state *s = &hubp1->state;
-       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
-
-       hubp1_read_state_common(hubp);
-
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
-               CHUNK_SIZE, &rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, &rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, &rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, &rq_regs->rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, &rq_regs->rq_regs_l.dpte_group_size,
-               MPTE_GROUP_SIZE, &rq_regs->rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, &rq_regs->rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, &rq_regs->rq_regs_l.pte_row_height_linear);
-
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG_C,
-               CHUNK_SIZE_C, &rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.dpte_group_size,
-               MPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.mpte_group_size,
-               SWATH_HEIGHT_C, &rq_regs->rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs->rq_regs_c.pte_row_height_linear);
-
-}
-enum cursor_pitch hubp1_get_cursor_pitch(unsigned int pitch)
-{
-       enum cursor_pitch hw_pitch;
-
-       switch (pitch) {
-       case 64:
-               hw_pitch = CURSOR_PITCH_64_PIXELS;
-               break;
-       case 128:
-               hw_pitch = CURSOR_PITCH_128_PIXELS;
-               break;
-       case 256:
-               hw_pitch = CURSOR_PITCH_256_PIXELS;
-               break;
-       default:
-               DC_ERR("Invalid cursor pitch of %d. "
-                               "Only 64/128/256 is supported on DCN.\n", pitch);
-               hw_pitch = CURSOR_PITCH_64_PIXELS;
-               break;
-       }
-       return hw_pitch;
-}
-
-static enum cursor_lines_per_chunk hubp1_get_lines_per_chunk(
-               unsigned int cur_width,
-               enum dc_cursor_color_format format)
-{
-       enum cursor_lines_per_chunk line_per_chunk;
-
-       if (format == CURSOR_MODE_MONO)
-               /* impl B. expansion in CUR Buffer reader */
-               line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
-       else if (cur_width <= 32)
-               line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
-       else if (cur_width <= 64)
-               line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
-       else if (cur_width <= 128)
-               line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
-       else
-               line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
-
-       return line_per_chunk;
-}
-
-void hubp1_cursor_set_attributes(
-               struct hubp *hubp,
-               const struct dc_cursor_attributes *attr)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       enum cursor_pitch hw_pitch = hubp1_get_cursor_pitch(attr->pitch);
-       enum cursor_lines_per_chunk lpc = hubp1_get_lines_per_chunk(
-                       attr->width, attr->color_format);
-
-       hubp->curs_attr = *attr;
-
-       REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
-                       CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
-       REG_UPDATE(CURSOR_SURFACE_ADDRESS,
-                       CURSOR_SURFACE_ADDRESS, attr->address.low_part);
-
-       REG_UPDATE_2(CURSOR_SIZE,
-                       CURSOR_WIDTH, attr->width,
-                       CURSOR_HEIGHT, attr->height);
-
-       REG_UPDATE_3(CURSOR_CONTROL,
-                       CURSOR_MODE, attr->color_format,
-                       CURSOR_PITCH, hw_pitch,
-                       CURSOR_LINES_PER_CHUNK, lpc);
-
-       REG_SET_2(CURSOR_SETTINS, 0,
-                       /* no shift of the cursor HDL schedule */
-                       CURSOR0_DST_Y_OFFSET, 0,
-                        /* used to shift the cursor chunk request deadline */
-                       CURSOR0_CHUNK_HDL_ADJUST, 3);
-}
-
-void hubp1_cursor_set_position(
-               struct hubp *hubp,
-               const struct dc_cursor_position *pos,
-               const struct dc_cursor_mi_param *param)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       int x_pos = pos->x - param->viewport.x;
-       int y_pos = pos->y - param->viewport.y;
-       int x_hotspot = pos->x_hotspot;
-       int y_hotspot = pos->y_hotspot;
-       int src_x_offset = x_pos - pos->x_hotspot;
-       int src_y_offset = y_pos - pos->y_hotspot;
-       int cursor_height = (int)hubp->curs_attr.height;
-       int cursor_width = (int)hubp->curs_attr.width;
-       uint32_t dst_x_offset;
-       uint32_t cur_en = pos->enable ? 1 : 0;
-
-       hubp->curs_pos = *pos;
-
-       /*
-        * Guard aganst cursor_set_position() from being called with invalid
-        * attributes
-        *
-        * TODO: Look at combining cursor_set_position() and
-        * cursor_set_attributes() into cursor_update()
-        */
-       if (hubp->curs_attr.address.quad_part == 0)
-               return;
-
-       // Transform cursor width / height and hotspots for offset calculations
-       if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) {
-               swap(cursor_height, cursor_width);
-               swap(x_hotspot, y_hotspot);
-
-               if (param->rotation == ROTATION_ANGLE_90) {
-                       // hotspot = (-y, x)
-                       src_x_offset = x_pos - (cursor_width - x_hotspot);
-                       src_y_offset = y_pos - y_hotspot;
-               } else if (param->rotation == ROTATION_ANGLE_270) {
-                       // hotspot = (y, -x)
-                       src_x_offset = x_pos - x_hotspot;
-                       src_y_offset = y_pos - (cursor_height - y_hotspot);
-               }
-       } else if (param->rotation == ROTATION_ANGLE_180) {
-               // hotspot = (-x, -y)
-               if (!param->mirror)
-                       src_x_offset = x_pos - (cursor_width - x_hotspot);
-
-               src_y_offset = y_pos - (cursor_height - y_hotspot);
-       }
-
-       dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0;
-       dst_x_offset *= param->ref_clk_khz;
-       dst_x_offset /= param->pixel_clk_khz;
-
-       ASSERT(param->h_scale_ratio.value);
-
-       if (param->h_scale_ratio.value)
-               dst_x_offset = dc_fixpt_floor(dc_fixpt_div(
-                               dc_fixpt_from_int(dst_x_offset),
-                               param->h_scale_ratio));
-
-       if (src_x_offset >= (int)param->viewport.width)
-               cur_en = 0;  /* not visible beyond right edge*/
-
-       if (src_x_offset + cursor_width <= 0)
-               cur_en = 0;  /* not visible beyond left edge*/
-
-       if (src_y_offset >= (int)param->viewport.height)
-               cur_en = 0;  /* not visible beyond bottom edge*/
-
-       if (src_y_offset + cursor_height <= 0)
-               cur_en = 0;  /* not visible beyond top edge*/
-
-       if (cur_en && REG_READ(CURSOR_SURFACE_ADDRESS) == 0)
-               hubp->funcs->set_cursor_attributes(hubp, &hubp->curs_attr);
-
-       REG_UPDATE(CURSOR_CONTROL,
-                       CURSOR_ENABLE, cur_en);
-
-       REG_SET_2(CURSOR_POSITION, 0,
-                       CURSOR_X_POSITION, pos->x,
-                       CURSOR_Y_POSITION, pos->y);
-
-       REG_SET_2(CURSOR_HOT_SPOT, 0,
-                       CURSOR_HOT_SPOT_X, pos->x_hotspot,
-                       CURSOR_HOT_SPOT_Y, pos->y_hotspot);
-
-       REG_SET(CURSOR_DST_OFFSET, 0,
-                       CURSOR_DST_X_OFFSET, dst_x_offset);
-       /* TODO Handle surface pixel formats other than 4:4:4 */
-}
-
-/**
- * hubp1_clk_cntl - Disable or enable clocks for DCHUBP
- *
- * @hubp: hubp struct reference.
- * @enable: Set true for enabling gate clock.
- *
- * When enabling/disabling DCHUBP clock, we affect dcfclk/dppclk.
- */
-void hubp1_clk_cntl(struct hubp *hubp, bool enable)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-       uint32_t clk_enable = enable ? 1 : 0;
-
-       REG_UPDATE(HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, clk_enable);
-}
-
-void hubp1_vtg_sel(struct hubp *hubp, uint32_t otg_inst)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_VTG_SEL, otg_inst);
-}
-
-bool hubp1_in_blank(struct hubp *hubp)
-{
-       uint32_t in_blank;
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_GET(DCHUBP_CNTL, HUBP_IN_BLANK, &in_blank);
-       return in_blank ? true : false;
-}
-
-void hubp1_soft_reset(struct hubp *hubp, bool reset)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_DISABLE, reset ? 1 : 0);
-}
-
-/**
- * hubp1_set_flip_int - Enable surface flip interrupt
- *
- * @hubp: hubp struct reference.
- */
-void hubp1_set_flip_int(struct hubp *hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_UPDATE(DCSURF_SURFACE_FLIP_INTERRUPT,
-               SURFACE_FLIP_INT_MASK, 1);
-
-       return;
-}
-
-/**
- * hubp1_wait_pipe_read_start - wait for hubp ret path starting read.
- *
- * @hubp: hubp struct reference.
- */
-static void hubp1_wait_pipe_read_start(struct hubp *hubp)
-{
-       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
-
-       REG_WAIT(HUBPRET_READ_LINE_STATUS,
-               PIPE_READ_VBLANK, 0,
-                1, 1000);
-}
-
-void hubp1_init(struct hubp *hubp)
-{
-       //do nothing
-}
-static const struct hubp_funcs dcn10_hubp_funcs = {
-       .hubp_program_surface_flip_and_addr =
-                       hubp1_program_surface_flip_and_addr,
-       .hubp_program_surface_config =
-                       hubp1_program_surface_config,
-       .hubp_is_flip_pending = hubp1_is_flip_pending,
-       .hubp_setup = hubp1_setup,
-       .hubp_setup_interdependent = hubp1_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp1_set_vm_system_aperture_settings,
-       .hubp_set_vm_context0_settings = hubp1_set_vm_context0_settings,
-       .set_blank = hubp1_set_blank,
-       .dcc_control = hubp1_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .set_hubp_blank_en = hubp1_set_hubp_blank_en,
-       .set_cursor_attributes  = hubp1_cursor_set_attributes,
-       .set_cursor_position    = hubp1_cursor_set_position,
-       .hubp_disconnect = hubp1_disconnect,
-       .hubp_clk_cntl = hubp1_clk_cntl,
-       .hubp_vtg_sel = hubp1_vtg_sel,
-       .hubp_read_state = hubp1_read_state,
-       .hubp_clear_underflow = hubp1_clear_underflow,
-       .hubp_disable_control =  hubp1_disable_control,
-       .hubp_get_underflow_status = hubp1_get_underflow_status,
-       .hubp_init = hubp1_init,
-
-       .dmdata_set_attributes = NULL,
-       .dmdata_load = NULL,
-       .hubp_soft_reset = hubp1_soft_reset,
-       .hubp_in_blank = hubp1_in_blank,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-       .hubp_wait_pipe_read_start = hubp1_wait_pipe_read_start,
-};
-
-/*****************************************/
-/* Constructor, Destructor               */
-/*****************************************/
-
-void dcn10_hubp_construct(
-       struct dcn10_hubp *hubp1,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_mi_registers *hubp_regs,
-       const struct dcn_mi_shift *hubp_shift,
-       const struct dcn_mi_mask *hubp_mask)
-{
-       hubp1->base.funcs = &dcn10_hubp_funcs;
-       hubp1->base.ctx = ctx;
-       hubp1->hubp_regs = hubp_regs;
-       hubp1->hubp_shift = hubp_shift;
-       hubp1->hubp_mask = hubp_mask;
-       hubp1->base.inst = inst;
-       hubp1->base.opp_id = OPP_ID_INVALID;
-       hubp1->base.mpcc_id = 0xf;
-}
-
-
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h
deleted file mode 100644 (file)
index 69119b2..0000000
+++ /dev/null
@@ -1,797 +0,0 @@
-/* Copyright 2012-15 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_MEM_INPUT_DCN10_H__
-#define __DC_MEM_INPUT_DCN10_H__
-
-#include "hubp.h"
-
-#define TO_DCN10_HUBP(hubp)\
-       container_of(hubp, struct dcn10_hubp, base)
-
-/* Register address initialization macro for all ASICs (including those with reduced functionality) */
-#define HUBP_REG_LIST_DCN(id)\
-       SRI(DCHUBP_CNTL, HUBP, id),\
-       SRI(HUBPREQ_DEBUG_DB, HUBP, id),\
-       SRI(HUBPREQ_DEBUG, HUBP, id),\
-       SRI(DCSURF_ADDR_CONFIG, HUBP, id),\
-       SRI(DCSURF_TILING_CONFIG, HUBP, id),\
-       SRI(DCSURF_SURFACE_PITCH, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_PITCH_C, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_CONFIG, HUBP, id),\
-       SRI(DCSURF_FLIP_CONTROL, HUBPREQ, id),\
-       SRI(DCSURF_PRI_VIEWPORT_DIMENSION, HUBP, id), \
-       SRI(DCSURF_PRI_VIEWPORT_START, HUBP, id), \
-       SRI(DCSURF_SEC_VIEWPORT_DIMENSION, HUBP, id), \
-       SRI(DCSURF_SEC_VIEWPORT_START, HUBP, id), \
-       SRI(DCSURF_PRI_VIEWPORT_DIMENSION_C, HUBP, id), \
-       SRI(DCSURF_PRI_VIEWPORT_START_C, HUBP, id), \
-       SRI(DCSURF_SEC_VIEWPORT_DIMENSION_C, HUBP, id), \
-       SRI(DCSURF_SEC_VIEWPORT_START_C, HUBP, id), \
-       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_C, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_C, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
-       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
-       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_INUSE, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_INUSE_HIGH, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_INUSE_C, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_INUSE_HIGH_C, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_EARLIEST_INUSE, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_EARLIEST_INUSE_HIGH, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_EARLIEST_INUSE_C, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_CONTROL, HUBPREQ, id),\
-       SRI(DCSURF_SURFACE_FLIP_INTERRUPT, HUBPREQ, id),\
-       SRI(HUBPRET_CONTROL, HUBPRET, id),\
-       SRI(HUBPRET_READ_LINE_STATUS, HUBPRET, id),\
-       SRI(DCN_EXPANSION_MODE, HUBPREQ, id),\
-       SRI(DCHUBP_REQ_SIZE_CONFIG, HUBP, id),\
-       SRI(DCHUBP_REQ_SIZE_CONFIG_C, HUBP, id),\
-       SRI(BLANK_OFFSET_0, HUBPREQ, id),\
-       SRI(BLANK_OFFSET_1, HUBPREQ, id),\
-       SRI(DST_DIMENSIONS, HUBPREQ, id),\
-       SRI(DST_AFTER_SCALER, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_0, HUBPREQ, id),\
-       SRI(REF_FREQ_TO_PIX_FREQ, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_1, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_3, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_4, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_5, HUBPREQ, id),\
-       SRI(PER_LINE_DELIVERY_PRE, HUBPREQ, id),\
-       SRI(PER_LINE_DELIVERY, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_2, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_4, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_6, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_7, HUBPREQ, id),\
-       SRI(DCN_TTU_QOS_WM, HUBPREQ, id),\
-       SRI(DCN_GLOBAL_TTU_CNTL, HUBPREQ, id),\
-       SRI(DCN_SURF0_TTU_CNTL0, HUBPREQ, id),\
-       SRI(DCN_SURF0_TTU_CNTL1, HUBPREQ, id),\
-       SRI(DCN_SURF1_TTU_CNTL0, HUBPREQ, id),\
-       SRI(DCN_SURF1_TTU_CNTL1, HUBPREQ, id),\
-       SRI(DCN_CUR0_TTU_CNTL0, HUBPREQ, id),\
-       SRI(DCN_CUR0_TTU_CNTL1, HUBPREQ, id),\
-       SRI(HUBP_CLK_CNTL, HUBP, id)
-
-/* Register address initialization macro for ASICs with VM */
-#define HUBP_REG_LIST_DCN_VM(id)\
-       SRI(NOM_PARAMETERS_0, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_1, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_2, HUBPREQ, id),\
-       SRI(NOM_PARAMETERS_3, HUBPREQ, id),\
-       SRI(DCN_VM_MX_L1_TLB_CNTL, HUBPREQ, id)
-
-#define HUBP_REG_LIST_DCN10(id)\
-       HUBP_REG_LIST_DCN(id),\
-       HUBP_REG_LIST_DCN_VM(id),\
-       SRI(PREFETCH_SETTINS, HUBPREQ, id),\
-       SRI(PREFETCH_SETTINS_C, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\
-       SRI(CURSOR_SETTINS, HUBPREQ, id), \
-       SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR, id), \
-       SRI(CURSOR_SURFACE_ADDRESS, CURSOR, id), \
-       SRI(CURSOR_SIZE, CURSOR, id), \
-       SRI(CURSOR_CONTROL, CURSOR, id), \
-       SRI(CURSOR_POSITION, CURSOR, id), \
-       SRI(CURSOR_HOT_SPOT, CURSOR, id), \
-       SRI(CURSOR_DST_OFFSET, CURSOR, id)
-
-#define HUBP_COMMON_REG_VARIABLE_LIST \
-       uint32_t DCHUBP_CNTL; \
-       uint32_t HUBPREQ_DEBUG_DB; \
-       uint32_t HUBPREQ_DEBUG; \
-       uint32_t DCSURF_ADDR_CONFIG; \
-       uint32_t DCSURF_TILING_CONFIG; \
-       uint32_t DCSURF_SURFACE_PITCH; \
-       uint32_t DCSURF_SURFACE_PITCH_C; \
-       uint32_t DCSURF_SURFACE_CONFIG; \
-       uint32_t DCSURF_FLIP_CONTROL; \
-       uint32_t DCSURF_PRI_VIEWPORT_DIMENSION; \
-       uint32_t DCSURF_PRI_VIEWPORT_START; \
-       uint32_t DCSURF_SEC_VIEWPORT_DIMENSION; \
-       uint32_t DCSURF_SEC_VIEWPORT_START; \
-       uint32_t DCSURF_PRI_VIEWPORT_DIMENSION_C; \
-       uint32_t DCSURF_PRI_VIEWPORT_START_C; \
-       uint32_t DCSURF_SEC_VIEWPORT_DIMENSION_C; \
-       uint32_t DCSURF_SEC_VIEWPORT_START_C; \
-       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH; \
-       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS; \
-       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH; \
-       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS; \
-       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH; \
-       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS; \
-       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH; \
-       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS; \
-       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C; \
-       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_C; \
-       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C; \
-       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_C; \
-       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C; \
-       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_C; \
-       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C; \
-       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_C; \
-       uint32_t DCSURF_SURFACE_INUSE; \
-       uint32_t DCSURF_SURFACE_INUSE_HIGH; \
-       uint32_t DCSURF_SURFACE_INUSE_C; \
-       uint32_t DCSURF_SURFACE_INUSE_HIGH_C; \
-       uint32_t DCSURF_SURFACE_EARLIEST_INUSE; \
-       uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH; \
-       uint32_t DCSURF_SURFACE_EARLIEST_INUSE_C; \
-       uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C; \
-       uint32_t DCSURF_SURFACE_CONTROL; \
-       uint32_t DCSURF_SURFACE_FLIP_INTERRUPT; \
-       uint32_t HUBPRET_CONTROL; \
-       uint32_t HUBPRET_READ_LINE_STATUS; \
-       uint32_t DCN_EXPANSION_MODE; \
-       uint32_t DCHUBP_REQ_SIZE_CONFIG; \
-       uint32_t DCHUBP_REQ_SIZE_CONFIG_C; \
-       uint32_t BLANK_OFFSET_0; \
-       uint32_t BLANK_OFFSET_1; \
-       uint32_t DST_DIMENSIONS; \
-       uint32_t DST_AFTER_SCALER; \
-       uint32_t PREFETCH_SETTINS; \
-       uint32_t PREFETCH_SETTINGS; \
-       uint32_t VBLANK_PARAMETERS_0; \
-       uint32_t REF_FREQ_TO_PIX_FREQ; \
-       uint32_t VBLANK_PARAMETERS_1; \
-       uint32_t VBLANK_PARAMETERS_3; \
-       uint32_t NOM_PARAMETERS_0; \
-       uint32_t NOM_PARAMETERS_1; \
-       uint32_t NOM_PARAMETERS_4; \
-       uint32_t NOM_PARAMETERS_5; \
-       uint32_t PER_LINE_DELIVERY_PRE; \
-       uint32_t PER_LINE_DELIVERY; \
-       uint32_t PREFETCH_SETTINS_C; \
-       uint32_t PREFETCH_SETTINGS_C; \
-       uint32_t VBLANK_PARAMETERS_2; \
-       uint32_t VBLANK_PARAMETERS_4; \
-       uint32_t NOM_PARAMETERS_2; \
-       uint32_t NOM_PARAMETERS_3; \
-       uint32_t NOM_PARAMETERS_6; \
-       uint32_t NOM_PARAMETERS_7; \
-       uint32_t DCN_TTU_QOS_WM; \
-       uint32_t DCN_GLOBAL_TTU_CNTL; \
-       uint32_t DCN_SURF0_TTU_CNTL0; \
-       uint32_t DCN_SURF0_TTU_CNTL1; \
-       uint32_t DCN_SURF1_TTU_CNTL0; \
-       uint32_t DCN_SURF1_TTU_CNTL1; \
-       uint32_t DCN_CUR0_TTU_CNTL0; \
-       uint32_t DCN_CUR0_TTU_CNTL1; \
-       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB; \
-       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB; \
-       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB; \
-       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB; \
-       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB; \
-       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB; \
-       uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB; \
-       uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB; \
-       uint32_t DCN_VM_MX_L1_TLB_CNTL; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR; \
-       uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR; \
-       uint32_t CURSOR_SETTINS; \
-       uint32_t CURSOR_SETTINGS; \
-       uint32_t CURSOR_SURFACE_ADDRESS_HIGH; \
-       uint32_t CURSOR_SURFACE_ADDRESS; \
-       uint32_t CURSOR_SIZE; \
-       uint32_t CURSOR_CONTROL; \
-       uint32_t CURSOR_POSITION; \
-       uint32_t CURSOR_HOT_SPOT; \
-       uint32_t CURSOR_DST_OFFSET; \
-       uint32_t HUBP_CLK_CNTL
-
-#define HUBP_SF(reg_name, field_name, post_fix)\
-       .field_name = reg_name ## __ ## field_name ## post_fix
-
-/* Mask/shift struct generation macro for all ASICs (including those with reduced functionality) */
-/*1.x, 2.x, and 3.x*/
-#define HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh)\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_IN_BLANK, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_BANKS, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_SE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_RB_PER_SE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_WIDTH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_X_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_Y_START_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, SECONDARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_C, SECONDARY_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, SECONDARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, SECONDARY_META_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_READ_LINE_STATUS, PIPE_READ_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
-       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh)
-/*2.x and 1.x only*/
-#define HUBP_MASK_SH_LIST_DCN_COMMON(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MPTE_GROUP_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MPTE_GROUP_SIZE_C, mask_sh)
-
-/*2.x and 1.x only*/
-#define HUBP_MASK_SH_LIST_DCN(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN_COMMON(mask_sh)
-
-/* Mask/shift struct generation macro for ASICs with VM */
-#define HUBP_MASK_SH_LIST_DCN_VM(mask_sh)\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_0, DST_Y_PER_PTE_ROW_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_1, REFCYC_PER_PTE_GROUP_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_2, DST_Y_PER_PTE_ROW_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_3, REFCYC_PER_PTE_GROUP_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh)
-
-#define HUBP_MASK_SH_LIST_DCN10(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN(mask_sh),\
-       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, DST_Y_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, VRATIO_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINS_C, VRATIO_PREFETCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_DST_Y_OFFSET, mask_sh), \
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
-       HUBP_SF(CURSOR0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh)
-
-#define DCN_HUBP_REG_FIELD_BASE_LIST(type) \
-       type HUBP_BLANK_EN;\
-       type HUBP_DISABLE;\
-       type HUBP_TTU_DISABLE;\
-       type HUBP_NO_OUTSTANDING_REQ;\
-       type HUBP_VTG_SEL;\
-       type HUBP_UNDERFLOW_STATUS;\
-       type HUBP_UNDERFLOW_CLEAR;\
-       type HUBP_IN_BLANK;\
-       type NUM_PIPES;\
-       type NUM_BANKS;\
-       type PIPE_INTERLEAVE;\
-       type NUM_SE;\
-       type NUM_RB_PER_SE;\
-       type MAX_COMPRESSED_FRAGS;\
-       type SW_MODE;\
-       type META_LINEAR;\
-       type RB_ALIGNED;\
-       type PIPE_ALIGNED;\
-       type PITCH;\
-       type META_PITCH;\
-       type PITCH_C;\
-       type META_PITCH_C;\
-       type ROTATION_ANGLE;\
-       type H_MIRROR_EN;\
-       type SURFACE_PIXEL_FORMAT;\
-       type SURFACE_FLIP_TYPE;\
-       type SURFACE_FLIP_MODE_FOR_STEREOSYNC;\
-       type SURFACE_FLIP_IN_STEREOSYNC;\
-       type SURFACE_UPDATE_LOCK;\
-       type SURFACE_FLIP_PENDING;\
-       type PRI_VIEWPORT_WIDTH; \
-       type PRI_VIEWPORT_HEIGHT; \
-       type PRI_VIEWPORT_X_START; \
-       type PRI_VIEWPORT_Y_START; \
-       type SEC_VIEWPORT_WIDTH; \
-       type SEC_VIEWPORT_HEIGHT; \
-       type SEC_VIEWPORT_X_START; \
-       type SEC_VIEWPORT_Y_START; \
-       type PRI_VIEWPORT_WIDTH_C; \
-       type PRI_VIEWPORT_HEIGHT_C; \
-       type PRI_VIEWPORT_X_START_C; \
-       type PRI_VIEWPORT_Y_START_C; \
-       type SEC_VIEWPORT_WIDTH_C; \
-       type SEC_VIEWPORT_HEIGHT_C; \
-       type SEC_VIEWPORT_X_START_C; \
-       type SEC_VIEWPORT_Y_START_C; \
-       type PRIMARY_SURFACE_ADDRESS_HIGH;\
-       type PRIMARY_SURFACE_ADDRESS;\
-       type SECONDARY_SURFACE_ADDRESS_HIGH;\
-       type SECONDARY_SURFACE_ADDRESS;\
-       type PRIMARY_META_SURFACE_ADDRESS_HIGH;\
-       type PRIMARY_META_SURFACE_ADDRESS;\
-       type SECONDARY_META_SURFACE_ADDRESS_HIGH;\
-       type SECONDARY_META_SURFACE_ADDRESS;\
-       type PRIMARY_SURFACE_ADDRESS_HIGH_C;\
-       type PRIMARY_SURFACE_ADDRESS_C;\
-       type SECONDARY_SURFACE_ADDRESS_HIGH_C;\
-       type SECONDARY_SURFACE_ADDRESS_C;\
-       type PRIMARY_META_SURFACE_ADDRESS_HIGH_C;\
-       type PRIMARY_META_SURFACE_ADDRESS_C;\
-       type SECONDARY_META_SURFACE_ADDRESS_HIGH_C;\
-       type SECONDARY_META_SURFACE_ADDRESS_C;\
-       type SURFACE_INUSE_ADDRESS;\
-       type SURFACE_INUSE_ADDRESS_HIGH;\
-       type SURFACE_INUSE_ADDRESS_C;\
-       type SURFACE_INUSE_ADDRESS_HIGH_C;\
-       type SURFACE_EARLIEST_INUSE_ADDRESS;\
-       type SURFACE_EARLIEST_INUSE_ADDRESS_HIGH;\
-       type SURFACE_EARLIEST_INUSE_ADDRESS_C;\
-       type SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C;\
-       type PRIMARY_SURFACE_TMZ;\
-       type PRIMARY_SURFACE_TMZ_C;\
-       type SECONDARY_SURFACE_TMZ;\
-       type SECONDARY_SURFACE_TMZ_C;\
-       type PRIMARY_META_SURFACE_TMZ;\
-       type PRIMARY_META_SURFACE_TMZ_C;\
-       type SECONDARY_META_SURFACE_TMZ;\
-       type SECONDARY_META_SURFACE_TMZ_C;\
-       type PRIMARY_SURFACE_DCC_EN;\
-       type PRIMARY_SURFACE_DCC_IND_64B_BLK;\
-       type SECONDARY_SURFACE_DCC_EN;\
-       type SECONDARY_SURFACE_DCC_IND_64B_BLK;\
-       type SURFACE_FLIP_INT_MASK;\
-       type DET_BUF_PLANE1_BASE_ADDRESS;\
-       type CROSSBAR_SRC_CB_B;\
-       type CROSSBAR_SRC_CR_R;\
-       type PIPE_READ_VBLANK;\
-       type DRQ_EXPANSION_MODE;\
-       type PRQ_EXPANSION_MODE;\
-       type MRQ_EXPANSION_MODE;\
-       type CRQ_EXPANSION_MODE;\
-       type CHUNK_SIZE;\
-       type MIN_CHUNK_SIZE;\
-       type META_CHUNK_SIZE;\
-       type MIN_META_CHUNK_SIZE;\
-       type DPTE_GROUP_SIZE;\
-       type MPTE_GROUP_SIZE;\
-       type SWATH_HEIGHT;\
-       type PTE_ROW_HEIGHT_LINEAR;\
-       type CHUNK_SIZE_C;\
-       type MIN_CHUNK_SIZE_C;\
-       type META_CHUNK_SIZE_C;\
-       type MIN_META_CHUNK_SIZE_C;\
-       type DPTE_GROUP_SIZE_C;\
-       type MPTE_GROUP_SIZE_C;\
-       type SWATH_HEIGHT_C;\
-       type PTE_ROW_HEIGHT_LINEAR_C;\
-       type REFCYC_H_BLANK_END;\
-       type DLG_V_BLANK_END;\
-       type MIN_DST_Y_NEXT_START;\
-       type REFCYC_PER_HTOTAL;\
-       type REFCYC_X_AFTER_SCALER;\
-       type DST_Y_AFTER_SCALER;\
-       type DST_Y_PREFETCH;\
-       type VRATIO_PREFETCH;\
-       type DST_Y_PER_VM_VBLANK;\
-       type DST_Y_PER_ROW_VBLANK;\
-       type REF_FREQ_TO_PIX_FREQ;\
-       type REFCYC_PER_PTE_GROUP_VBLANK_L;\
-       type REFCYC_PER_META_CHUNK_VBLANK_L;\
-       type DST_Y_PER_PTE_ROW_NOM_L;\
-       type REFCYC_PER_PTE_GROUP_NOM_L;\
-       type DST_Y_PER_META_ROW_NOM_L;\
-       type REFCYC_PER_META_CHUNK_NOM_L;\
-       type REFCYC_PER_LINE_DELIVERY_PRE_L;\
-       type REFCYC_PER_LINE_DELIVERY_PRE_C;\
-       type REFCYC_PER_LINE_DELIVERY_L;\
-       type REFCYC_PER_LINE_DELIVERY_C;\
-       type VRATIO_PREFETCH_C;\
-       type REFCYC_PER_PTE_GROUP_VBLANK_C;\
-       type REFCYC_PER_META_CHUNK_VBLANK_C;\
-       type DST_Y_PER_PTE_ROW_NOM_C;\
-       type REFCYC_PER_PTE_GROUP_NOM_C;\
-       type DST_Y_PER_META_ROW_NOM_C;\
-       type REFCYC_PER_META_CHUNK_NOM_C;\
-       type QoS_LEVEL_LOW_WM;\
-       type QoS_LEVEL_HIGH_WM;\
-       type MIN_TTU_VBLANK;\
-       type QoS_LEVEL_FLIP;\
-       type REFCYC_PER_REQ_DELIVERY;\
-       type QoS_LEVEL_FIXED;\
-       type QoS_RAMP_DISABLE;\
-       type REFCYC_PER_REQ_DELIVERY_PRE;\
-       type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB;\
-       type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB;\
-       type VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB;\
-       type VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB;\
-       type VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB;\
-       type VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB;\
-       type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB;\
-       type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM;\
-       type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB;\
-       type ENABLE_L1_TLB;\
-       type SYSTEM_ACCESS_MODE;\
-       type HUBP_CLOCK_ENABLE;\
-       type MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\
-       type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\
-       type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\
-       type MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB;\
-       type MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB;\
-       type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB;\
-       type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;\
-       type MC_VM_SYSTEM_APERTURE_LOW_ADDR;\
-       type MC_VM_SYSTEM_APERTURE_HIGH_ADDR;\
-       type DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\
-       type DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\
-       type DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\
-       /* todo:  get these from GVM instead of reading registers ourselves */\
-       type PAGE_DIRECTORY_ENTRY_HI32;\
-       type PAGE_DIRECTORY_ENTRY_LO32;\
-       type LOGICAL_PAGE_NUMBER_HI4;\
-       type LOGICAL_PAGE_NUMBER_LO32;\
-       type PHYSICAL_PAGE_ADDR_HI4;\
-       type PHYSICAL_PAGE_ADDR_LO32;\
-       type PHYSICAL_PAGE_NUMBER_MSB;\
-       type PHYSICAL_PAGE_NUMBER_LSB;\
-       type LOGICAL_ADDR;\
-       type CURSOR0_DST_Y_OFFSET; \
-       type CURSOR0_CHUNK_HDL_ADJUST; \
-       type CURSOR_SURFACE_ADDRESS_HIGH; \
-       type CURSOR_SURFACE_ADDRESS; \
-       type CURSOR_WIDTH; \
-       type CURSOR_HEIGHT; \
-       type CURSOR_MODE; \
-       type CURSOR_2X_MAGNIFY; \
-       type CURSOR_PITCH; \
-       type CURSOR_LINES_PER_CHUNK; \
-       type CURSOR_ENABLE; \
-       type CURSOR_X_POSITION; \
-       type CURSOR_Y_POSITION; \
-       type CURSOR_HOT_SPOT_X; \
-       type CURSOR_HOT_SPOT_Y; \
-       type CURSOR_DST_X_OFFSET; \
-       type OUTPUT_FP
-
-#define DCN_HUBP_REG_FIELD_LIST(type) \
-       DCN_HUBP_REG_FIELD_BASE_LIST(type);\
-       type ALPHA_PLANE_EN
-
-struct dcn_mi_registers {
-       HUBP_COMMON_REG_VARIABLE_LIST;
-};
-
-struct dcn_mi_shift {
-       DCN_HUBP_REG_FIELD_LIST(uint8_t);
-};
-
-struct dcn_mi_mask {
-       DCN_HUBP_REG_FIELD_LIST(uint32_t);
-};
-
-struct dcn_hubp_state {
-       struct _vcs_dpi_display_dlg_regs_st dlg_attr;
-       struct _vcs_dpi_display_ttu_regs_st ttu_attr;
-       struct _vcs_dpi_display_rq_regs_st rq_regs;
-       uint32_t pixel_format;
-       uint32_t inuse_addr_hi;
-       uint32_t inuse_addr_lo;
-       uint32_t viewport_width;
-       uint32_t viewport_height;
-       uint32_t rotation_angle;
-       uint32_t h_mirror_en;
-       uint32_t sw_mode;
-       uint32_t dcc_en;
-       uint32_t blank_en;
-       uint32_t clock_en;
-       uint32_t underflow_status;
-       uint32_t ttu_disable;
-       uint32_t min_ttu_vblank;
-       uint32_t qos_level_low_wm;
-       uint32_t qos_level_high_wm;
-       uint32_t primary_surface_addr_lo;
-       uint32_t primary_surface_addr_hi;
-       uint32_t primary_meta_addr_lo;
-       uint32_t primary_meta_addr_hi;
-       uint32_t uclk_pstate_force;
-       uint32_t hubp_cntl;
-       uint32_t flip_control;
-};
-
-struct dcn10_hubp {
-       struct hubp base;
-       struct dcn_hubp_state state;
-       const struct dcn_mi_registers *hubp_regs;
-       const struct dcn_mi_shift *hubp_shift;
-       const struct dcn_mi_mask *hubp_mask;
-};
-
-void hubp1_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level);
-
-void hubp1_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
-
-void hubp1_program_requestor(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs);
-
-void hubp1_program_pixel_format(
-       struct hubp *hubp,
-       enum surface_pixel_format format);
-
-void hubp1_program_size(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       const struct plane_size *plane_size,
-       struct dc_plane_dcc_param *dcc);
-
-void hubp1_program_rotation(
-       struct hubp *hubp,
-       enum dc_rotation_angle rotation,
-       bool horizontal_mirror);
-
-void hubp1_program_tiling(
-       struct hubp *hubp,
-       const union dc_tiling_info *info,
-       const enum surface_pixel_format pixel_format);
-
-void hubp1_dcc_control(struct hubp *hubp,
-               bool enable,
-               enum hubp_ind_block_size independent_64b_blks);
-
-bool hubp1_program_surface_flip_and_addr(
-       struct hubp *hubp,
-       const struct dc_plane_address *address,
-       bool flip_immediate);
-
-bool hubp1_is_flip_pending(struct hubp *hubp);
-
-void hubp1_cursor_set_attributes(
-               struct hubp *hubp,
-               const struct dc_cursor_attributes *attr);
-
-void hubp1_cursor_set_position(
-               struct hubp *hubp,
-               const struct dc_cursor_position *pos,
-               const struct dc_cursor_mi_param *param);
-
-void hubp1_set_blank(struct hubp *hubp, bool blank);
-
-void min_set_viewport(struct hubp *hubp,
-               const struct rect *viewport,
-               const struct rect *viewport_c);
-
-void hubp1_clk_cntl(struct hubp *hubp, bool enable);
-void hubp1_vtg_sel(struct hubp *hubp, uint32_t otg_inst);
-
-void dcn10_hubp_construct(
-       struct dcn10_hubp *hubp1,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_mi_registers *hubp_regs,
-       const struct dcn_mi_shift *hubp_shift,
-       const struct dcn_mi_mask *hubp_mask);
-
-void hubp1_read_state(struct hubp *hubp);
-void hubp1_clear_underflow(struct hubp *hubp);
-
-enum cursor_pitch hubp1_get_cursor_pitch(unsigned int pitch);
-
-void hubp1_vready_workaround(struct hubp *hubp,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
-
-void hubp1_init(struct hubp *hubp);
-void hubp1_read_state_common(struct hubp *hubp);
-bool hubp1_in_blank(struct hubp *hubp);
-void hubp1_soft_reset(struct hubp *hubp, bool reset);
-
-void hubp1_set_flip_int(struct hubp *hubp);
-
-#endif
index 3adef47..05df502 100644 (file)
@@ -40,7 +40,7 @@
 #include "ipp.h"
 #include "mpc.h"
 #include "reg_helper.h"
-#include "dcn10_hubp.h"
+#include "dcn10/dcn10_hubp.h"
 #include "dcn10/dcn10_hubbub.h"
 #include "dcn10_cm_common.h"
 #include "clk_mgr.h"
index 33cbd87..1ca1cbe 100644 (file)
@@ -1,8 +1,7 @@
 # SPDX-License-Identifier: MIT
 # Copyright Â© 2019-2024 Advanced Micro Devices, Inc. All rights reserved.
 
-DCN20 = dcn20_hubp.o \
-               dcn20_mpc.o dcn20_opp.o dcn20_mmhubbub.o \
+DCN20 = dcn20_mpc.o dcn20_opp.o dcn20_mmhubbub.o \
                dcn20_stream_encoder.o dcn20_link_encoder.o \
                dcn20_vmid.o dcn20_dwb.o dcn20_dwb_scl.o
 
diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c
deleted file mode 100644 (file)
index 6bba020..0000000
+++ /dev/null
@@ -1,1699 +0,0 @@
-/*
- * Copyright 2012-2021 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#include "dcn20_hubp.h"
-
-#include "dm_services.h"
-#include "dce_calcs.h"
-#include "reg_helper.h"
-#include "basics/conversion.h"
-
-#define DC_LOGGER \
-       ctx->logger
-#define DC_LOGGER_INIT(logger)
-
-#define REG(reg)\
-       hubp2->hubp_regs->reg
-
-#define CTX \
-       hubp2->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
-
-void hubp2_set_vm_system_aperture_settings(struct hubp *hubp,
-               struct vm_system_aperture_param *apt)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_default;
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
-
-       // The format of default addr is 48:12 of the 48 bit addr
-       mc_vm_apt_default.quad_part = apt->sys_default.quad_part >> 12;
-
-       // The format of high/low are 48:18 of the 48 bit addr
-       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 18;
-       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 18;
-
-       REG_UPDATE_2(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB,
-               DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, 1, /* 1 = system physical memory */
-               DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mc_vm_apt_default.high_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, 0,
-                       DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mc_vm_apt_default.low_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, 0,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, mc_vm_apt_low.quad_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, 0,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mc_vm_apt_high.quad_part);
-
-       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
-                       ENABLE_L1_TLB, 1,
-                       SYSTEM_ACCESS_MODE, 0x3);
-}
-
-void hubp2_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       /* DLG - Per hubp */
-       REG_SET_2(BLANK_OFFSET_0, 0,
-               REFCYC_H_BLANK_END, dlg_attr->refcyc_h_blank_end,
-               DLG_V_BLANK_END, dlg_attr->dlg_vblank_end);
-
-       REG_SET(BLANK_OFFSET_1, 0,
-               MIN_DST_Y_NEXT_START, dlg_attr->min_dst_y_next_start);
-
-       REG_SET(DST_DIMENSIONS, 0,
-               REFCYC_PER_HTOTAL, dlg_attr->refcyc_per_htotal);
-
-       REG_SET_2(DST_AFTER_SCALER, 0,
-               REFCYC_X_AFTER_SCALER, dlg_attr->refcyc_x_after_scaler,
-               DST_Y_AFTER_SCALER, dlg_attr->dst_y_after_scaler);
-
-       REG_SET(REF_FREQ_TO_PIX_FREQ, 0,
-               REF_FREQ_TO_PIX_FREQ, dlg_attr->ref_freq_to_pix_freq);
-
-       /* DLG - Per luma/chroma */
-       REG_SET(VBLANK_PARAMETERS_1, 0,
-               REFCYC_PER_PTE_GROUP_VBLANK_L, dlg_attr->refcyc_per_pte_group_vblank_l);
-
-       if (REG(NOM_PARAMETERS_0))
-               REG_SET(NOM_PARAMETERS_0, 0,
-                       DST_Y_PER_PTE_ROW_NOM_L, dlg_attr->dst_y_per_pte_row_nom_l);
-
-       if (REG(NOM_PARAMETERS_1))
-               REG_SET(NOM_PARAMETERS_1, 0,
-                       REFCYC_PER_PTE_GROUP_NOM_L, dlg_attr->refcyc_per_pte_group_nom_l);
-
-       REG_SET(NOM_PARAMETERS_4, 0,
-               DST_Y_PER_META_ROW_NOM_L, dlg_attr->dst_y_per_meta_row_nom_l);
-
-       REG_SET(NOM_PARAMETERS_5, 0,
-               REFCYC_PER_META_CHUNK_NOM_L, dlg_attr->refcyc_per_meta_chunk_nom_l);
-
-       REG_SET_2(PER_LINE_DELIVERY, 0,
-               REFCYC_PER_LINE_DELIVERY_L, dlg_attr->refcyc_per_line_delivery_l,
-               REFCYC_PER_LINE_DELIVERY_C, dlg_attr->refcyc_per_line_delivery_c);
-
-       REG_SET(VBLANK_PARAMETERS_2, 0,
-               REFCYC_PER_PTE_GROUP_VBLANK_C, dlg_attr->refcyc_per_pte_group_vblank_c);
-
-       if (REG(NOM_PARAMETERS_2))
-               REG_SET(NOM_PARAMETERS_2, 0,
-                       DST_Y_PER_PTE_ROW_NOM_C, dlg_attr->dst_y_per_pte_row_nom_c);
-
-       if (REG(NOM_PARAMETERS_3))
-               REG_SET(NOM_PARAMETERS_3, 0,
-                       REFCYC_PER_PTE_GROUP_NOM_C, dlg_attr->refcyc_per_pte_group_nom_c);
-
-       REG_SET(NOM_PARAMETERS_6, 0,
-               DST_Y_PER_META_ROW_NOM_C, dlg_attr->dst_y_per_meta_row_nom_c);
-
-       REG_SET(NOM_PARAMETERS_7, 0,
-               REFCYC_PER_META_CHUNK_NOM_C, dlg_attr->refcyc_per_meta_chunk_nom_c);
-
-       /* TTU - per hubp */
-       REG_SET_2(DCN_TTU_QOS_WM, 0,
-               QoS_LEVEL_LOW_WM, ttu_attr->qos_level_low_wm,
-               QoS_LEVEL_HIGH_WM, ttu_attr->qos_level_high_wm);
-
-       /* TTU - per luma/chroma */
-       /* Assumed surf0 is luma and 1 is chroma */
-
-       REG_SET_3(DCN_SURF0_TTU_CNTL0, 0,
-               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_l,
-               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_l,
-               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_l);
-
-       REG_SET_3(DCN_SURF1_TTU_CNTL0, 0,
-               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_c,
-               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_c,
-               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_c);
-
-       REG_SET_3(DCN_CUR0_TTU_CNTL0, 0,
-               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_cur0,
-               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_cur0,
-               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_cur0);
-
-       REG_SET(FLIP_PARAMETERS_1, 0,
-               REFCYC_PER_PTE_GROUP_FLIP_L, dlg_attr->refcyc_per_pte_group_flip_l);
-}
-
-void hubp2_vready_at_or_After_vsync(struct hubp *hubp,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       uint32_t value = 0;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       /* disable_dlg_test_mode Set 9th bit to 1 to disable "dv" mode */
-       REG_WRITE(HUBPREQ_DEBUG_DB, 1 << 8);
-       /*
-       if (VSTARTUP_START - (VREADY_OFFSET+VUPDATE_WIDTH+VUPDATE_OFFSET)/htotal)
-       <= OTG_V_BLANK_END
-               Set HUBP_VREADY_AT_OR_AFTER_VSYNC = 1
-       else
-               Set HUBP_VREADY_AT_OR_AFTER_VSYNC = 0
-       */
-       if (pipe_dest->htotal != 0) {
-               if ((pipe_dest->vstartup_start - (pipe_dest->vready_offset+pipe_dest->vupdate_width
-                       + pipe_dest->vupdate_offset) / pipe_dest->htotal) <= pipe_dest->vblank_end) {
-                       value = 1;
-               } else
-                       value = 0;
-       }
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, value);
-}
-
-static void hubp2_program_requestor(struct hubp *hubp,
-                                   struct _vcs_dpi_display_rq_regs_st *rq_regs)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(HUBPRET_CONTROL,
-                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
-       REG_SET_4(DCN_EXPANSION_MODE, 0,
-                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
-                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
-                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
-                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
-       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG, 0,
-               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, rq_regs->rq_regs_l.dpte_group_size,
-               MPTE_GROUP_SIZE, rq_regs->rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, rq_regs->rq_regs_l.pte_row_height_linear);
-       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG_C, 0,
-               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.dpte_group_size,
-               MPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.mpte_group_size,
-               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, rq_regs->rq_regs_c.pte_row_height_linear);
-}
-
-static void hubp2_setup(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       /* otg is locked when this func is called. Register are double buffered.
-        * disable the requestors is not needed
-        */
-
-       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
-       hubp2_program_requestor(hubp, rq_regs);
-       hubp2_program_deadline(hubp, dlg_attr, ttu_attr);
-
-}
-
-void hubp2_setup_interdependent(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_SET_2(PREFETCH_SETTINGS, 0,
-                       DST_Y_PREFETCH, dlg_attr->dst_y_prefetch,
-                       VRATIO_PREFETCH, dlg_attr->vratio_prefetch);
-
-       REG_SET(PREFETCH_SETTINGS_C, 0,
-                       VRATIO_PREFETCH_C, dlg_attr->vratio_prefetch_c);
-
-       REG_SET_2(VBLANK_PARAMETERS_0, 0,
-               DST_Y_PER_VM_VBLANK, dlg_attr->dst_y_per_vm_vblank,
-               DST_Y_PER_ROW_VBLANK, dlg_attr->dst_y_per_row_vblank);
-
-       REG_SET_2(FLIP_PARAMETERS_0, 0,
-               DST_Y_PER_VM_FLIP, dlg_attr->dst_y_per_vm_flip,
-               DST_Y_PER_ROW_FLIP, dlg_attr->dst_y_per_row_flip);
-
-       REG_SET(VBLANK_PARAMETERS_3, 0,
-               REFCYC_PER_META_CHUNK_VBLANK_L, dlg_attr->refcyc_per_meta_chunk_vblank_l);
-
-       REG_SET(VBLANK_PARAMETERS_4, 0,
-               REFCYC_PER_META_CHUNK_VBLANK_C, dlg_attr->refcyc_per_meta_chunk_vblank_c);
-
-       REG_SET(FLIP_PARAMETERS_2, 0,
-               REFCYC_PER_META_CHUNK_FLIP_L, dlg_attr->refcyc_per_meta_chunk_flip_l);
-
-       REG_SET_2(PER_LINE_DELIVERY_PRE, 0,
-               REFCYC_PER_LINE_DELIVERY_PRE_L, dlg_attr->refcyc_per_line_delivery_pre_l,
-               REFCYC_PER_LINE_DELIVERY_PRE_C, dlg_attr->refcyc_per_line_delivery_pre_c);
-
-       REG_SET(DCN_SURF0_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               ttu_attr->refcyc_per_req_delivery_pre_l);
-       REG_SET(DCN_SURF1_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               ttu_attr->refcyc_per_req_delivery_pre_c);
-       REG_SET(DCN_CUR0_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE, ttu_attr->refcyc_per_req_delivery_pre_cur0);
-       REG_SET(DCN_CUR1_TTU_CNTL1, 0,
-               REFCYC_PER_REQ_DELIVERY_PRE, ttu_attr->refcyc_per_req_delivery_pre_cur1);
-
-       REG_SET_2(DCN_GLOBAL_TTU_CNTL, 0,
-               MIN_TTU_VBLANK, ttu_attr->min_ttu_vblank,
-               QoS_LEVEL_FLIP, ttu_attr->qos_level_flip);
-}
-
-/* DCN2 (GFX10), the following GFX fields are deprecated. They can be set but they will not be used:
- *     NUM_BANKS
- *     NUM_SE
- *     NUM_RB_PER_SE
- *     RB_ALIGNED
- * Other things can be defaulted, since they never change:
- *     PIPE_ALIGNED = 0
- *     META_LINEAR = 0
- * In GFX10, only these apply:
- *     PIPE_INTERLEAVE
- *     NUM_PIPES
- *     MAX_COMPRESSED_FRAGS
- *     SW_MODE
- */
-static void hubp2_program_tiling(
-       struct dcn20_hubp *hubp2,
-       const union dc_tiling_info *info,
-       const enum surface_pixel_format pixel_format)
-{
-       REG_UPDATE_3(DCSURF_ADDR_CONFIG,
-                       NUM_PIPES, log_2(info->gfx9.num_pipes),
-                       PIPE_INTERLEAVE, info->gfx9.pipe_interleave,
-                       MAX_COMPRESSED_FRAGS, log_2(info->gfx9.max_compressed_frags));
-
-       REG_UPDATE_4(DCSURF_TILING_CONFIG,
-                       SW_MODE, info->gfx9.swizzle,
-                       META_LINEAR, 0,
-                       RB_ALIGNED, 0,
-                       PIPE_ALIGNED, 0);
-}
-
-void hubp2_program_size(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       const struct plane_size *plane_size,
-       struct dc_plane_dcc_param *dcc)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t pitch, meta_pitch, pitch_c, meta_pitch_c;
-       bool use_pitch_c = false;
-
-       /* Program data and meta surface pitch (calculation from addrlib)
-        * 444 or 420 luma
-        */
-       use_pitch_c = format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN
-               && format < SURFACE_PIXEL_FORMAT_SUBSAMPLE_END;
-       use_pitch_c = use_pitch_c
-               || (format == SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA);
-       if (use_pitch_c) {
-               ASSERT(plane_size->chroma_pitch != 0);
-               /* Chroma pitch zero can cause system hang! */
-
-               pitch = plane_size->surface_pitch - 1;
-               meta_pitch = dcc->meta_pitch - 1;
-               pitch_c = plane_size->chroma_pitch - 1;
-               meta_pitch_c = dcc->meta_pitch_c - 1;
-       } else {
-               pitch = plane_size->surface_pitch - 1;
-               meta_pitch = dcc->meta_pitch - 1;
-               pitch_c = 0;
-               meta_pitch_c = 0;
-       }
-
-       if (!dcc->enable) {
-               meta_pitch = 0;
-               meta_pitch_c = 0;
-       }
-
-       REG_UPDATE_2(DCSURF_SURFACE_PITCH,
-                       PITCH, pitch, META_PITCH, meta_pitch);
-
-       use_pitch_c = format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN;
-       use_pitch_c = use_pitch_c
-               || (format == SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA);
-       if (use_pitch_c)
-               REG_UPDATE_2(DCSURF_SURFACE_PITCH_C,
-                       PITCH_C, pitch_c, META_PITCH_C, meta_pitch_c);
-}
-
-void hubp2_program_rotation(
-       struct hubp *hubp,
-       enum dc_rotation_angle rotation,
-       bool horizontal_mirror)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t mirror;
-
-
-       if (horizontal_mirror)
-               mirror = 1;
-       else
-               mirror = 0;
-
-       /* Program rotation angle and horz mirror - no mirror */
-       if (rotation == ROTATION_ANGLE_0)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 0,
-                               H_MIRROR_EN, mirror);
-       else if (rotation == ROTATION_ANGLE_90)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 1,
-                               H_MIRROR_EN, mirror);
-       else if (rotation == ROTATION_ANGLE_180)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 2,
-                               H_MIRROR_EN, mirror);
-       else if (rotation == ROTATION_ANGLE_270)
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               ROTATION_ANGLE, 3,
-                               H_MIRROR_EN, mirror);
-}
-
-void hubp2_dcc_control(struct hubp *hubp, bool enable,
-               enum hubp_ind_block_size independent_64b_blks)
-{
-       uint32_t dcc_en = enable ? 1 : 0;
-       uint32_t dcc_ind_64b_blk = independent_64b_blks ? 1 : 0;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                       PRIMARY_SURFACE_DCC_EN, dcc_en,
-                       PRIMARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk,
-                       SECONDARY_SURFACE_DCC_EN, dcc_en,
-                       SECONDARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk);
-}
-
-void hubp2_program_pixel_format(
-       struct hubp *hubp,
-       enum surface_pixel_format format)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t red_bar = 3;
-       uint32_t blue_bar = 2;
-
-       /* swap for ABGR format */
-       if (format == SURFACE_PIXEL_FORMAT_GRPH_ABGR8888
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F) {
-               red_bar = 2;
-               blue_bar = 3;
-       }
-
-       REG_UPDATE_2(HUBPRET_CONTROL,
-                       CROSSBAR_SRC_CB_B, blue_bar,
-                       CROSSBAR_SRC_CR_R, red_bar);
-
-       /* Mapping is same as ipp programming (cnvc) */
-
-       switch (format) {
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 1);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 3);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 8);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB2101010:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 10);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616: /*we use crossbar already*/
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 26); /* ARGB16161616_UNORM */
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F:/*we use crossbar already*/
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 24);
-               break;
-
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 65);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 64);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCbCr:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 67);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCrCb:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 66);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_AYCrCb8888:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 12);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FIX:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 112);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FIX:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 113);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_ACrYCb2101010:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 114);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FLOAT:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 118);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FLOAT:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 119);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGBE:
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 116,
-                               ALPHA_PLANE_EN, 0);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA:
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 116,
-                               ALPHA_PLANE_EN, 1);
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       /* don't see the need of program the xbar in DCN 1.0 */
-}
-
-void hubp2_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       hubp2_dcc_control(hubp, dcc->enable, dcc->independent_64b_blks);
-       hubp2_program_tiling(hubp2, tiling_info, format);
-       hubp2_program_size(hubp, format, plane_size, dcc);
-       hubp2_program_rotation(hubp, rotation, horizontal_mirror);
-       hubp2_program_pixel_format(hubp, format);
-}
-
-enum cursor_lines_per_chunk hubp2_get_lines_per_chunk(
-       unsigned int cursor_width,
-       enum dc_cursor_color_format cursor_mode)
-{
-       enum cursor_lines_per_chunk line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
-
-       if (cursor_mode == CURSOR_MODE_MONO)
-               line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
-       else if (cursor_mode == CURSOR_MODE_COLOR_1BIT_AND ||
-                cursor_mode == CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA ||
-                cursor_mode == CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA) {
-               if (cursor_width >= 1   && cursor_width <= 32)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
-               else if (cursor_width >= 33  && cursor_width <= 64)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
-               else if (cursor_width >= 65  && cursor_width <= 128)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
-               else if (cursor_width >= 129 && cursor_width <= 256)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
-       } else if (cursor_mode == CURSOR_MODE_COLOR_64BIT_FP_PRE_MULTIPLIED ||
-                  cursor_mode == CURSOR_MODE_COLOR_64BIT_FP_UN_PRE_MULTIPLIED) {
-               if (cursor_width >= 1   && cursor_width <= 16)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
-               else if (cursor_width >= 17  && cursor_width <= 32)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
-               else if (cursor_width >= 33  && cursor_width <= 64)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
-               else if (cursor_width >= 65 && cursor_width <= 128)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
-               else if (cursor_width >= 129 && cursor_width <= 256)
-                       line_per_chunk = CURSOR_LINE_PER_CHUNK_1;
-       }
-
-       return line_per_chunk;
-}
-
-void hubp2_cursor_set_attributes(
-               struct hubp *hubp,
-               const struct dc_cursor_attributes *attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       enum cursor_pitch hw_pitch = hubp1_get_cursor_pitch(attr->pitch);
-       enum cursor_lines_per_chunk lpc = hubp2_get_lines_per_chunk(
-                       attr->width, attr->color_format);
-
-       hubp->curs_attr = *attr;
-
-       REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
-                       CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
-       REG_UPDATE(CURSOR_SURFACE_ADDRESS,
-                       CURSOR_SURFACE_ADDRESS, attr->address.low_part);
-
-       REG_UPDATE_2(CURSOR_SIZE,
-                       CURSOR_WIDTH, attr->width,
-                       CURSOR_HEIGHT, attr->height);
-
-       REG_UPDATE_4(CURSOR_CONTROL,
-                       CURSOR_MODE, attr->color_format,
-                       CURSOR_2X_MAGNIFY, attr->attribute_flags.bits.ENABLE_MAGNIFICATION,
-                       CURSOR_PITCH, hw_pitch,
-                       CURSOR_LINES_PER_CHUNK, lpc);
-
-       REG_SET_2(CURSOR_SETTINGS, 0,
-                       /* no shift of the cursor HDL schedule */
-                       CURSOR0_DST_Y_OFFSET, 0,
-                        /* used to shift the cursor chunk request deadline */
-                       CURSOR0_CHUNK_HDL_ADJUST, 3);
-
-       hubp->att.SURFACE_ADDR_HIGH  = attr->address.high_part;
-       hubp->att.SURFACE_ADDR       = attr->address.low_part;
-       hubp->att.size.bits.width    = attr->width;
-       hubp->att.size.bits.height   = attr->height;
-       hubp->att.cur_ctl.bits.mode  = attr->color_format;
-
-       hubp->cur_rect.w = attr->width;
-       hubp->cur_rect.h = attr->height;
-
-       hubp->att.cur_ctl.bits.pitch = hw_pitch;
-       hubp->att.cur_ctl.bits.line_per_chunk = lpc;
-       hubp->att.cur_ctl.bits.cur_2x_magnify = attr->attribute_flags.bits.ENABLE_MAGNIFICATION;
-       hubp->att.settings.bits.dst_y_offset  = 0;
-       hubp->att.settings.bits.chunk_hdl_adjust = 3;
-}
-
-void hubp2_dmdata_set_attributes(
-               struct hubp *hubp,
-               const struct dc_dmdata_attributes *attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       if (attr->dmdata_mode == DMDATA_HW_MODE) {
-               /* set to HW mode */
-               REG_UPDATE(DMDATA_CNTL,
-                               DMDATA_MODE, 1);
-
-               /* for DMDATA flip, need to use SURFACE_UPDATE_LOCK */
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 1);
-
-               /* toggle DMDATA_UPDATED and set repeat and size */
-               REG_UPDATE(DMDATA_CNTL,
-                               DMDATA_UPDATED, 0);
-               REG_UPDATE_3(DMDATA_CNTL,
-                               DMDATA_UPDATED, 1,
-                               DMDATA_REPEAT, attr->dmdata_repeat,
-                               DMDATA_SIZE, attr->dmdata_size);
-
-               /* set DMDATA address */
-               REG_WRITE(DMDATA_ADDRESS_LOW, attr->address.low_part);
-               REG_UPDATE(DMDATA_ADDRESS_HIGH,
-                               DMDATA_ADDRESS_HIGH, attr->address.high_part);
-
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 0);
-
-       } else {
-               /* set to SW mode before loading data */
-               REG_SET(DMDATA_CNTL, 0,
-                               DMDATA_MODE, 0);
-               /* toggle DMDATA_SW_UPDATED to start loading sequence */
-               REG_UPDATE(DMDATA_SW_CNTL,
-                               DMDATA_SW_UPDATED, 0);
-               REG_UPDATE_3(DMDATA_SW_CNTL,
-                               DMDATA_SW_UPDATED, 1,
-                               DMDATA_SW_REPEAT, attr->dmdata_repeat,
-                               DMDATA_SW_SIZE, attr->dmdata_size);
-               /* load data into hubp dmdata buffer */
-               hubp2_dmdata_load(hubp, attr->dmdata_size, attr->dmdata_sw_data);
-       }
-
-       /* Note that DL_DELTA must be programmed if we want to use TTU mode */
-       REG_SET_3(DMDATA_QOS_CNTL, 0,
-                       DMDATA_QOS_MODE, attr->dmdata_qos_mode,
-                       DMDATA_QOS_LEVEL, attr->dmdata_qos_level,
-                       DMDATA_DL_DELTA, attr->dmdata_dl_delta);
-}
-
-void hubp2_dmdata_load(
-               struct hubp *hubp,
-               uint32_t dmdata_sw_size,
-               const uint32_t *dmdata_sw_data)
-{
-       int i;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       /* load dmdata into HUBP buffer in SW mode */
-       for (i = 0; i < dmdata_sw_size / 4; i++)
-               REG_WRITE(DMDATA_SW_DATA, dmdata_sw_data[i]);
-}
-
-bool hubp2_dmdata_status_done(struct hubp *hubp)
-{
-       uint32_t status;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_GET(DMDATA_STATUS, DMDATA_DONE, &status);
-       return (status == 1);
-}
-
-bool hubp2_program_surface_flip_and_addr(
-       struct hubp *hubp,
-       const struct dc_plane_address *address,
-       bool flip_immediate)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       //program flip type
-       REG_UPDATE(DCSURF_FLIP_CONTROL,
-                       SURFACE_FLIP_TYPE, flip_immediate);
-
-       // Program VMID reg
-       REG_UPDATE(VMID_SETTINGS_0,
-                       VMID, address->vmid);
-
-
-       /* HW automatically latch rest of address register on write to
-        * DCSURF_PRIMARY_SURFACE_ADDRESS if SURFACE_UPDATE_LOCK is not used
-        *
-        * program high first and then the low addr, order matters!
-        */
-       switch (address->type) {
-       case PLN_ADDR_TYPE_GRAPHICS:
-               /* DCN1.0 does not support const color
-                * TODO: program DCHUBBUB_RET_PATH_DCC_CFGx_0/1
-                * base on address->grph.dcc_const_color
-                * x = 0, 2, 4, 6 for pipe 0, 1, 2, 3 for rgb and luma
-                * x = 1, 3, 5, 7 for pipe 0, 1, 2, 3 for chroma
-                */
-
-               if (address->grph.addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_2(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface);
-
-               if (address->grph.meta_addr.quad_part != 0) {
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph.meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->grph.meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->grph.addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->grph.addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
-               if (address->video_progressive.luma_addr.quad_part == 0
-                               || address->video_progressive.chroma_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
-                                       address->video_progressive.chroma_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_C,
-                                       address->video_progressive.chroma_meta_addr.low_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->video_progressive.luma_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->video_progressive.luma_meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
-                               address->video_progressive.chroma_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_C,
-                               address->video_progressive.chroma_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->video_progressive.luma_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->video_progressive.luma_addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_GRPH_STEREO:
-               if (address->grph_stereo.left_addr.quad_part == 0)
-                       break;
-               if (address->grph_stereo.right_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface,
-                               SECONDARY_SURFACE_TMZ, address->tmz_surface,
-                               SECONDARY_SURFACE_TMZ_C, address->tmz_surface,
-                               SECONDARY_META_SURFACE_TMZ, address->tmz_surface,
-                               SECONDARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph_stereo.right_meta_addr.high_part);
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
-                                       SECONDARY_META_SURFACE_ADDRESS,
-                                       address->grph_stereo.right_meta_addr.low_part);
-               }
-               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph_stereo.left_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->grph_stereo.left_meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
-                               SECONDARY_SURFACE_ADDRESS_HIGH,
-                               address->grph_stereo.right_addr.high_part);
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
-                               SECONDARY_SURFACE_ADDRESS,
-                               address->grph_stereo.right_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->grph_stereo.left_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->grph_stereo.left_addr.low_part);
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       hubp->request_address = *address;
-
-       return true;
-}
-
-void hubp2_enable_triplebuffer(
-       struct hubp *hubp,
-       bool enable)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t triple_buffer_en = 0;
-       bool tri_buffer_en;
-
-       REG_GET(DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, &triple_buffer_en);
-       tri_buffer_en = (triple_buffer_en == 1);
-       if (tri_buffer_en != enable) {
-               REG_UPDATE(DCSURF_FLIP_CONTROL2,
-                       SURFACE_TRIPLE_BUFFER_ENABLE, enable ? DC_TRIPLEBUFFER_ENABLE : DC_TRIPLEBUFFER_DISABLE);
-       }
-}
-
-bool hubp2_is_triplebuffer_enabled(
-       struct hubp *hubp)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t triple_buffer_en = 0;
-
-       REG_GET(DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, &triple_buffer_en);
-
-       return (bool)triple_buffer_en;
-}
-
-void hubp2_set_flip_control_surface_gsl(struct hubp *hubp, bool enable)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, enable ? 1 : 0);
-}
-
-bool hubp2_is_flip_pending(struct hubp *hubp)
-{
-       uint32_t flip_pending = 0;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       struct dc_plane_address earliest_inuse_address;
-
-       if (hubp && hubp->power_gated)
-               return false;
-
-       REG_GET(DCSURF_FLIP_CONTROL,
-                       SURFACE_FLIP_PENDING, &flip_pending);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
-                       SURFACE_EARLIEST_INUSE_ADDRESS, &earliest_inuse_address.grph.addr.low_part);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
-                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &earliest_inuse_address.grph.addr.high_part);
-
-       if (flip_pending)
-               return true;
-
-       if (earliest_inuse_address.grph.addr.quad_part != hubp->request_address.grph.addr.quad_part)
-               return true;
-
-       return false;
-}
-
-void hubp2_set_blank(struct hubp *hubp, bool blank)
-{
-       hubp2_set_blank_regs(hubp, blank);
-
-       if (blank) {
-               hubp->mpcc_id = 0xf;
-               hubp->opp_id = OPP_ID_INVALID;
-       }
-}
-
-void hubp2_set_blank_regs(struct hubp *hubp, bool blank)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t blank_en = blank ? 1 : 0;
-
-       if (blank) {
-               uint32_t reg_val = REG_READ(DCHUBP_CNTL);
-
-               if (reg_val) {
-                       /* init sequence workaround: in case HUBP is
-                        * power gated, this wait would timeout.
-                        *
-                        * we just wrote reg_val to non-0, if it stay 0
-                        * it means HUBP is gated
-                        */
-                       REG_WAIT(DCHUBP_CNTL,
-                                       HUBP_NO_OUTSTANDING_REQ, 1,
-                                       1, 100000);
-               }
-       }
-
-       REG_UPDATE_2(DCHUBP_CNTL,
-                       HUBP_BLANK_EN, blank_en,
-                       HUBP_TTU_DISABLE, 0);
-}
-
-void hubp2_cursor_set_position(
-               struct hubp *hubp,
-               const struct dc_cursor_position *pos,
-               const struct dc_cursor_mi_param *param)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       int x_pos = pos->x - param->viewport.x;
-       int y_pos = pos->y - param->viewport.y;
-       int x_hotspot = pos->x_hotspot;
-       int y_hotspot = pos->y_hotspot;
-       int src_x_offset = x_pos - pos->x_hotspot;
-       int src_y_offset = y_pos - pos->y_hotspot;
-       int cursor_height = (int)hubp->curs_attr.height;
-       int cursor_width = (int)hubp->curs_attr.width;
-       uint32_t dst_x_offset;
-       uint32_t cur_en = pos->enable ? 1 : 0;
-
-       hubp->curs_pos = *pos;
-
-       /*
-        * Guard aganst cursor_set_position() from being called with invalid
-        * attributes
-        *
-        * TODO: Look at combining cursor_set_position() and
-        * cursor_set_attributes() into cursor_update()
-        */
-       if (hubp->curs_attr.address.quad_part == 0)
-               return;
-
-       // Transform cursor width / height and hotspots for offset calculations
-       if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) {
-               swap(cursor_height, cursor_width);
-               swap(x_hotspot, y_hotspot);
-
-               if (param->rotation == ROTATION_ANGLE_90) {
-                       // hotspot = (-y, x)
-                       src_x_offset = x_pos - (cursor_width - x_hotspot);
-                       src_y_offset = y_pos - y_hotspot;
-               } else if (param->rotation == ROTATION_ANGLE_270) {
-                       // hotspot = (y, -x)
-                       src_x_offset = x_pos - x_hotspot;
-                       src_y_offset = y_pos - (cursor_height - y_hotspot);
-               }
-       } else if (param->rotation == ROTATION_ANGLE_180) {
-               // hotspot = (-x, -y)
-               if (!param->mirror)
-                       src_x_offset = x_pos - (cursor_width - x_hotspot);
-
-               src_y_offset = y_pos - (cursor_height - y_hotspot);
-       }
-
-       dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0;
-       dst_x_offset *= param->ref_clk_khz;
-       dst_x_offset /= param->pixel_clk_khz;
-
-       ASSERT(param->h_scale_ratio.value);
-
-       if (param->h_scale_ratio.value)
-               dst_x_offset = dc_fixpt_floor(dc_fixpt_div(
-                               dc_fixpt_from_int(dst_x_offset),
-                               param->h_scale_ratio));
-
-       if (src_x_offset >= (int)param->viewport.width)
-               cur_en = 0;  /* not visible beyond right edge*/
-
-       if (src_x_offset + cursor_width <= 0)
-               cur_en = 0;  /* not visible beyond left edge*/
-
-       if (src_y_offset >= (int)param->viewport.height)
-               cur_en = 0;  /* not visible beyond bottom edge*/
-
-       if (src_y_offset + cursor_height <= 0)
-               cur_en = 0;  /* not visible beyond top edge*/
-
-       if (cur_en && REG_READ(CURSOR_SURFACE_ADDRESS) == 0)
-               hubp->funcs->set_cursor_attributes(hubp, &hubp->curs_attr);
-
-       REG_UPDATE(CURSOR_CONTROL,
-                       CURSOR_ENABLE, cur_en);
-
-       REG_SET_2(CURSOR_POSITION, 0,
-                       CURSOR_X_POSITION, pos->x,
-                       CURSOR_Y_POSITION, pos->y);
-
-       REG_SET_2(CURSOR_HOT_SPOT, 0,
-                       CURSOR_HOT_SPOT_X, pos->x_hotspot,
-                       CURSOR_HOT_SPOT_Y, pos->y_hotspot);
-
-       REG_SET(CURSOR_DST_OFFSET, 0,
-                       CURSOR_DST_X_OFFSET, dst_x_offset);
-       /* TODO Handle surface pixel formats other than 4:4:4 */
-       /* Cursor Position Register Config */
-       hubp->pos.cur_ctl.bits.cur_enable = cur_en;
-       hubp->pos.position.bits.x_pos = pos->x;
-       hubp->pos.position.bits.y_pos = pos->y;
-       hubp->pos.hot_spot.bits.x_hot = pos->x_hotspot;
-       hubp->pos.hot_spot.bits.y_hot = pos->y_hotspot;
-       hubp->pos.dst_offset.bits.dst_x_offset = dst_x_offset;
-       /* Cursor Rectangle Cache
-        * Cursor bitmaps have different hotspot values
-        * There's a possibility that the above logic returns a negative value,
-        * so we clamp them to 0
-        */
-       if (src_x_offset < 0)
-               src_x_offset = 0;
-       if (src_y_offset < 0)
-               src_y_offset = 0;
-       /* Save necessary cursor info x, y position. w, h is saved in attribute func. */
-       if (param->stream->link->psr_settings.psr_version >= DC_PSR_VERSION_SU_1 &&
-           param->rotation != ROTATION_ANGLE_0) {
-               hubp->cur_rect.x = 0;
-               hubp->cur_rect.y = 0;
-               hubp->cur_rect.w = param->stream->timing.h_addressable;
-               hubp->cur_rect.h = param->stream->timing.v_addressable;
-       } else {
-               hubp->cur_rect.x = src_x_offset + param->viewport.x;
-               hubp->cur_rect.y = src_y_offset + param->viewport.y;
-       }
-}
-
-void hubp2_clk_cntl(struct hubp *hubp, bool enable)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t clk_enable = enable ? 1 : 0;
-
-       REG_UPDATE(HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, clk_enable);
-}
-
-void hubp2_vtg_sel(struct hubp *hubp, uint32_t otg_inst)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_VTG_SEL, otg_inst);
-}
-
-void hubp2_clear_underflow(struct hubp *hubp)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, 1);
-}
-
-void hubp2_read_state_common(struct hubp *hubp)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       struct dcn_hubp_state *s = &hubp2->state;
-       struct _vcs_dpi_display_dlg_regs_st *dlg_attr = &s->dlg_attr;
-       struct _vcs_dpi_display_ttu_regs_st *ttu_attr = &s->ttu_attr;
-       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
-
-       /* Requester */
-       REG_GET(HUBPRET_CONTROL,
-                       DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs->plane1_base_address);
-       REG_GET_4(DCN_EXPANSION_MODE,
-                       DRQ_EXPANSION_MODE, &rq_regs->drq_expansion_mode,
-                       PRQ_EXPANSION_MODE, &rq_regs->prq_expansion_mode,
-                       MRQ_EXPANSION_MODE, &rq_regs->mrq_expansion_mode,
-                       CRQ_EXPANSION_MODE, &rq_regs->crq_expansion_mode);
-
-       REG_GET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, &rq_regs->aperture_high_addr);
-
-       REG_GET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, &rq_regs->aperture_low_addr);
-
-       /* DLG - Per hubp */
-       REG_GET_2(BLANK_OFFSET_0,
-               REFCYC_H_BLANK_END, &dlg_attr->refcyc_h_blank_end,
-               DLG_V_BLANK_END, &dlg_attr->dlg_vblank_end);
-
-       REG_GET(BLANK_OFFSET_1,
-               MIN_DST_Y_NEXT_START, &dlg_attr->min_dst_y_next_start);
-
-       REG_GET(DST_DIMENSIONS,
-               REFCYC_PER_HTOTAL, &dlg_attr->refcyc_per_htotal);
-
-       REG_GET_2(DST_AFTER_SCALER,
-               REFCYC_X_AFTER_SCALER, &dlg_attr->refcyc_x_after_scaler,
-               DST_Y_AFTER_SCALER, &dlg_attr->dst_y_after_scaler);
-
-       if (REG(PREFETCH_SETTINS))
-               REG_GET_2(PREFETCH_SETTINS,
-                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
-                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
-       else
-               REG_GET_2(PREFETCH_SETTINGS,
-                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
-                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
-
-       REG_GET_2(VBLANK_PARAMETERS_0,
-               DST_Y_PER_VM_VBLANK, &dlg_attr->dst_y_per_vm_vblank,
-               DST_Y_PER_ROW_VBLANK, &dlg_attr->dst_y_per_row_vblank);
-
-       REG_GET(REF_FREQ_TO_PIX_FREQ,
-               REF_FREQ_TO_PIX_FREQ, &dlg_attr->ref_freq_to_pix_freq);
-
-       /* DLG - Per luma/chroma */
-       REG_GET(VBLANK_PARAMETERS_1,
-               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr->refcyc_per_pte_group_vblank_l);
-
-       REG_GET(VBLANK_PARAMETERS_3,
-               REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr->refcyc_per_meta_chunk_vblank_l);
-
-       if (REG(NOM_PARAMETERS_0))
-               REG_GET(NOM_PARAMETERS_0,
-                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr->dst_y_per_pte_row_nom_l);
-
-       if (REG(NOM_PARAMETERS_1))
-               REG_GET(NOM_PARAMETERS_1,
-                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr->refcyc_per_pte_group_nom_l);
-
-       REG_GET(NOM_PARAMETERS_4,
-               DST_Y_PER_META_ROW_NOM_L, &dlg_attr->dst_y_per_meta_row_nom_l);
-
-       REG_GET(NOM_PARAMETERS_5,
-               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr->refcyc_per_meta_chunk_nom_l);
-
-       REG_GET_2(PER_LINE_DELIVERY_PRE,
-               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr->refcyc_per_line_delivery_pre_l,
-               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr->refcyc_per_line_delivery_pre_c);
-
-       REG_GET_2(PER_LINE_DELIVERY,
-               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr->refcyc_per_line_delivery_l,
-               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr->refcyc_per_line_delivery_c);
-
-       if (REG(PREFETCH_SETTINS_C))
-               REG_GET(PREFETCH_SETTINS_C,
-                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
-       else
-               REG_GET(PREFETCH_SETTINGS_C,
-                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
-
-       REG_GET(VBLANK_PARAMETERS_2,
-               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr->refcyc_per_pte_group_vblank_c);
-
-       REG_GET(VBLANK_PARAMETERS_4,
-               REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr->refcyc_per_meta_chunk_vblank_c);
-
-       if (REG(NOM_PARAMETERS_2))
-               REG_GET(NOM_PARAMETERS_2,
-                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr->dst_y_per_pte_row_nom_c);
-
-       if (REG(NOM_PARAMETERS_3))
-               REG_GET(NOM_PARAMETERS_3,
-                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr->refcyc_per_pte_group_nom_c);
-
-       REG_GET(NOM_PARAMETERS_6,
-               DST_Y_PER_META_ROW_NOM_C, &dlg_attr->dst_y_per_meta_row_nom_c);
-
-       REG_GET(NOM_PARAMETERS_7,
-               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr->refcyc_per_meta_chunk_nom_c);
-
-       /* TTU - per hubp */
-       REG_GET_2(DCN_TTU_QOS_WM,
-               QoS_LEVEL_LOW_WM, &ttu_attr->qos_level_low_wm,
-               QoS_LEVEL_HIGH_WM, &ttu_attr->qos_level_high_wm);
-
-       REG_GET_2(DCN_GLOBAL_TTU_CNTL,
-               MIN_TTU_VBLANK, &ttu_attr->min_ttu_vblank,
-               QoS_LEVEL_FLIP, &ttu_attr->qos_level_flip);
-
-       /* TTU - per luma/chroma */
-       /* Assumed surf0 is luma and 1 is chroma */
-
-       REG_GET_3(DCN_SURF0_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_l,
-               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_l,
-               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_l);
-
-       REG_GET(DCN_SURF0_TTU_CNTL1,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               &ttu_attr->refcyc_per_req_delivery_pre_l);
-
-       REG_GET_3(DCN_SURF1_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_c,
-               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_c,
-               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_c);
-
-       REG_GET(DCN_SURF1_TTU_CNTL1,
-               REFCYC_PER_REQ_DELIVERY_PRE,
-               &ttu_attr->refcyc_per_req_delivery_pre_c);
-
-       /* Rest of hubp */
-       REG_GET(DCSURF_SURFACE_CONFIG,
-                       SURFACE_PIXEL_FORMAT, &s->pixel_format);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
-                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &s->inuse_addr_hi);
-
-       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
-                       SURFACE_EARLIEST_INUSE_ADDRESS, &s->inuse_addr_lo);
-
-       REG_GET_2(DCSURF_PRI_VIEWPORT_DIMENSION,
-                       PRI_VIEWPORT_WIDTH, &s->viewport_width,
-                       PRI_VIEWPORT_HEIGHT, &s->viewport_height);
-
-       REG_GET_2(DCSURF_SURFACE_CONFIG,
-                       ROTATION_ANGLE, &s->rotation_angle,
-                       H_MIRROR_EN, &s->h_mirror_en);
-
-       REG_GET(DCSURF_TILING_CONFIG,
-                       SW_MODE, &s->sw_mode);
-
-       REG_GET(DCSURF_SURFACE_CONTROL,
-                       PRIMARY_SURFACE_DCC_EN, &s->dcc_en);
-
-       REG_GET_3(DCHUBP_CNTL,
-                       HUBP_BLANK_EN, &s->blank_en,
-                       HUBP_TTU_DISABLE, &s->ttu_disable,
-                       HUBP_UNDERFLOW_STATUS, &s->underflow_status);
-
-       REG_GET(HUBP_CLK_CNTL,
-                       HUBP_CLOCK_ENABLE, &s->clock_en);
-
-       REG_GET(DCN_GLOBAL_TTU_CNTL,
-                       MIN_TTU_VBLANK, &s->min_ttu_vblank);
-
-       REG_GET_2(DCN_TTU_QOS_WM,
-                       QoS_LEVEL_LOW_WM, &s->qos_level_low_wm,
-                       QoS_LEVEL_HIGH_WM, &s->qos_level_high_wm);
-
-       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS,
-                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_lo);
-
-       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH,
-                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_hi);
-
-       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS,
-                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_lo);
-
-       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_hi);
-}
-
-void hubp2_read_state(struct hubp *hubp)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       struct dcn_hubp_state *s = &hubp2->state;
-       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
-
-       hubp2_read_state_common(hubp);
-
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
-               CHUNK_SIZE, &rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, &rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, &rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, &rq_regs->rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, &rq_regs->rq_regs_l.dpte_group_size,
-               MPTE_GROUP_SIZE, &rq_regs->rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, &rq_regs->rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, &rq_regs->rq_regs_l.pte_row_height_linear);
-
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG_C,
-               CHUNK_SIZE_C, &rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.dpte_group_size,
-               MPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.mpte_group_size,
-               SWATH_HEIGHT_C, &rq_regs->rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs->rq_regs_c.pte_row_height_linear);
-
-       if (REG(DCHUBP_CNTL))
-               s->hubp_cntl = REG_READ(DCHUBP_CNTL);
-
-       if (REG(DCSURF_FLIP_CONTROL))
-               s->flip_control = REG_READ(DCSURF_FLIP_CONTROL);
-
-}
-
-static void hubp2_validate_dml_output(struct hubp *hubp,
-               struct dc_context *ctx,
-               struct _vcs_dpi_display_rq_regs_st *dml_rq_regs,
-               struct _vcs_dpi_display_dlg_regs_st *dml_dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *dml_ttu_attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       struct _vcs_dpi_display_rq_regs_st rq_regs = {0};
-       struct _vcs_dpi_display_dlg_regs_st dlg_attr = {0};
-       struct _vcs_dpi_display_ttu_regs_st ttu_attr = {0};
-       DC_LOGGER_INIT(ctx->logger);
-       DC_LOG_DEBUG("DML Validation | Running Validation");
-
-       /* Requestor Regs */
-       REG_GET(HUBPRET_CONTROL,
-               DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs.plane1_base_address);
-       REG_GET_4(DCN_EXPANSION_MODE,
-               DRQ_EXPANSION_MODE, &rq_regs.drq_expansion_mode,
-               PRQ_EXPANSION_MODE, &rq_regs.prq_expansion_mode,
-               MRQ_EXPANSION_MODE, &rq_regs.mrq_expansion_mode,
-               CRQ_EXPANSION_MODE, &rq_regs.crq_expansion_mode);
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
-               CHUNK_SIZE, &rq_regs.rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, &rq_regs.rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, &rq_regs.rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, &rq_regs.rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, &rq_regs.rq_regs_l.dpte_group_size,
-               MPTE_GROUP_SIZE, &rq_regs.rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, &rq_regs.rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, &rq_regs.rq_regs_l.pte_row_height_linear);
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG_C,
-               CHUNK_SIZE_C, &rq_regs.rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, &rq_regs.rq_regs_c.dpte_group_size,
-               MPTE_GROUP_SIZE_C, &rq_regs.rq_regs_c.mpte_group_size,
-               SWATH_HEIGHT_C, &rq_regs.rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs.rq_regs_c.pte_row_height_linear);
-
-       if (rq_regs.plane1_base_address != dml_rq_regs->plane1_base_address)
-               DC_LOG_DEBUG("DML Validation | HUBPRET_CONTROL:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->plane1_base_address, rq_regs.plane1_base_address);
-       if (rq_regs.drq_expansion_mode != dml_rq_regs->drq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->drq_expansion_mode, rq_regs.drq_expansion_mode);
-       if (rq_regs.prq_expansion_mode != dml_rq_regs->prq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:MRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->prq_expansion_mode, rq_regs.prq_expansion_mode);
-       if (rq_regs.mrq_expansion_mode != dml_rq_regs->mrq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->mrq_expansion_mode, rq_regs.mrq_expansion_mode);
-       if (rq_regs.crq_expansion_mode != dml_rq_regs->crq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:CRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->crq_expansion_mode, rq_regs.crq_expansion_mode);
-
-       if (rq_regs.rq_regs_l.chunk_size != dml_rq_regs->rq_regs_l.chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.chunk_size, rq_regs.rq_regs_l.chunk_size);
-       if (rq_regs.rq_regs_l.min_chunk_size != dml_rq_regs->rq_regs_l.min_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.min_chunk_size, rq_regs.rq_regs_l.min_chunk_size);
-       if (rq_regs.rq_regs_l.meta_chunk_size != dml_rq_regs->rq_regs_l.meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.meta_chunk_size, rq_regs.rq_regs_l.meta_chunk_size);
-       if (rq_regs.rq_regs_l.min_meta_chunk_size != dml_rq_regs->rq_regs_l.min_meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.min_meta_chunk_size, rq_regs.rq_regs_l.min_meta_chunk_size);
-       if (rq_regs.rq_regs_l.dpte_group_size != dml_rq_regs->rq_regs_l.dpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:DPTE_GROUP_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.dpte_group_size, rq_regs.rq_regs_l.dpte_group_size);
-       if (rq_regs.rq_regs_l.mpte_group_size != dml_rq_regs->rq_regs_l.mpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MPTE_GROUP_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.mpte_group_size, rq_regs.rq_regs_l.mpte_group_size);
-       if (rq_regs.rq_regs_l.swath_height != dml_rq_regs->rq_regs_l.swath_height)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:SWATH_HEIGHT - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.swath_height, rq_regs.rq_regs_l.swath_height);
-       if (rq_regs.rq_regs_l.pte_row_height_linear != dml_rq_regs->rq_regs_l.pte_row_height_linear)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:PTE_ROW_HEIGHT_LINEAR - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.pte_row_height_linear, rq_regs.rq_regs_l.pte_row_height_linear);
-
-       if (rq_regs.rq_regs_c.chunk_size != dml_rq_regs->rq_regs_c.chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.chunk_size, rq_regs.rq_regs_c.chunk_size);
-       if (rq_regs.rq_regs_c.min_chunk_size != dml_rq_regs->rq_regs_c.min_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.min_chunk_size, rq_regs.rq_regs_c.min_chunk_size);
-       if (rq_regs.rq_regs_c.meta_chunk_size != dml_rq_regs->rq_regs_c.meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.meta_chunk_size, rq_regs.rq_regs_c.meta_chunk_size);
-       if (rq_regs.rq_regs_c.min_meta_chunk_size != dml_rq_regs->rq_regs_c.min_meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.min_meta_chunk_size, rq_regs.rq_regs_c.min_meta_chunk_size);
-       if (rq_regs.rq_regs_c.dpte_group_size != dml_rq_regs->rq_regs_c.dpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:DPTE_GROUP_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.dpte_group_size, rq_regs.rq_regs_c.dpte_group_size);
-       if (rq_regs.rq_regs_c.mpte_group_size != dml_rq_regs->rq_regs_c.mpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MPTE_GROUP_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.mpte_group_size, rq_regs.rq_regs_c.mpte_group_size);
-       if (rq_regs.rq_regs_c.swath_height != dml_rq_regs->rq_regs_c.swath_height)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:SWATH_HEIGHT_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.swath_height, rq_regs.rq_regs_c.swath_height);
-       if (rq_regs.rq_regs_c.pte_row_height_linear != dml_rq_regs->rq_regs_c.pte_row_height_linear)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:PTE_ROW_HEIGHT_LINEAR_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.pte_row_height_linear, rq_regs.rq_regs_c.pte_row_height_linear);
-
-       /* DLG - Per hubp */
-       REG_GET_2(BLANK_OFFSET_0,
-               REFCYC_H_BLANK_END, &dlg_attr.refcyc_h_blank_end,
-               DLG_V_BLANK_END, &dlg_attr.dlg_vblank_end);
-       REG_GET(BLANK_OFFSET_1,
-               MIN_DST_Y_NEXT_START, &dlg_attr.min_dst_y_next_start);
-       REG_GET(DST_DIMENSIONS,
-               REFCYC_PER_HTOTAL, &dlg_attr.refcyc_per_htotal);
-       REG_GET_2(DST_AFTER_SCALER,
-               REFCYC_X_AFTER_SCALER, &dlg_attr.refcyc_x_after_scaler,
-               DST_Y_AFTER_SCALER, &dlg_attr.dst_y_after_scaler);
-       REG_GET(REF_FREQ_TO_PIX_FREQ,
-               REF_FREQ_TO_PIX_FREQ, &dlg_attr.ref_freq_to_pix_freq);
-
-       if (dlg_attr.refcyc_h_blank_end != dml_dlg_attr->refcyc_h_blank_end)
-               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:REFCYC_H_BLANK_END - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_h_blank_end, dlg_attr.refcyc_h_blank_end);
-       if (dlg_attr.dlg_vblank_end != dml_dlg_attr->dlg_vblank_end)
-               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:DLG_V_BLANK_END - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dlg_vblank_end, dlg_attr.dlg_vblank_end);
-       if (dlg_attr.min_dst_y_next_start != dml_dlg_attr->min_dst_y_next_start)
-               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_1:MIN_DST_Y_NEXT_START - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->min_dst_y_next_start, dlg_attr.min_dst_y_next_start);
-       if (dlg_attr.refcyc_per_htotal != dml_dlg_attr->refcyc_per_htotal)
-               DC_LOG_DEBUG("DML Validation | DST_DIMENSIONS:REFCYC_PER_HTOTAL - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_htotal, dlg_attr.refcyc_per_htotal);
-       if (dlg_attr.refcyc_x_after_scaler != dml_dlg_attr->refcyc_x_after_scaler)
-               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:REFCYC_X_AFTER_SCALER - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_x_after_scaler, dlg_attr.refcyc_x_after_scaler);
-       if (dlg_attr.dst_y_after_scaler != dml_dlg_attr->dst_y_after_scaler)
-               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:DST_Y_AFTER_SCALER - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_after_scaler, dlg_attr.dst_y_after_scaler);
-       if (dlg_attr.ref_freq_to_pix_freq != dml_dlg_attr->ref_freq_to_pix_freq)
-               DC_LOG_DEBUG("DML Validation | REF_FREQ_TO_PIX_FREQ:REF_FREQ_TO_PIX_FREQ - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->ref_freq_to_pix_freq, dlg_attr.ref_freq_to_pix_freq);
-
-       /* DLG - Per luma/chroma */
-       REG_GET(VBLANK_PARAMETERS_1,
-               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr.refcyc_per_pte_group_vblank_l);
-       if (REG(NOM_PARAMETERS_0))
-               REG_GET(NOM_PARAMETERS_0,
-                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr.dst_y_per_pte_row_nom_l);
-       if (REG(NOM_PARAMETERS_1))
-               REG_GET(NOM_PARAMETERS_1,
-                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr.refcyc_per_pte_group_nom_l);
-       REG_GET(NOM_PARAMETERS_4,
-               DST_Y_PER_META_ROW_NOM_L, &dlg_attr.dst_y_per_meta_row_nom_l);
-       REG_GET(NOM_PARAMETERS_5,
-               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr.refcyc_per_meta_chunk_nom_l);
-       REG_GET_2(PER_LINE_DELIVERY,
-               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr.refcyc_per_line_delivery_l,
-               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr.refcyc_per_line_delivery_c);
-       REG_GET_2(PER_LINE_DELIVERY_PRE,
-               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr.refcyc_per_line_delivery_pre_l,
-               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr.refcyc_per_line_delivery_pre_c);
-       REG_GET(VBLANK_PARAMETERS_2,
-               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr.refcyc_per_pte_group_vblank_c);
-       if (REG(NOM_PARAMETERS_2))
-               REG_GET(NOM_PARAMETERS_2,
-                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr.dst_y_per_pte_row_nom_c);
-       if (REG(NOM_PARAMETERS_3))
-               REG_GET(NOM_PARAMETERS_3,
-                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr.refcyc_per_pte_group_nom_c);
-       REG_GET(NOM_PARAMETERS_6,
-               DST_Y_PER_META_ROW_NOM_C, &dlg_attr.dst_y_per_meta_row_nom_c);
-       REG_GET(NOM_PARAMETERS_7,
-               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr.refcyc_per_meta_chunk_nom_c);
-       REG_GET(VBLANK_PARAMETERS_3,
-                       REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr.refcyc_per_meta_chunk_vblank_l);
-       REG_GET(VBLANK_PARAMETERS_4,
-                       REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr.refcyc_per_meta_chunk_vblank_c);
-
-       if (dlg_attr.refcyc_per_pte_group_vblank_l != dml_dlg_attr->refcyc_per_pte_group_vblank_l)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_1:REFCYC_PER_PTE_GROUP_VBLANK_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_vblank_l, dlg_attr.refcyc_per_pte_group_vblank_l);
-       if (dlg_attr.dst_y_per_pte_row_nom_l != dml_dlg_attr->dst_y_per_pte_row_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_0:DST_Y_PER_PTE_ROW_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_pte_row_nom_l, dlg_attr.dst_y_per_pte_row_nom_l);
-       if (dlg_attr.refcyc_per_pte_group_nom_l != dml_dlg_attr->refcyc_per_pte_group_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_1:REFCYC_PER_PTE_GROUP_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_nom_l, dlg_attr.refcyc_per_pte_group_nom_l);
-       if (dlg_attr.dst_y_per_meta_row_nom_l != dml_dlg_attr->dst_y_per_meta_row_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_4:DST_Y_PER_META_ROW_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_meta_row_nom_l, dlg_attr.dst_y_per_meta_row_nom_l);
-       if (dlg_attr.refcyc_per_meta_chunk_nom_l != dml_dlg_attr->refcyc_per_meta_chunk_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_5:REFCYC_PER_META_CHUNK_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_nom_l, dlg_attr.refcyc_per_meta_chunk_nom_l);
-       if (dlg_attr.refcyc_per_line_delivery_l != dml_dlg_attr->refcyc_per_line_delivery_l)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_l, dlg_attr.refcyc_per_line_delivery_l);
-       if (dlg_attr.refcyc_per_line_delivery_c != dml_dlg_attr->refcyc_per_line_delivery_c)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_c, dlg_attr.refcyc_per_line_delivery_c);
-       if (dlg_attr.refcyc_per_pte_group_vblank_c != dml_dlg_attr->refcyc_per_pte_group_vblank_c)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_2:REFCYC_PER_PTE_GROUP_VBLANK_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_vblank_c, dlg_attr.refcyc_per_pte_group_vblank_c);
-       if (dlg_attr.dst_y_per_pte_row_nom_c != dml_dlg_attr->dst_y_per_pte_row_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_2:DST_Y_PER_PTE_ROW_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_pte_row_nom_c, dlg_attr.dst_y_per_pte_row_nom_c);
-       if (dlg_attr.refcyc_per_pte_group_nom_c != dml_dlg_attr->refcyc_per_pte_group_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_3:REFCYC_PER_PTE_GROUP_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_nom_c, dlg_attr.refcyc_per_pte_group_nom_c);
-       if (dlg_attr.dst_y_per_meta_row_nom_c != dml_dlg_attr->dst_y_per_meta_row_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_6:DST_Y_PER_META_ROW_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_meta_row_nom_c, dlg_attr.dst_y_per_meta_row_nom_c);
-       if (dlg_attr.refcyc_per_meta_chunk_nom_c != dml_dlg_attr->refcyc_per_meta_chunk_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_7:REFCYC_PER_META_CHUNK_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_nom_c, dlg_attr.refcyc_per_meta_chunk_nom_c);
-       if (dlg_attr.refcyc_per_line_delivery_pre_l != dml_dlg_attr->refcyc_per_line_delivery_pre_l)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_pre_l, dlg_attr.refcyc_per_line_delivery_pre_l);
-       if (dlg_attr.refcyc_per_line_delivery_pre_c != dml_dlg_attr->refcyc_per_line_delivery_pre_c)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_pre_c, dlg_attr.refcyc_per_line_delivery_pre_c);
-       if (dlg_attr.refcyc_per_meta_chunk_vblank_l != dml_dlg_attr->refcyc_per_meta_chunk_vblank_l)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_3:REFCYC_PER_META_CHUNK_VBLANK_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_l, dlg_attr.refcyc_per_meta_chunk_vblank_l);
-       if (dlg_attr.refcyc_per_meta_chunk_vblank_c != dml_dlg_attr->refcyc_per_meta_chunk_vblank_c)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_4:REFCYC_PER_META_CHUNK_VBLANK_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_c, dlg_attr.refcyc_per_meta_chunk_vblank_c);
-
-       /* TTU - per hubp */
-       REG_GET_2(DCN_TTU_QOS_WM,
-               QoS_LEVEL_LOW_WM, &ttu_attr.qos_level_low_wm,
-               QoS_LEVEL_HIGH_WM, &ttu_attr.qos_level_high_wm);
-
-       if (ttu_attr.qos_level_low_wm != dml_ttu_attr->qos_level_low_wm)
-               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_LOW_WM - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_low_wm, ttu_attr.qos_level_low_wm);
-       if (ttu_attr.qos_level_high_wm != dml_ttu_attr->qos_level_high_wm)
-               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_HIGH_WM - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_high_wm, ttu_attr.qos_level_high_wm);
-
-       /* TTU - per luma/chroma */
-       /* Assumed surf0 is luma and 1 is chroma */
-       REG_GET_3(DCN_SURF0_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_l,
-               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_l,
-               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_l);
-       REG_GET_3(DCN_SURF1_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_c,
-               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_c,
-               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_c);
-       REG_GET_3(DCN_CUR0_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_cur0,
-               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_cur0,
-               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_cur0);
-       REG_GET(FLIP_PARAMETERS_1,
-               REFCYC_PER_PTE_GROUP_FLIP_L, &dlg_attr.refcyc_per_pte_group_flip_l);
-       REG_GET(DCN_CUR0_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur0);
-       REG_GET(DCN_CUR1_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur1);
-       REG_GET(DCN_SURF0_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_l);
-       REG_GET(DCN_SURF1_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_c);
-
-       if (ttu_attr.refcyc_per_req_delivery_l != dml_ttu_attr->refcyc_per_req_delivery_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_l, ttu_attr.refcyc_per_req_delivery_l);
-       if (ttu_attr.qos_level_fixed_l != dml_ttu_attr->qos_level_fixed_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_fixed_l, ttu_attr.qos_level_fixed_l);
-       if (ttu_attr.qos_ramp_disable_l != dml_ttu_attr->qos_ramp_disable_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_ramp_disable_l, ttu_attr.qos_ramp_disable_l);
-       if (ttu_attr.refcyc_per_req_delivery_c != dml_ttu_attr->refcyc_per_req_delivery_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_c, ttu_attr.refcyc_per_req_delivery_c);
-       if (ttu_attr.qos_level_fixed_c != dml_ttu_attr->qos_level_fixed_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_fixed_c, ttu_attr.qos_level_fixed_c);
-       if (ttu_attr.qos_ramp_disable_c != dml_ttu_attr->qos_ramp_disable_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_ramp_disable_c, ttu_attr.qos_ramp_disable_c);
-       if (ttu_attr.refcyc_per_req_delivery_cur0 != dml_ttu_attr->refcyc_per_req_delivery_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_cur0, ttu_attr.refcyc_per_req_delivery_cur0);
-       if (ttu_attr.qos_level_fixed_cur0 != dml_ttu_attr->qos_level_fixed_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_fixed_cur0, ttu_attr.qos_level_fixed_cur0);
-       if (ttu_attr.qos_ramp_disable_cur0 != dml_ttu_attr->qos_ramp_disable_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_ramp_disable_cur0, ttu_attr.qos_ramp_disable_cur0);
-       if (dlg_attr.refcyc_per_pte_group_flip_l != dml_dlg_attr->refcyc_per_pte_group_flip_l)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_1:REFCYC_PER_PTE_GROUP_FLIP_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_flip_l, dlg_attr.refcyc_per_pte_group_flip_l);
-       if (ttu_attr.refcyc_per_req_delivery_pre_cur0 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur0, ttu_attr.refcyc_per_req_delivery_pre_cur0);
-       if (ttu_attr.refcyc_per_req_delivery_pre_cur1 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur1)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur1, ttu_attr.refcyc_per_req_delivery_pre_cur1);
-       if (ttu_attr.refcyc_per_req_delivery_pre_l != dml_ttu_attr->refcyc_per_req_delivery_pre_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_l, ttu_attr.refcyc_per_req_delivery_pre_l);
-       if (ttu_attr.refcyc_per_req_delivery_pre_c != dml_ttu_attr->refcyc_per_req_delivery_pre_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_c, ttu_attr.refcyc_per_req_delivery_pre_c);
-}
-
-static struct hubp_funcs dcn20_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp2_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp2_program_surface_config,
-       .hubp_is_flip_pending = hubp2_is_flip_pending,
-       .hubp_setup = hubp2_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp2_set_vm_system_aperture_settings,
-       .set_blank = hubp2_set_blank,
-       .set_blank_regs = hubp2_set_blank_regs,
-       .dcc_control = hubp2_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .set_cursor_attributes  = hubp2_cursor_set_attributes,
-       .set_cursor_position    = hubp2_cursor_set_position,
-       .hubp_clk_cntl = hubp2_clk_cntl,
-       .hubp_vtg_sel = hubp2_vtg_sel,
-       .dmdata_set_attributes = hubp2_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp2_read_state,
-       .hubp_clear_underflow = hubp2_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp1_init,
-       .validate_dml_output = hubp2_validate_dml_output,
-       .hubp_in_blank = hubp1_in_blank,
-       .hubp_soft_reset = hubp1_soft_reset,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-};
-
-
-bool hubp2_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask)
-{
-       hubp2->base.funcs = &dcn20_hubp_funcs;
-       hubp2->base.ctx = ctx;
-       hubp2->hubp_regs = hubp_regs;
-       hubp2->hubp_shift = hubp_shift;
-       hubp2->hubp_mask = hubp_mask;
-       hubp2->base.inst = inst;
-       hubp2->base.opp_id = OPP_ID_INVALID;
-       hubp2->base.mpcc_id = 0xf;
-
-       return true;
-}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.h
deleted file mode 100644 (file)
index ecc0a2f..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright 2012-17 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_MEM_INPUT_DCN20_H__
-#define __DC_MEM_INPUT_DCN20_H__
-
-#include "../dcn10/dcn10_hubp.h"
-
-#define TO_DCN20_HUBP(hubp)\
-       container_of(hubp, struct dcn20_hubp, base)
-
-#define HUBP_REG_LIST_DCN2_COMMON(id)\
-       HUBP_REG_LIST_DCN(id),\
-       HUBP_REG_LIST_DCN_VM(id),\
-       SRI(PREFETCH_SETTINGS, HUBPREQ, id),\
-       SRI(PREFETCH_SETTINGS_C, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, HUBPREQ, id),\
-       SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, HUBPREQ, id),\
-       SRI(CURSOR_SETTINGS, HUBPREQ, id), \
-       SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR0_, id), \
-       SRI(CURSOR_SURFACE_ADDRESS, CURSOR0_, id), \
-       SRI(CURSOR_SIZE, CURSOR0_, id), \
-       SRI(CURSOR_CONTROL, CURSOR0_, id), \
-       SRI(CURSOR_POSITION, CURSOR0_, id), \
-       SRI(CURSOR_HOT_SPOT, CURSOR0_, id), \
-       SRI(CURSOR_DST_OFFSET, CURSOR0_, id), \
-       SRI(DMDATA_ADDRESS_HIGH, CURSOR0_, id), \
-       SRI(DMDATA_ADDRESS_LOW, CURSOR0_, id), \
-       SRI(DMDATA_CNTL, CURSOR0_, id), \
-       SRI(DMDATA_SW_CNTL, CURSOR0_, id), \
-       SRI(DMDATA_QOS_CNTL, CURSOR0_, id), \
-       SRI(DMDATA_SW_DATA, CURSOR0_, id), \
-       SRI(DMDATA_STATUS, CURSOR0_, id),\
-       SRI(FLIP_PARAMETERS_0, HUBPREQ, id),\
-       SRI(FLIP_PARAMETERS_1, HUBPREQ, id),\
-       SRI(FLIP_PARAMETERS_2, HUBPREQ, id),\
-       SRI(DCN_CUR1_TTU_CNTL0, HUBPREQ, id),\
-       SRI(DCN_CUR1_TTU_CNTL1, HUBPREQ, id),\
-       SRI(DCSURF_FLIP_CONTROL2, HUBPREQ, id), \
-       SRI(VMID_SETTINGS_0, HUBPREQ, id)
-
-#define HUBP_REG_LIST_DCN20(id)\
-       HUBP_REG_LIST_DCN2_COMMON(id),\
-       SR(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB),\
-       SR(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB)
-
-#define HUBP_MASK_SH_LIST_DCN2_SHARE_COMMON(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh),\
-       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh)
-
-/*DCN2.x and DCN1.x*/
-#define HUBP_MASK_SH_LIST_DCN2_COMMON(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN2_SHARE_COMMON(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MPTE_GROUP_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MPTE_GROUP_SIZE_C, mask_sh)
-
-/*DCN2.0 specific*/
-#define HUBP_MASK_SH_LIST_DCN20(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN2_COMMON(mask_sh),\
-       HUBP_SF(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
-       HUBP_SF(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
-       HUBP_SF(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh)
-
-/*DCN2.x */
-#define DCN2_HUBP_REG_COMMON_VARIABLE_LIST \
-       HUBP_COMMON_REG_VARIABLE_LIST; \
-       uint32_t DMDATA_ADDRESS_HIGH; \
-       uint32_t DMDATA_ADDRESS_LOW; \
-       uint32_t DMDATA_CNTL; \
-       uint32_t DMDATA_SW_CNTL; \
-       uint32_t DMDATA_QOS_CNTL; \
-       uint32_t DMDATA_SW_DATA; \
-       uint32_t DMDATA_STATUS;\
-       uint32_t DCSURF_FLIP_CONTROL2;\
-       uint32_t FLIP_PARAMETERS_0;\
-       uint32_t FLIP_PARAMETERS_1;\
-       uint32_t FLIP_PARAMETERS_2;\
-       uint32_t DCN_CUR1_TTU_CNTL0;\
-       uint32_t DCN_CUR1_TTU_CNTL1;\
-       uint32_t VMID_SETTINGS_0
-
-/*shared with dcn3.x*/
-#define DCN21_HUBP_REG_COMMON_VARIABLE_LIST \
-       DCN2_HUBP_REG_COMMON_VARIABLE_LIST; \
-       uint32_t FLIP_PARAMETERS_3;\
-       uint32_t FLIP_PARAMETERS_4;\
-       uint32_t FLIP_PARAMETERS_5;\
-       uint32_t FLIP_PARAMETERS_6;\
-       uint32_t VBLANK_PARAMETERS_5;\
-       uint32_t VBLANK_PARAMETERS_6
-
-#define DCN30_HUBP_REG_COMMON_VARIABLE_LIST \
-       DCN21_HUBP_REG_COMMON_VARIABLE_LIST;\
-       uint32_t DCN_DMDATA_VM_CNTL
-
-#define DCN32_HUBP_REG_COMMON_VARIABLE_LIST \
-       DCN30_HUBP_REG_COMMON_VARIABLE_LIST;\
-       uint32_t DCHUBP_MALL_CONFIG;\
-       uint32_t DCHUBP_VMPG_CONFIG;\
-       uint32_t UCLK_PSTATE_FORCE
-
-#define DCN401_HUBP_REG_COMMON_VARIABLE_LIST \
-       DCN32_HUBP_REG_COMMON_VARIABLE_LIST;\
-       uint32_t _3DLUT_FL_BIAS_SCALE;\
-       uint32_t _3DLUT_FL_CONFIG;\
-       uint32_t HUBP_3DLUT_ADDRESS_HIGH;\
-       uint32_t HUBP_3DLUT_ADDRESS_LOW;\
-       uint32_t HUBP_3DLUT_CONTROL;\
-       uint32_t HUBP_3DLUT_DLG_PARAM;\
-
-#define DCN2_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN_HUBP_REG_FIELD_BASE_LIST(type); \
-       type DMDATA_ADDRESS_HIGH;\
-       type DMDATA_MODE;\
-       type DMDATA_UPDATED;\
-       type DMDATA_REPEAT;\
-       type DMDATA_SIZE;\
-       type DMDATA_SW_UPDATED;\
-       type DMDATA_SW_REPEAT;\
-       type DMDATA_SW_SIZE;\
-       type DMDATA_QOS_MODE;\
-       type DMDATA_QOS_LEVEL;\
-       type DMDATA_DL_DELTA;\
-       type DMDATA_DONE;\
-       type DST_Y_PER_VM_FLIP;\
-       type DST_Y_PER_ROW_FLIP;\
-       type REFCYC_PER_PTE_GROUP_FLIP_L;\
-       type REFCYC_PER_META_CHUNK_FLIP_L;\
-       type HUBP_VREADY_AT_OR_AFTER_VSYNC;\
-       type HUBP_DISABLE_STOP_DATA_DURING_VM;\
-       type HUBPREQ_MASTER_UPDATE_LOCK_STATUS;\
-       type SURFACE_GSL_ENABLE;\
-       type SURFACE_TRIPLE_BUFFER_ENABLE;\
-       type VMID
-
-#define DCN21_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN2_HUBP_REG_FIELD_VARIABLE_LIST(type);\
-       type REFCYC_PER_VM_GROUP_FLIP;\
-       type REFCYC_PER_VM_REQ_FLIP;\
-       type REFCYC_PER_VM_GROUP_VBLANK;\
-       type REFCYC_PER_VM_REQ_VBLANK;\
-       type REFCYC_PER_PTE_GROUP_FLIP_C; \
-       type REFCYC_PER_META_CHUNK_FLIP_C; \
-       type VM_GROUP_SIZE
-
-#define DCN30_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN21_HUBP_REG_FIELD_VARIABLE_LIST(type);\
-       type PRIMARY_SURFACE_DCC_IND_BLK;\
-       type SECONDARY_SURFACE_DCC_IND_BLK;\
-       type PRIMARY_SURFACE_DCC_IND_BLK_C;\
-       type SECONDARY_SURFACE_DCC_IND_BLK_C;\
-       type ALPHA_PLANE_EN;\
-       type REFCYC_PER_VM_DMDATA;\
-       type DMDATA_VM_FAULT_STATUS;\
-       type DMDATA_VM_FAULT_STATUS_CLEAR; \
-       type DMDATA_VM_UNDERFLOW_STATUS;\
-       type DMDATA_VM_LATE_STATUS;\
-       type DMDATA_VM_UNDERFLOW_STATUS_CLEAR; \
-       type DMDATA_VM_DONE; \
-       type CROSSBAR_SRC_Y_G; \
-       type CROSSBAR_SRC_ALPHA; \
-       type PACK_3TO2_ELEMENT_DISABLE; \
-       type ROW_TTU_MODE; \
-       type NUM_PKRS
-
-#define DCN31_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN30_HUBP_REG_FIELD_VARIABLE_LIST(type);\
-       type HUBP_UNBOUNDED_REQ_MODE;\
-       type CURSOR_REQ_MODE;\
-       type HUBP_SOFT_RESET
-
-#define DCN32_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN31_HUBP_REG_FIELD_VARIABLE_LIST(type);\
-       type USE_MALL_SEL; \
-       type USE_MALL_FOR_CURSOR;\
-       type VMPG_SIZE; \
-       type PTE_BUFFER_MODE; \
-       type BIGK_FRAGMENT_SIZE; \
-       type FORCE_ONE_ROW_FOR_FRAME; \
-       type DATA_UCLK_PSTATE_FORCE_EN; \
-       type DATA_UCLK_PSTATE_FORCE_VALUE; \
-       type CURSOR_UCLK_PSTATE_FORCE_EN; \
-       type CURSOR_UCLK_PSTATE_FORCE_VALUE
-
-#define DCN401_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN32_HUBP_REG_FIELD_VARIABLE_LIST(type);\
-       type MALL_PREF_CMD_TYPE; \
-       type MALL_PREF_MODE; \
-       type HUBP0_3DLUT_FL_MODE; \
-       type HUBP0_3DLUT_FL_FORMAT; \
-       type HUBP0_3DLUT_FL_SCALE; \
-       type HUBP0_3DLUT_FL_BIAS; \
-       type HUBP_3DLUT_ENABLE;\
-       type HUBP_3DLUT_DONE;\
-       type HUBP_3DLUT_ADDRESSING_MODE;\
-       type HUBP_3DLUT_WIDTH;\
-       type HUBP_3DLUT_TMZ;\
-       type HUBP_3DLUT_CROSSBAR_SELECT_Y_G;\
-       type HUBP_3DLUT_CROSSBAR_SELECT_CB_B;\
-       type HUBP_3DLUT_CROSSBAR_SELECT_CR_R;\
-       type HUBP_3DLUT_ADDRESS_HIGH;\
-       type HUBP_3DLUT_ADDRESS_LOW;\
-       type REFCYC_PER_3DLUT_GROUP;\
-
-struct dcn_hubp2_registers {
-       DCN401_HUBP_REG_COMMON_VARIABLE_LIST;
-};
-
-struct dcn_hubp2_shift {
-       DCN401_HUBP_REG_FIELD_VARIABLE_LIST(uint8_t);
-};
-
-struct dcn_hubp2_mask {
-       DCN401_HUBP_REG_FIELD_VARIABLE_LIST(uint32_t);
-};
-
-struct dcn20_hubp {
-       struct hubp base;
-       struct dcn_hubp_state state;
-       const struct dcn_hubp2_registers *hubp_regs;
-       const struct dcn_hubp2_shift *hubp_shift;
-       const struct dcn_hubp2_mask *hubp_mask;
-};
-
-bool hubp2_construct(
-               struct dcn20_hubp *hubp2,
-               struct dc_context *ctx,
-               uint32_t inst,
-               const struct dcn_hubp2_registers *hubp_regs,
-               const struct dcn_hubp2_shift *hubp_shift,
-               const struct dcn_hubp2_mask *hubp_mask);
-
-void hubp2_setup_interdependent(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
-
-void hubp2_vready_at_or_After_vsync(struct hubp *hubp,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
-
-void hubp2_cursor_set_attributes(
-               struct hubp *hubp,
-               const struct dc_cursor_attributes *attr);
-
-void hubp2_set_vm_system_aperture_settings(struct hubp *hubp,
-               struct vm_system_aperture_param *apt);
-
-enum cursor_lines_per_chunk hubp2_get_lines_per_chunk(
-               unsigned int cursor_width,
-               enum dc_cursor_color_format cursor_mode);
-
-void hubp2_dmdata_set_attributes(
-               struct hubp *hubp,
-               const struct dc_dmdata_attributes *attr);
-
-void hubp2_dmdata_load(
-               struct hubp *hubp,
-               uint32_t dmdata_sw_size,
-               const uint32_t *dmdata_sw_data);
-
-bool hubp2_dmdata_status_done(struct hubp *hubp);
-
-void hubp2_enable_triplebuffer(
-               struct hubp *hubp,
-               bool enable);
-
-bool hubp2_is_triplebuffer_enabled(
-               struct hubp *hubp);
-
-void hubp2_set_flip_control_surface_gsl(struct hubp *hubp, bool enable);
-
-void hubp2_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
-
-bool hubp2_program_surface_flip_and_addr(
-       struct hubp *hubp,
-       const struct dc_plane_address *address,
-       bool flip_immediate);
-
-void hubp2_dcc_control(struct hubp *hubp, bool enable,
-               enum hubp_ind_block_size independent_64b_blks);
-
-void hubp2_program_size(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       const struct plane_size *plane_size,
-       struct dc_plane_dcc_param *dcc);
-
-void hubp2_program_rotation(
-       struct hubp *hubp,
-       enum dc_rotation_angle rotation,
-       bool horizontal_mirror);
-
-void hubp2_program_pixel_format(
-       struct hubp *hubp,
-       enum surface_pixel_format format);
-
-void hubp2_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level);
-
-bool hubp2_is_flip_pending(struct hubp *hubp);
-
-void hubp2_set_blank(struct hubp *hubp, bool blank);
-void hubp2_set_blank_regs(struct hubp *hubp, bool blank);
-
-void hubp2_cursor_set_position(
-               struct hubp *hubp,
-               const struct dc_cursor_position *pos,
-               const struct dc_cursor_mi_param *param);
-
-void hubp2_clk_cntl(struct hubp *hubp, bool enable);
-
-void hubp2_vtg_sel(struct hubp *hubp, uint32_t otg_inst);
-
-void hubp2_clear_underflow(struct hubp *hubp);
-
-void hubp2_read_state_common(struct hubp *hubp);
-
-void hubp2_read_state(struct hubp *hubp);
-
-#endif /* __DC_MEM_INPUT_DCN20_H__ */
-
-
index 7b7acad..c9f4a5a 100644 (file)
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: MIT
 # Copyright Â© 2021-2024 Advanced Micro Devices, Inc. All rights reserved.
 
-DCN201 = dcn201_mpc.o dcn201_hubp.o dcn201_opp.o \
+DCN201 = dcn201_mpc.o dcn201_opp.o \
        dcn201_link_encoder.o
 
 AMD_DAL_DCN201 = $(addprefix $(AMDDALPATH)/dc/dcn201/,$(DCN201))
diff --git a/drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hubp.c
deleted file mode 100644 (file)
index cd2bfcc..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2012-17 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-#include "dcn201_hubp.h"
-
-#include "dm_services.h"
-#include "dce_calcs.h"
-#include "reg_helper.h"
-#include "basics/conversion.h"
-
-#define REG(reg)\
-       hubp201->hubp_regs->reg
-
-#define CTX \
-       hubp201->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp201->hubp_shift->field_name, hubp201->hubp_mask->field_name
-
-static void hubp201_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level)
-{
-       hubp1_dcc_control(hubp, dcc->enable, dcc->independent_64b_blks);
-       hubp1_program_tiling(hubp, tiling_info, format);
-       hubp1_program_size(hubp, format, plane_size, dcc);
-       hubp1_program_pixel_format(hubp, format);
-}
-
-static void hubp201_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       hubp1_program_deadline(hubp, dlg_attr, ttu_attr);
-}
-
-static void hubp201_program_requestor(struct hubp *hubp,
-                                     struct _vcs_dpi_display_rq_regs_st *rq_regs)
-{
-       struct dcn201_hubp *hubp201 = TO_DCN201_HUBP(hubp);
-
-       REG_UPDATE(HUBPRET_CONTROL,
-                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
-
-       REG_SET_4(DCN_EXPANSION_MODE, 0,
-                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
-                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
-                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
-                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
-
-       /* no need to program PTE */
-       REG_SET_5(DCHUBP_REQ_SIZE_CONFIG, 0,
-               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
-               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height);
-
-       REG_SET_5(DCHUBP_REQ_SIZE_CONFIG_C, 0,
-               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
-               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height);
-}
-
-static void hubp201_setup(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       /*
-        * otg is locked when this func is called. Register are double buffered.
-        * disable the requestors is not needed
-        */
-       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
-       hubp201_program_requestor(hubp, rq_regs);
-       hubp201_program_deadline(hubp, dlg_attr, ttu_attr);
-}
-
-static struct hubp_funcs dcn201_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp1_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp201_program_surface_config,
-       .hubp_is_flip_pending = hubp1_is_flip_pending,
-       .hubp_setup = hubp201_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .set_cursor_attributes  = hubp2_cursor_set_attributes,
-       .set_cursor_position    = hubp1_cursor_set_position,
-       .set_blank = hubp1_set_blank,
-       .dcc_control = hubp1_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .hubp_clk_cntl = hubp1_clk_cntl,
-       .hubp_vtg_sel = hubp1_vtg_sel,
-       .dmdata_set_attributes = hubp2_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp2_read_state,
-       .hubp_clear_underflow = hubp1_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp1_init,
-};
-
-bool dcn201_hubp_construct(
-       struct dcn201_hubp *hubp201,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn201_hubp_registers *hubp_regs,
-       const struct dcn201_hubp_shift *hubp_shift,
-       const struct dcn201_hubp_mask *hubp_mask)
-{
-       hubp201->base.funcs = &dcn201_hubp_funcs;
-       hubp201->base.ctx = ctx;
-       hubp201->hubp_regs = hubp_regs;
-       hubp201->hubp_shift = hubp_shift;
-       hubp201->hubp_mask = hubp_mask;
-       hubp201->base.inst = inst;
-       hubp201->base.opp_id = OPP_ID_INVALID;
-       hubp201->base.mpcc_id = 0xf;
-
-       return true;
-}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hubp.h
deleted file mode 100644 (file)
index a1e3384..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2012-17 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_MEM_INPUT_DCN201_H__
-#define __DC_MEM_INPUT_DCN201_H__
-
-#include "../dcn10/dcn10_hubp.h"
-#include "../dcn20/dcn20_hubp.h"
-
-#define TO_DCN201_HUBP(hubp)\
-       container_of(hubp, struct dcn201_hubp, base)
-
-#define HUBP_REG_LIST_DCN201(id)\
-       HUBP_REG_LIST_DCN(id),\
-       SRI(PREFETCH_SETTINGS, HUBPREQ, id),\
-       SRI(PREFETCH_SETTINGS_C, HUBPREQ, id),\
-       SRI(DCSURF_FLIP_CONTROL2, HUBPREQ, id), \
-       SRI(CURSOR_SETTINGS, HUBPREQ, id), \
-       SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR0_, id), \
-       SRI(CURSOR_SURFACE_ADDRESS, CURSOR0_, id), \
-       SRI(CURSOR_SIZE, CURSOR0_, id), \
-       SRI(CURSOR_CONTROL, CURSOR0_, id), \
-       SRI(CURSOR_POSITION, CURSOR0_, id), \
-       SRI(CURSOR_HOT_SPOT, CURSOR0_, id), \
-       SRI(CURSOR_DST_OFFSET, CURSOR0_, id), \
-       SRI(DMDATA_ADDRESS_HIGH, CURSOR0_, id), \
-       SRI(DMDATA_ADDRESS_LOW, CURSOR0_, id), \
-       SRI(DMDATA_CNTL, CURSOR0_, id), \
-       SRI(DMDATA_SW_CNTL, CURSOR0_, id), \
-       SRI(DMDATA_QOS_CNTL, CURSOR0_, id), \
-       SRI(DMDATA_SW_DATA, CURSOR0_, id), \
-       SRI(DMDATA_STATUS, CURSOR0_, id),\
-       SRI(FLIP_PARAMETERS_0, HUBPREQ, id),\
-       SRI(FLIP_PARAMETERS_2, HUBPREQ, id)
-
-#define HUBP_MASK_SH_LIST_DCN201(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN(mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh)
-
-#define DCN201_HUBP_REG_VARIABLE_LIST \
-       DCN2_HUBP_REG_COMMON_VARIABLE_LIST
-
-#define DCN201_HUBP_REG_FIELD_VARIABLE_LIST(type) \
-       DCN2_HUBP_REG_FIELD_VARIABLE_LIST(type)
-
-struct dcn201_hubp_registers {
-       DCN201_HUBP_REG_VARIABLE_LIST;
-};
-
-struct dcn201_hubp_shift {
-       DCN201_HUBP_REG_FIELD_VARIABLE_LIST(uint8_t);
-};
-
-struct dcn201_hubp_mask {
-       DCN201_HUBP_REG_FIELD_VARIABLE_LIST(uint32_t);
-};
-
-struct dcn201_hubp {
-       struct hubp base;
-       struct dcn_hubp_state state;
-       const struct dcn201_hubp_registers *hubp_regs;
-       const struct dcn201_hubp_shift *hubp_shift;
-       const struct dcn201_hubp_mask *hubp_mask;
-};
-
-bool dcn201_hubp_construct(
-       struct dcn201_hubp *hubp201,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn201_hubp_registers *hubp_regs,
-       const struct dcn201_hubp_shift *hubp_shift,
-       const struct dcn201_hubp_mask *hubp_mask);
-
-#endif /* __DC_HWSS_DCN20_H__ */
index 720f1a4..c215f3c 100644 (file)
@@ -1,8 +1,7 @@
 # SPDX-License-Identifier: MIT
 # Copyright Â© 2019-2024 Advanced Micro Devices, Inc. All rights reserved.
 
-DCN21 = dcn21_hubp.o \
-        dcn21_link_encoder.o
+DCN21 = dcn21_link_encoder.o
 
 AMD_DAL_DCN21 = $(addprefix $(AMDDALPATH)/dc/dcn21/,$(DCN21))
 
diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.c
deleted file mode 100644 (file)
index e13d69a..0000000
+++ /dev/null
@@ -1,860 +0,0 @@
-/*
-* Copyright 2018 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#include "dcn10/dcn10_hubp.h"
-#include "dcn21_hubp.h"
-
-#include "dm_services.h"
-#include "reg_helper.h"
-
-#include "dc_dmub_srv.h"
-
-#define DC_LOGGER \
-       ctx->logger
-#define DC_LOGGER_INIT(logger)
-
-#define REG(reg)\
-       hubp21->hubp_regs->reg
-
-#define CTX \
-       hubp21->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp21->hubp_shift->field_name, hubp21->hubp_mask->field_name
-
-/*
- * In DCN2.1, the non-double buffered version of the following 4 DLG registers are used in RTL.
- * As a result, if S/W updates any of these registers during a mode change,
- * the current frame before the mode change will use the new value right away
- * and can lead to generating incorrect request deadlines and incorrect TTU/QoS behavior.
- *
- * REFCYC_PER_VM_GROUP_FLIP[22:0]
- * REFCYC_PER_VM_GROUP_VBLANK[22:0]
- * REFCYC_PER_VM_REQ_FLIP[22:0]
- * REFCYC_PER_VM_REQ_VBLANK[22:0]
- *
- * REFCYC_PER_VM_*_FLIP affects the deadline of the VM requests generated
- * when flipping to a new surface
- *
- * REFCYC_PER_VM_*_VBLANK affects the deadline of the VM requests generated
- * during prefetch  period of a frame. The prefetch starts at a pre-determined
- * number of lines before the display active per frame
- *
- * DCN may underflow due to incorrectly programming these registers
- * during VM stage of prefetch/iflip. First lines of display active
- * or a sub-region of active using a new surface will be corrupted
- * until the VM data returns at flip/mode change transitions
- *
- * Work around:
- * workaround is always opt to use the more aggressive settings.
- * On any mode switch, if the new reg values are smaller than the current values,
- * then update the regs with the new values.
- *
- * Link to the ticket: http://ontrack-internal.amd.com/browse/DEDCN21-142
- *
- */
-void apply_DEDCN21_142_wa_for_hostvm_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-       uint32_t refcyc_per_vm_group_vblank;
-       uint32_t refcyc_per_vm_req_vblank;
-       uint32_t refcyc_per_vm_group_flip;
-       uint32_t refcyc_per_vm_req_flip;
-       const uint32_t uninitialized_hw_default = 0;
-
-       REG_GET(VBLANK_PARAMETERS_5,
-                       REFCYC_PER_VM_GROUP_VBLANK, &refcyc_per_vm_group_vblank);
-
-       if (refcyc_per_vm_group_vblank == uninitialized_hw_default ||
-                       refcyc_per_vm_group_vblank > dlg_attr->refcyc_per_vm_group_vblank)
-               REG_SET(VBLANK_PARAMETERS_5, 0,
-                               REFCYC_PER_VM_GROUP_VBLANK, dlg_attr->refcyc_per_vm_group_vblank);
-
-       REG_GET(VBLANK_PARAMETERS_6,
-                       REFCYC_PER_VM_REQ_VBLANK, &refcyc_per_vm_req_vblank);
-
-       if (refcyc_per_vm_req_vblank == uninitialized_hw_default ||
-                       refcyc_per_vm_req_vblank > dlg_attr->refcyc_per_vm_req_vblank)
-               REG_SET(VBLANK_PARAMETERS_6, 0,
-                               REFCYC_PER_VM_REQ_VBLANK, dlg_attr->refcyc_per_vm_req_vblank);
-
-       REG_GET(FLIP_PARAMETERS_3,
-                       REFCYC_PER_VM_GROUP_FLIP, &refcyc_per_vm_group_flip);
-
-       if (refcyc_per_vm_group_flip == uninitialized_hw_default ||
-                       refcyc_per_vm_group_flip > dlg_attr->refcyc_per_vm_group_flip)
-               REG_SET(FLIP_PARAMETERS_3, 0,
-                               REFCYC_PER_VM_GROUP_FLIP, dlg_attr->refcyc_per_vm_group_flip);
-
-       REG_GET(FLIP_PARAMETERS_4,
-                       REFCYC_PER_VM_REQ_FLIP, &refcyc_per_vm_req_flip);
-
-       if (refcyc_per_vm_req_flip == uninitialized_hw_default ||
-                       refcyc_per_vm_req_flip > dlg_attr->refcyc_per_vm_req_flip)
-               REG_SET(FLIP_PARAMETERS_4, 0,
-                                       REFCYC_PER_VM_REQ_FLIP, dlg_attr->refcyc_per_vm_req_flip);
-
-       REG_SET(FLIP_PARAMETERS_5, 0,
-                       REFCYC_PER_PTE_GROUP_FLIP_C, dlg_attr->refcyc_per_pte_group_flip_c);
-
-       REG_SET(FLIP_PARAMETERS_6, 0,
-                       REFCYC_PER_META_CHUNK_FLIP_C, dlg_attr->refcyc_per_meta_chunk_flip_c);
-}
-
-void hubp21_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       hubp2_program_deadline(hubp, dlg_attr, ttu_attr);
-
-       apply_DEDCN21_142_wa_for_hostvm_deadline(hubp, dlg_attr);
-}
-
-void hubp21_program_requestor(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-
-       REG_UPDATE(HUBPRET_CONTROL,
-                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
-       REG_SET_4(DCN_EXPANSION_MODE, 0,
-                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
-                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
-                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
-                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
-       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG, 0,
-               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, rq_regs->rq_regs_l.dpte_group_size,
-               VM_GROUP_SIZE, rq_regs->rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, rq_regs->rq_regs_l.pte_row_height_linear);
-       REG_SET_7(DCHUBP_REQ_SIZE_CONFIG_C, 0,
-               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.dpte_group_size,
-               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, rq_regs->rq_regs_c.pte_row_height_linear);
-}
-
-static void hubp21_setup(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       /* otg is locked when this func is called. Register are double buffered.
-        * disable the requestors is not needed
-        */
-
-       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
-       hubp21_program_requestor(hubp, rq_regs);
-       hubp21_program_deadline(hubp, dlg_attr, ttu_attr);
-
-}
-
-static void hubp21_set_viewport(
-       struct hubp *hubp,
-       const struct rect *viewport,
-       const struct rect *viewport_c)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-
-       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION, 0,
-                 PRI_VIEWPORT_WIDTH, viewport->width,
-                 PRI_VIEWPORT_HEIGHT, viewport->height);
-
-       REG_SET_2(DCSURF_PRI_VIEWPORT_START, 0,
-                 PRI_VIEWPORT_X_START, viewport->x,
-                 PRI_VIEWPORT_Y_START, viewport->y);
-
-       /*for stereo*/
-       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION, 0,
-                 SEC_VIEWPORT_WIDTH, viewport->width,
-                 SEC_VIEWPORT_HEIGHT, viewport->height);
-
-       REG_SET_2(DCSURF_SEC_VIEWPORT_START, 0,
-                 SEC_VIEWPORT_X_START, viewport->x,
-                 SEC_VIEWPORT_Y_START, viewport->y);
-
-       /* DC supports NV12 only at the moment */
-       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION_C, 0,
-                 PRI_VIEWPORT_WIDTH_C, viewport_c->width,
-                 PRI_VIEWPORT_HEIGHT_C, viewport_c->height);
-
-       REG_SET_2(DCSURF_PRI_VIEWPORT_START_C, 0,
-                 PRI_VIEWPORT_X_START_C, viewport_c->x,
-                 PRI_VIEWPORT_Y_START_C, viewport_c->y);
-
-       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION_C, 0,
-                 SEC_VIEWPORT_WIDTH_C, viewport_c->width,
-                 SEC_VIEWPORT_HEIGHT_C, viewport_c->height);
-
-       REG_SET_2(DCSURF_SEC_VIEWPORT_START_C, 0,
-                 SEC_VIEWPORT_X_START_C, viewport_c->x,
-                 SEC_VIEWPORT_Y_START_C, viewport_c->y);
-}
-
-static void hubp21_set_vm_system_aperture_settings(struct hubp *hubp,
-                                                  struct vm_system_aperture_param *apt)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
-
-       // The format of high/low are 48:18 of the 48 bit addr
-       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 18;
-       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 18;
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, 0,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, mc_vm_apt_low.quad_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, 0,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mc_vm_apt_high.quad_part);
-
-       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
-                       ENABLE_L1_TLB, 1,
-                       SYSTEM_ACCESS_MODE, 0x3);
-}
-
-static void hubp21_validate_dml_output(struct hubp *hubp,
-               struct dc_context *ctx,
-               struct _vcs_dpi_display_rq_regs_st *dml_rq_regs,
-               struct _vcs_dpi_display_dlg_regs_st *dml_dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *dml_ttu_attr)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-       struct _vcs_dpi_display_rq_regs_st rq_regs = {0};
-       struct _vcs_dpi_display_dlg_regs_st dlg_attr = {0};
-       struct _vcs_dpi_display_ttu_regs_st ttu_attr = {0};
-       DC_LOGGER_INIT(ctx->logger);
-       DC_LOG_DEBUG("DML Validation | Running Validation");
-
-       /* Requester - Per hubp */
-       REG_GET(HUBPRET_CONTROL,
-               DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs.plane1_base_address);
-       REG_GET_4(DCN_EXPANSION_MODE,
-               DRQ_EXPANSION_MODE, &rq_regs.drq_expansion_mode,
-               PRQ_EXPANSION_MODE, &rq_regs.prq_expansion_mode,
-               MRQ_EXPANSION_MODE, &rq_regs.mrq_expansion_mode,
-               CRQ_EXPANSION_MODE, &rq_regs.crq_expansion_mode);
-       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
-               CHUNK_SIZE, &rq_regs.rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, &rq_regs.rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, &rq_regs.rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, &rq_regs.rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, &rq_regs.rq_regs_l.dpte_group_size,
-               VM_GROUP_SIZE, &rq_regs.rq_regs_l.mpte_group_size,
-               SWATH_HEIGHT, &rq_regs.rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, &rq_regs.rq_regs_l.pte_row_height_linear);
-       REG_GET_7(DCHUBP_REQ_SIZE_CONFIG_C,
-               CHUNK_SIZE_C, &rq_regs.rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, &rq_regs.rq_regs_c.dpte_group_size,
-               SWATH_HEIGHT_C, &rq_regs.rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs.rq_regs_c.pte_row_height_linear);
-
-       if (rq_regs.plane1_base_address != dml_rq_regs->plane1_base_address)
-               DC_LOG_DEBUG("DML Validation | HUBPRET_CONTROL:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->plane1_base_address, rq_regs.plane1_base_address);
-       if (rq_regs.drq_expansion_mode != dml_rq_regs->drq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->drq_expansion_mode, rq_regs.drq_expansion_mode);
-       if (rq_regs.prq_expansion_mode != dml_rq_regs->prq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:MRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->prq_expansion_mode, rq_regs.prq_expansion_mode);
-       if (rq_regs.mrq_expansion_mode != dml_rq_regs->mrq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->mrq_expansion_mode, rq_regs.mrq_expansion_mode);
-       if (rq_regs.crq_expansion_mode != dml_rq_regs->crq_expansion_mode)
-               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:CRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->crq_expansion_mode, rq_regs.crq_expansion_mode);
-
-       if (rq_regs.rq_regs_l.chunk_size != dml_rq_regs->rq_regs_l.chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.chunk_size, rq_regs.rq_regs_l.chunk_size);
-       if (rq_regs.rq_regs_l.min_chunk_size != dml_rq_regs->rq_regs_l.min_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.min_chunk_size, rq_regs.rq_regs_l.min_chunk_size);
-       if (rq_regs.rq_regs_l.meta_chunk_size != dml_rq_regs->rq_regs_l.meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.meta_chunk_size, rq_regs.rq_regs_l.meta_chunk_size);
-       if (rq_regs.rq_regs_l.min_meta_chunk_size != dml_rq_regs->rq_regs_l.min_meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.min_meta_chunk_size, rq_regs.rq_regs_l.min_meta_chunk_size);
-       if (rq_regs.rq_regs_l.dpte_group_size != dml_rq_regs->rq_regs_l.dpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:DPTE_GROUP_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.dpte_group_size, rq_regs.rq_regs_l.dpte_group_size);
-       if (rq_regs.rq_regs_l.mpte_group_size != dml_rq_regs->rq_regs_l.mpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:VM_GROUP_SIZE - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.mpte_group_size, rq_regs.rq_regs_l.mpte_group_size);
-       if (rq_regs.rq_regs_l.swath_height != dml_rq_regs->rq_regs_l.swath_height)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:SWATH_HEIGHT - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.swath_height, rq_regs.rq_regs_l.swath_height);
-       if (rq_regs.rq_regs_l.pte_row_height_linear != dml_rq_regs->rq_regs_l.pte_row_height_linear)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:PTE_ROW_HEIGHT_LINEAR - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_l.pte_row_height_linear, rq_regs.rq_regs_l.pte_row_height_linear);
-
-       if (rq_regs.rq_regs_c.chunk_size != dml_rq_regs->rq_regs_c.chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.chunk_size, rq_regs.rq_regs_c.chunk_size);
-       if (rq_regs.rq_regs_c.min_chunk_size != dml_rq_regs->rq_regs_c.min_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.min_chunk_size, rq_regs.rq_regs_c.min_chunk_size);
-       if (rq_regs.rq_regs_c.meta_chunk_size != dml_rq_regs->rq_regs_c.meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.meta_chunk_size, rq_regs.rq_regs_c.meta_chunk_size);
-       if (rq_regs.rq_regs_c.min_meta_chunk_size != dml_rq_regs->rq_regs_c.min_meta_chunk_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.min_meta_chunk_size, rq_regs.rq_regs_c.min_meta_chunk_size);
-       if (rq_regs.rq_regs_c.dpte_group_size != dml_rq_regs->rq_regs_c.dpte_group_size)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:DPTE_GROUP_SIZE_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.dpte_group_size, rq_regs.rq_regs_c.dpte_group_size);
-       if (rq_regs.rq_regs_c.swath_height != dml_rq_regs->rq_regs_c.swath_height)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:SWATH_HEIGHT_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.swath_height, rq_regs.rq_regs_c.swath_height);
-       if (rq_regs.rq_regs_c.pte_row_height_linear != dml_rq_regs->rq_regs_c.pte_row_height_linear)
-               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:PTE_ROW_HEIGHT_LINEAR_C - Expected: %u  Actual: %u\n",
-                               dml_rq_regs->rq_regs_c.pte_row_height_linear, rq_regs.rq_regs_c.pte_row_height_linear);
-
-
-       /* DLG - Per hubp */
-       REG_GET_2(BLANK_OFFSET_0,
-               REFCYC_H_BLANK_END, &dlg_attr.refcyc_h_blank_end,
-               DLG_V_BLANK_END, &dlg_attr.dlg_vblank_end);
-       REG_GET(BLANK_OFFSET_1,
-               MIN_DST_Y_NEXT_START, &dlg_attr.min_dst_y_next_start);
-       REG_GET(DST_DIMENSIONS,
-               REFCYC_PER_HTOTAL, &dlg_attr.refcyc_per_htotal);
-       REG_GET_2(DST_AFTER_SCALER,
-               REFCYC_X_AFTER_SCALER, &dlg_attr.refcyc_x_after_scaler,
-               DST_Y_AFTER_SCALER, &dlg_attr.dst_y_after_scaler);
-       REG_GET(REF_FREQ_TO_PIX_FREQ,
-               REF_FREQ_TO_PIX_FREQ, &dlg_attr.ref_freq_to_pix_freq);
-
-       if (dlg_attr.refcyc_h_blank_end != dml_dlg_attr->refcyc_h_blank_end)
-               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:REFCYC_H_BLANK_END - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_h_blank_end, dlg_attr.refcyc_h_blank_end);
-       if (dlg_attr.dlg_vblank_end != dml_dlg_attr->dlg_vblank_end)
-               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:DLG_V_BLANK_END - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dlg_vblank_end, dlg_attr.dlg_vblank_end);
-       if (dlg_attr.min_dst_y_next_start != dml_dlg_attr->min_dst_y_next_start)
-               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_1:MIN_DST_Y_NEXT_START - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->min_dst_y_next_start, dlg_attr.min_dst_y_next_start);
-       if (dlg_attr.refcyc_per_htotal != dml_dlg_attr->refcyc_per_htotal)
-               DC_LOG_DEBUG("DML Validation | DST_DIMENSIONS:REFCYC_PER_HTOTAL - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_htotal, dlg_attr.refcyc_per_htotal);
-       if (dlg_attr.refcyc_x_after_scaler != dml_dlg_attr->refcyc_x_after_scaler)
-               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:REFCYC_X_AFTER_SCALER - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_x_after_scaler, dlg_attr.refcyc_x_after_scaler);
-       if (dlg_attr.dst_y_after_scaler != dml_dlg_attr->dst_y_after_scaler)
-               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:DST_Y_AFTER_SCALER - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_after_scaler, dlg_attr.dst_y_after_scaler);
-       if (dlg_attr.ref_freq_to_pix_freq != dml_dlg_attr->ref_freq_to_pix_freq)
-               DC_LOG_DEBUG("DML Validation | REF_FREQ_TO_PIX_FREQ:REF_FREQ_TO_PIX_FREQ - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->ref_freq_to_pix_freq, dlg_attr.ref_freq_to_pix_freq);
-
-       /* DLG - Per luma/chroma */
-       REG_GET(VBLANK_PARAMETERS_1,
-               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr.refcyc_per_pte_group_vblank_l);
-       if (REG(NOM_PARAMETERS_0))
-               REG_GET(NOM_PARAMETERS_0,
-                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr.dst_y_per_pte_row_nom_l);
-       if (REG(NOM_PARAMETERS_1))
-               REG_GET(NOM_PARAMETERS_1,
-                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr.refcyc_per_pte_group_nom_l);
-       REG_GET(NOM_PARAMETERS_4,
-               DST_Y_PER_META_ROW_NOM_L, &dlg_attr.dst_y_per_meta_row_nom_l);
-       REG_GET(NOM_PARAMETERS_5,
-               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr.refcyc_per_meta_chunk_nom_l);
-       REG_GET_2(PER_LINE_DELIVERY,
-               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr.refcyc_per_line_delivery_l,
-               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr.refcyc_per_line_delivery_c);
-       REG_GET_2(PER_LINE_DELIVERY_PRE,
-               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr.refcyc_per_line_delivery_pre_l,
-               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr.refcyc_per_line_delivery_pre_c);
-       REG_GET(VBLANK_PARAMETERS_2,
-               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr.refcyc_per_pte_group_vblank_c);
-       if (REG(NOM_PARAMETERS_2))
-               REG_GET(NOM_PARAMETERS_2,
-                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr.dst_y_per_pte_row_nom_c);
-       if (REG(NOM_PARAMETERS_3))
-               REG_GET(NOM_PARAMETERS_3,
-                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr.refcyc_per_pte_group_nom_c);
-       REG_GET(NOM_PARAMETERS_6,
-               DST_Y_PER_META_ROW_NOM_C, &dlg_attr.dst_y_per_meta_row_nom_c);
-       REG_GET(NOM_PARAMETERS_7,
-               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr.refcyc_per_meta_chunk_nom_c);
-       REG_GET(VBLANK_PARAMETERS_3,
-                       REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr.refcyc_per_meta_chunk_vblank_l);
-       REG_GET(VBLANK_PARAMETERS_4,
-                       REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr.refcyc_per_meta_chunk_vblank_c);
-
-       if (dlg_attr.refcyc_per_pte_group_vblank_l != dml_dlg_attr->refcyc_per_pte_group_vblank_l)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_1:REFCYC_PER_PTE_GROUP_VBLANK_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_vblank_l, dlg_attr.refcyc_per_pte_group_vblank_l);
-       if (dlg_attr.dst_y_per_pte_row_nom_l != dml_dlg_attr->dst_y_per_pte_row_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_0:DST_Y_PER_PTE_ROW_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_pte_row_nom_l, dlg_attr.dst_y_per_pte_row_nom_l);
-       if (dlg_attr.refcyc_per_pte_group_nom_l != dml_dlg_attr->refcyc_per_pte_group_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_1:REFCYC_PER_PTE_GROUP_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_nom_l, dlg_attr.refcyc_per_pte_group_nom_l);
-       if (dlg_attr.dst_y_per_meta_row_nom_l != dml_dlg_attr->dst_y_per_meta_row_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_4:DST_Y_PER_META_ROW_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_meta_row_nom_l, dlg_attr.dst_y_per_meta_row_nom_l);
-       if (dlg_attr.refcyc_per_meta_chunk_nom_l != dml_dlg_attr->refcyc_per_meta_chunk_nom_l)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_5:REFCYC_PER_META_CHUNK_NOM_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_nom_l, dlg_attr.refcyc_per_meta_chunk_nom_l);
-       if (dlg_attr.refcyc_per_line_delivery_l != dml_dlg_attr->refcyc_per_line_delivery_l)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_l, dlg_attr.refcyc_per_line_delivery_l);
-       if (dlg_attr.refcyc_per_line_delivery_c != dml_dlg_attr->refcyc_per_line_delivery_c)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_c, dlg_attr.refcyc_per_line_delivery_c);
-       if (dlg_attr.refcyc_per_pte_group_vblank_c != dml_dlg_attr->refcyc_per_pte_group_vblank_c)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_2:REFCYC_PER_PTE_GROUP_VBLANK_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_vblank_c, dlg_attr.refcyc_per_pte_group_vblank_c);
-       if (dlg_attr.dst_y_per_pte_row_nom_c != dml_dlg_attr->dst_y_per_pte_row_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_2:DST_Y_PER_PTE_ROW_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_pte_row_nom_c, dlg_attr.dst_y_per_pte_row_nom_c);
-       if (dlg_attr.refcyc_per_pte_group_nom_c != dml_dlg_attr->refcyc_per_pte_group_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_3:REFCYC_PER_PTE_GROUP_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_nom_c, dlg_attr.refcyc_per_pte_group_nom_c);
-       if (dlg_attr.dst_y_per_meta_row_nom_c != dml_dlg_attr->dst_y_per_meta_row_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_6:DST_Y_PER_META_ROW_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->dst_y_per_meta_row_nom_c, dlg_attr.dst_y_per_meta_row_nom_c);
-       if (dlg_attr.refcyc_per_meta_chunk_nom_c != dml_dlg_attr->refcyc_per_meta_chunk_nom_c)
-               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_7:REFCYC_PER_META_CHUNK_NOM_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_nom_c, dlg_attr.refcyc_per_meta_chunk_nom_c);
-       if (dlg_attr.refcyc_per_line_delivery_pre_l != dml_dlg_attr->refcyc_per_line_delivery_pre_l)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_pre_l, dlg_attr.refcyc_per_line_delivery_pre_l);
-       if (dlg_attr.refcyc_per_line_delivery_pre_c != dml_dlg_attr->refcyc_per_line_delivery_pre_c)
-               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_line_delivery_pre_c, dlg_attr.refcyc_per_line_delivery_pre_c);
-       if (dlg_attr.refcyc_per_meta_chunk_vblank_l != dml_dlg_attr->refcyc_per_meta_chunk_vblank_l)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_3:REFCYC_PER_META_CHUNK_VBLANK_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_l, dlg_attr.refcyc_per_meta_chunk_vblank_l);
-       if (dlg_attr.refcyc_per_meta_chunk_vblank_c != dml_dlg_attr->refcyc_per_meta_chunk_vblank_c)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_4:REFCYC_PER_META_CHUNK_VBLANK_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_c, dlg_attr.refcyc_per_meta_chunk_vblank_c);
-
-       /* TTU - per hubp */
-       REG_GET_2(DCN_TTU_QOS_WM,
-               QoS_LEVEL_LOW_WM, &ttu_attr.qos_level_low_wm,
-               QoS_LEVEL_HIGH_WM, &ttu_attr.qos_level_high_wm);
-
-       if (ttu_attr.qos_level_low_wm != dml_ttu_attr->qos_level_low_wm)
-               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_LOW_WM - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_low_wm, ttu_attr.qos_level_low_wm);
-       if (ttu_attr.qos_level_high_wm != dml_ttu_attr->qos_level_high_wm)
-               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_HIGH_WM - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_high_wm, ttu_attr.qos_level_high_wm);
-
-       /* TTU - per luma/chroma */
-       /* Assumed surf0 is luma and 1 is chroma */
-       REG_GET_3(DCN_SURF0_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_l,
-               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_l,
-               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_l);
-       REG_GET_3(DCN_SURF1_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_c,
-               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_c,
-               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_c);
-       REG_GET_3(DCN_CUR0_TTU_CNTL0,
-               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_cur0,
-               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_cur0,
-               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_cur0);
-       REG_GET(FLIP_PARAMETERS_1,
-               REFCYC_PER_PTE_GROUP_FLIP_L, &dlg_attr.refcyc_per_pte_group_flip_l);
-       REG_GET(DCN_CUR0_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur0);
-       REG_GET(DCN_CUR1_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur1);
-       REG_GET(DCN_SURF0_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_l);
-       REG_GET(DCN_SURF1_TTU_CNTL1,
-                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_c);
-
-       if (ttu_attr.refcyc_per_req_delivery_l != dml_ttu_attr->refcyc_per_req_delivery_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_l, ttu_attr.refcyc_per_req_delivery_l);
-       if (ttu_attr.qos_level_fixed_l != dml_ttu_attr->qos_level_fixed_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_fixed_l, ttu_attr.qos_level_fixed_l);
-       if (ttu_attr.qos_ramp_disable_l != dml_ttu_attr->qos_ramp_disable_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_ramp_disable_l, ttu_attr.qos_ramp_disable_l);
-       if (ttu_attr.refcyc_per_req_delivery_c != dml_ttu_attr->refcyc_per_req_delivery_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_c, ttu_attr.refcyc_per_req_delivery_c);
-       if (ttu_attr.qos_level_fixed_c != dml_ttu_attr->qos_level_fixed_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_fixed_c, ttu_attr.qos_level_fixed_c);
-       if (ttu_attr.qos_ramp_disable_c != dml_ttu_attr->qos_ramp_disable_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_ramp_disable_c, ttu_attr.qos_ramp_disable_c);
-       if (ttu_attr.refcyc_per_req_delivery_cur0 != dml_ttu_attr->refcyc_per_req_delivery_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_cur0, ttu_attr.refcyc_per_req_delivery_cur0);
-       if (ttu_attr.qos_level_fixed_cur0 != dml_ttu_attr->qos_level_fixed_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_level_fixed_cur0, ttu_attr.qos_level_fixed_cur0);
-       if (ttu_attr.qos_ramp_disable_cur0 != dml_ttu_attr->qos_ramp_disable_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->qos_ramp_disable_cur0, ttu_attr.qos_ramp_disable_cur0);
-       if (dlg_attr.refcyc_per_pte_group_flip_l != dml_dlg_attr->refcyc_per_pte_group_flip_l)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_1:REFCYC_PER_PTE_GROUP_FLIP_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_flip_l, dlg_attr.refcyc_per_pte_group_flip_l);
-       if (ttu_attr.refcyc_per_req_delivery_pre_cur0 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur0)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur0, ttu_attr.refcyc_per_req_delivery_pre_cur0);
-       if (ttu_attr.refcyc_per_req_delivery_pre_cur1 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur1)
-               DC_LOG_DEBUG("DML Validation | DCN_CUR1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur1, ttu_attr.refcyc_per_req_delivery_pre_cur1);
-       if (ttu_attr.refcyc_per_req_delivery_pre_l != dml_ttu_attr->refcyc_per_req_delivery_pre_l)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_l, ttu_attr.refcyc_per_req_delivery_pre_l);
-       if (ttu_attr.refcyc_per_req_delivery_pre_c != dml_ttu_attr->refcyc_per_req_delivery_pre_c)
-               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
-                               dml_ttu_attr->refcyc_per_req_delivery_pre_c, ttu_attr.refcyc_per_req_delivery_pre_c);
-
-       /* Host VM deadline regs */
-       REG_GET(VBLANK_PARAMETERS_5,
-               REFCYC_PER_VM_GROUP_VBLANK, &dlg_attr.refcyc_per_vm_group_vblank);
-       REG_GET(VBLANK_PARAMETERS_6,
-               REFCYC_PER_VM_REQ_VBLANK, &dlg_attr.refcyc_per_vm_req_vblank);
-       REG_GET(FLIP_PARAMETERS_3,
-               REFCYC_PER_VM_GROUP_FLIP, &dlg_attr.refcyc_per_vm_group_flip);
-       REG_GET(FLIP_PARAMETERS_4,
-               REFCYC_PER_VM_REQ_FLIP, &dlg_attr.refcyc_per_vm_req_flip);
-       REG_GET(FLIP_PARAMETERS_5,
-               REFCYC_PER_PTE_GROUP_FLIP_C, &dlg_attr.refcyc_per_pte_group_flip_c);
-       REG_GET(FLIP_PARAMETERS_6,
-               REFCYC_PER_META_CHUNK_FLIP_C, &dlg_attr.refcyc_per_meta_chunk_flip_c);
-       REG_GET(FLIP_PARAMETERS_2,
-               REFCYC_PER_META_CHUNK_FLIP_L, &dlg_attr.refcyc_per_meta_chunk_flip_l);
-
-       if (dlg_attr.refcyc_per_vm_group_vblank != dml_dlg_attr->refcyc_per_vm_group_vblank)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_5:REFCYC_PER_VM_GROUP_VBLANK - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_vm_group_vblank, dlg_attr.refcyc_per_vm_group_vblank);
-       if (dlg_attr.refcyc_per_vm_req_vblank != dml_dlg_attr->refcyc_per_vm_req_vblank)
-               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_6:REFCYC_PER_VM_REQ_VBLANK - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_vm_req_vblank, dlg_attr.refcyc_per_vm_req_vblank);
-       if (dlg_attr.refcyc_per_vm_group_flip != dml_dlg_attr->refcyc_per_vm_group_flip)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_3:REFCYC_PER_VM_GROUP_FLIP - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_vm_group_flip, dlg_attr.refcyc_per_vm_group_flip);
-       if (dlg_attr.refcyc_per_vm_req_flip != dml_dlg_attr->refcyc_per_vm_req_flip)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_4:REFCYC_PER_VM_REQ_FLIP - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_vm_req_flip, dlg_attr.refcyc_per_vm_req_flip);
-       if (dlg_attr.refcyc_per_pte_group_flip_c != dml_dlg_attr->refcyc_per_pte_group_flip_c)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_5:REFCYC_PER_PTE_GROUP_FLIP_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_pte_group_flip_c, dlg_attr.refcyc_per_pte_group_flip_c);
-       if (dlg_attr.refcyc_per_meta_chunk_flip_c != dml_dlg_attr->refcyc_per_meta_chunk_flip_c)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_6:REFCYC_PER_META_CHUNK_FLIP_C - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_flip_c, dlg_attr.refcyc_per_meta_chunk_flip_c);
-       if (dlg_attr.refcyc_per_meta_chunk_flip_l != dml_dlg_attr->refcyc_per_meta_chunk_flip_l)
-               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_2:REFCYC_PER_META_CHUNK_FLIP_L - Expected: %u  Actual: %u\n",
-                               dml_dlg_attr->refcyc_per_meta_chunk_flip_l, dlg_attr.refcyc_per_meta_chunk_flip_l);
-}
-
-static void program_surface_flip_and_addr(struct hubp *hubp, struct surface_flip_registers *flip_regs)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-
-       REG_UPDATE_3(DCSURF_FLIP_CONTROL,
-                                       SURFACE_FLIP_TYPE, flip_regs->immediate,
-                                       SURFACE_FLIP_MODE_FOR_STEREOSYNC, flip_regs->grph_stereo,
-                                       SURFACE_FLIP_IN_STEREOSYNC, flip_regs->grph_stereo);
-
-       REG_UPDATE(VMID_SETTINGS_0,
-                               VMID, flip_regs->vmid);
-
-       REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
-                       PRIMARY_SURFACE_TMZ, flip_regs->tmz_surface,
-                       PRIMARY_SURFACE_TMZ_C, flip_regs->tmz_surface,
-                       PRIMARY_META_SURFACE_TMZ, flip_regs->tmz_surface,
-                       PRIMARY_META_SURFACE_TMZ_C, flip_regs->tmz_surface,
-                       SECONDARY_SURFACE_TMZ, flip_regs->tmz_surface,
-                       SECONDARY_SURFACE_TMZ_C, flip_regs->tmz_surface,
-                       SECONDARY_META_SURFACE_TMZ, flip_regs->tmz_surface,
-                       SECONDARY_META_SURFACE_TMZ_C, flip_regs->tmz_surface);
-
-       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
-                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C);
-
-       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
-                       PRIMARY_META_SURFACE_ADDRESS_C,
-                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS_C);
-
-       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH);
-
-       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                       PRIMARY_META_SURFACE_ADDRESS,
-                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS);
-
-       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
-                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
-                       flip_regs->DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH);
-
-       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
-                       SECONDARY_META_SURFACE_ADDRESS,
-                       flip_regs->DCSURF_SECONDARY_META_SURFACE_ADDRESS);
-
-
-       REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
-                       SECONDARY_SURFACE_ADDRESS_HIGH,
-                       flip_regs->DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH);
-
-       REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
-                       SECONDARY_SURFACE_ADDRESS,
-                       flip_regs->DCSURF_SECONDARY_SURFACE_ADDRESS);
-
-
-       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
-                       PRIMARY_SURFACE_ADDRESS_HIGH_C,
-                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C);
-
-       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
-                       PRIMARY_SURFACE_ADDRESS_C,
-                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_C);
-
-       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                       PRIMARY_SURFACE_ADDRESS_HIGH,
-                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH);
-
-       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                       PRIMARY_SURFACE_ADDRESS,
-                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS);
-}
-
-static void dmcub_PLAT_54186_wa(struct hubp *hubp,
-                               struct surface_flip_registers *flip_regs)
-{
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-       union dmub_rb_cmd cmd;
-
-       memset(&cmd, 0, sizeof(cmd));
-
-       cmd.PLAT_54186_wa.header.type = DMUB_CMD__PLAT_54186_WA;
-       cmd.PLAT_54186_wa.header.payload_bytes = sizeof(cmd.PLAT_54186_wa.flip);
-       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS =
-               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS;
-       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS_C =
-               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_C;
-       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
-               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH;
-       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C =
-               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C;
-       cmd.PLAT_54186_wa.flip.flip_params.grph_stereo = flip_regs->grph_stereo;
-       cmd.PLAT_54186_wa.flip.flip_params.hubp_inst = hubp->inst;
-       cmd.PLAT_54186_wa.flip.flip_params.immediate = flip_regs->immediate;
-       cmd.PLAT_54186_wa.flip.flip_params.tmz_surface = flip_regs->tmz_surface;
-       cmd.PLAT_54186_wa.flip.flip_params.vmid = flip_regs->vmid;
-
-       PERF_TRACE();  // TODO: remove after performance is stable.
-       dc_wake_and_execute_dmub_cmd(hubp->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
-       PERF_TRACE();  // TODO: remove after performance is stable.
-}
-
-static bool hubp21_program_surface_flip_and_addr(
-               struct hubp *hubp,
-               const struct dc_plane_address *address,
-               bool flip_immediate)
-{
-       struct surface_flip_registers flip_regs = { 0 };
-
-       flip_regs.vmid = address->vmid;
-
-       switch (address->type) {
-       case PLN_ADDR_TYPE_GRAPHICS:
-               if (address->grph.addr.quad_part == 0) {
-                       BREAK_TO_DEBUGGER();
-                       break;
-               }
-
-               if (address->grph.meta_addr.quad_part != 0) {
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS =
-                                       address->grph.meta_addr.low_part;
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH =
-                                       address->grph.meta_addr.high_part;
-               }
-
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS =
-                               address->grph.addr.low_part;
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
-                               address->grph.addr.high_part;
-               break;
-       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
-               if (address->video_progressive.luma_addr.quad_part == 0
-                               || address->video_progressive.chroma_addr.quad_part == 0)
-                       break;
-
-               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS =
-                                       address->video_progressive.luma_meta_addr.low_part;
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH =
-                                       address->video_progressive.luma_meta_addr.high_part;
-
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_C =
-                                       address->video_progressive.chroma_meta_addr.low_part;
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C =
-                                       address->video_progressive.chroma_meta_addr.high_part;
-               }
-
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS =
-                               address->video_progressive.luma_addr.low_part;
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
-                               address->video_progressive.luma_addr.high_part;
-
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_C =
-                               address->video_progressive.chroma_addr.low_part;
-
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C =
-                               address->video_progressive.chroma_addr.high_part;
-
-               break;
-       case PLN_ADDR_TYPE_GRPH_STEREO:
-               if (address->grph_stereo.left_addr.quad_part == 0)
-                       break;
-               if (address->grph_stereo.right_addr.quad_part == 0)
-                       break;
-
-               flip_regs.grph_stereo = true;
-
-               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
-                       flip_regs.DCSURF_SECONDARY_META_SURFACE_ADDRESS =
-                                       address->grph_stereo.right_meta_addr.low_part;
-                       flip_regs.DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH =
-                                       address->grph_stereo.right_meta_addr.high_part;
-               }
-
-               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS =
-                                       address->grph_stereo.left_meta_addr.low_part;
-                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH =
-                                       address->grph_stereo.left_meta_addr.high_part;
-               }
-
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS =
-                               address->grph_stereo.left_addr.low_part;
-               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
-                               address->grph_stereo.left_addr.high_part;
-
-               flip_regs.DCSURF_SECONDARY_SURFACE_ADDRESS =
-                               address->grph_stereo.right_addr.low_part;
-               flip_regs.DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH =
-                               address->grph_stereo.right_addr.high_part;
-
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       flip_regs.tmz_surface = address->tmz_surface;
-       flip_regs.immediate = flip_immediate;
-
-       if (hubp->ctx->dc->debug.enable_dmcub_surface_flip && address->type == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
-               dmcub_PLAT_54186_wa(hubp, &flip_regs);
-       else
-               program_surface_flip_and_addr(hubp, &flip_regs);
-
-       hubp->request_address = *address;
-
-       return true;
-}
-
-static void hubp21_init(struct hubp *hubp)
-{
-       // DEDCN21-133: Inconsistent row starting line for flip between DPTE and Meta
-       // This is a chicken bit to enable the ECO fix.
-
-       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
-       //hubp[i].HUBPREQ_DEBUG.HUBPREQ_DEBUG[26] = 1;
-       REG_WRITE(HUBPREQ_DEBUG, 1 << 26);
-}
-static struct hubp_funcs dcn21_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp21_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp1_program_surface_config,
-       .hubp_is_flip_pending = hubp1_is_flip_pending,
-       .hubp_setup = hubp21_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp21_set_vm_system_aperture_settings,
-       .set_blank = hubp1_set_blank,
-       .dcc_control = hubp1_dcc_control,
-       .mem_program_viewport = hubp21_set_viewport,
-       .set_cursor_attributes  = hubp2_cursor_set_attributes,
-       .set_cursor_position    = hubp1_cursor_set_position,
-       .hubp_clk_cntl = hubp1_clk_cntl,
-       .hubp_vtg_sel = hubp1_vtg_sel,
-       .dmdata_set_attributes = hubp2_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp2_read_state,
-       .hubp_clear_underflow = hubp1_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp21_init,
-       .validate_dml_output = hubp21_validate_dml_output,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-};
-
-bool hubp21_construct(
-       struct dcn21_hubp *hubp21,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask)
-{
-       hubp21->base.funcs = &dcn21_hubp_funcs;
-       hubp21->base.ctx = ctx;
-       hubp21->hubp_regs = hubp_regs;
-       hubp21->hubp_shift = hubp_shift;
-       hubp21->hubp_mask = hubp_mask;
-       hubp21->base.inst = inst;
-       hubp21->base.opp_id = OPP_ID_INVALID;
-       hubp21->base.mpcc_id = 0xf;
-
-       return true;
-}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubp.h
deleted file mode 100644 (file)
index 9873b6c..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-* Copyright 2018 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef DAL_DC_DCN21_DCN21_HUBP_H_
-#define DAL_DC_DCN21_DCN21_HUBP_H_
-
-#include "../dcn20/dcn20_hubp.h"
-#include "../dcn10/dcn10_hubp.h"
-
-#define TO_DCN21_HUBP(hubp)\
-       container_of(hubp, struct dcn21_hubp, base)
-
-#define HUBP_REG_LIST_DCN21(id)\
-       HUBP_REG_LIST_DCN2_COMMON(id),\
-       SRI(FLIP_PARAMETERS_3, HUBPREQ, id),\
-       SRI(FLIP_PARAMETERS_4, HUBPREQ, id),\
-       SRI(FLIP_PARAMETERS_5, HUBPREQ, id),\
-       SRI(FLIP_PARAMETERS_6, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_5, HUBPREQ, id),\
-       SRI(VBLANK_PARAMETERS_6, HUBPREQ, id)
-
-#define HUBP_MASK_SH_LIST_DCN21_COMMON(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh),\
-       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_3, REFCYC_PER_VM_GROUP_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_4, REFCYC_PER_VM_REQ_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_5, REFCYC_PER_PTE_GROUP_FLIP_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_6, REFCYC_PER_META_CHUNK_FLIP_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_5, REFCYC_PER_VM_GROUP_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_6, REFCYC_PER_VM_REQ_VBLANK, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, VM_GROUP_SIZE, mask_sh)
-
-#define HUBP_MASK_SH_LIST_DCN21(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN21_COMMON(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh)
-
-
-struct dcn21_hubp {
-       struct hubp base;
-       struct dcn_hubp_state state;
-       const struct dcn_hubp2_registers *hubp_regs;
-       const struct dcn_hubp2_shift *hubp_shift;
-       const struct dcn_hubp2_mask *hubp_mask;
-       int PLAT_54186_wa_chroma_addr_offset;
-};
-
-bool hubp21_construct(
-       struct dcn21_hubp *hubp21,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask);
-
-void apply_DEDCN21_142_wa_for_hostvm_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr);
-
-void hubp21_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
-
-void hubp21_program_requestor(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs);
-#endif /* DAL_DC_DCN21_DCN21_HUBP_H_ */
index fb74714..2131d22 100644 (file)
@@ -23,8 +23,7 @@
 #
 #
 
-DCN30 := dcn30_hubp.o \
-       dcn30_mpc.o dcn30_vpg.o \
+DCN30 := dcn30_mpc.o dcn30_vpg.o \
        dcn30_afmt.o \
        dcn30_dio_stream_encoder.o \
        dcn30_dwb.o \
diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c
deleted file mode 100644 (file)
index 60a64d2..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Copyright 2020 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#include "dcn30_hubp.h"
-
-#include "dm_services.h"
-#include "dce_calcs.h"
-#include "reg_helper.h"
-#include "basics/conversion.h"
-#include "dcn20/dcn20_hubp.h"
-#include "dcn21/dcn21_hubp.h"
-
-#define REG(reg)\
-       hubp2->hubp_regs->reg
-
-#define CTX \
-       hubp2->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
-
-void hubp3_set_vm_system_aperture_settings(struct hubp *hubp,
-               struct vm_system_aperture_param *apt)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
-       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
-
-       // The format of high/low are 48:18 of the 48 bit addr
-       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 18;
-       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 18;
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, 0,
-                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, mc_vm_apt_low.quad_part);
-
-       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, 0,
-                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mc_vm_apt_high.quad_part);
-
-       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
-                       ENABLE_L1_TLB, 1,
-                       SYSTEM_ACCESS_MODE, 0x3);
-}
-
-bool hubp3_program_surface_flip_and_addr(
-       struct hubp *hubp,
-       const struct dc_plane_address *address,
-       bool flip_immediate)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       //program flip type
-       REG_UPDATE(DCSURF_FLIP_CONTROL,
-                       SURFACE_FLIP_TYPE, flip_immediate);
-
-       // Program VMID reg
-       if (flip_immediate == 0)
-               REG_UPDATE(VMID_SETTINGS_0,
-                       VMID, address->vmid);
-
-       if (address->type == PLN_ADDR_TYPE_GRPH_STEREO) {
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0);
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x1);
-
-       } else {
-               // turn off stereo if not in stereo
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0x0);
-               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x0);
-       }
-
-       /* HW automatically latch rest of address register on write to
-        * DCSURF_PRIMARY_SURFACE_ADDRESS if SURFACE_UPDATE_LOCK is not used
-        *
-        * program high first and then the low addr, order matters!
-        */
-       switch (address->type) {
-       case PLN_ADDR_TYPE_GRAPHICS:
-               /* DCN1.0 does not support const color
-                * TODO: program DCHUBBUB_RET_PATH_DCC_CFGx_0/1
-                * base on address->grph.dcc_const_color
-                * x = 0, 2, 4, 6 for pipe 0, 1, 2, 3 for rgb and luma
-                * x = 1, 3, 5, 7 for pipe 0, 1, 2, 3 for chroma
-                */
-
-               if (address->grph.addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_2(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface);
-
-               if (address->grph.meta_addr.quad_part != 0) {
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph.meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->grph.meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->grph.addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->grph.addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
-               if (address->video_progressive.luma_addr.quad_part == 0
-                               || address->video_progressive.chroma_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
-                                       address->video_progressive.chroma_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_C,
-                                       address->video_progressive.chroma_meta_addr.low_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->video_progressive.luma_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->video_progressive.luma_meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
-                               address->video_progressive.chroma_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_C,
-                               address->video_progressive.chroma_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->video_progressive.luma_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->video_progressive.luma_addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_GRPH_STEREO:
-               if (address->grph_stereo.left_addr.quad_part == 0)
-                       break;
-               if (address->grph_stereo.right_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface,
-                               SECONDARY_SURFACE_TMZ, address->tmz_surface,
-                               SECONDARY_SURFACE_TMZ_C, address->tmz_surface,
-                               SECONDARY_META_SURFACE_TMZ, address->tmz_surface,
-                               SECONDARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                               SECONDARY_META_SURFACE_ADDRESS_HIGH_C,
-                               address->grph_stereo.right_alpha_meta_addr.high_part);
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, 0,
-                               SECONDARY_META_SURFACE_ADDRESS_C,
-                               address->grph_stereo.right_alpha_meta_addr.low_part);
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph_stereo.right_meta_addr.high_part);
-
-                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
-                                       SECONDARY_META_SURFACE_ADDRESS,
-                                       address->grph_stereo.right_meta_addr.low_part);
-               }
-               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                               PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
-                               address->grph_stereo.left_alpha_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
-                               PRIMARY_META_SURFACE_ADDRESS_C,
-                               address->grph_stereo.left_alpha_meta_addr.low_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->grph_stereo.left_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->grph_stereo.left_meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, 0,
-                               SECONDARY_SURFACE_ADDRESS_HIGH_C,
-                               address->grph_stereo.right_alpha_addr.high_part);
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_C, 0,
-                               SECONDARY_SURFACE_ADDRESS_C,
-                               address->grph_stereo.right_alpha_addr.low_part);
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
-                               SECONDARY_SURFACE_ADDRESS_HIGH,
-                               address->grph_stereo.right_addr.high_part);
-
-               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
-                               SECONDARY_SURFACE_ADDRESS,
-                               address->grph_stereo.right_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
-                               address->grph_stereo.left_alpha_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_C,
-                               address->grph_stereo.left_alpha_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->grph_stereo.left_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->grph_stereo.left_addr.low_part);
-               break;
-       case PLN_ADDR_TYPE_RGBEA:
-               if (address->rgbea.addr.quad_part == 0
-                               || address->rgbea.alpha_addr.quad_part == 0)
-                       break;
-
-               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
-                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
-
-               if (address->rgbea.meta_addr.quad_part != 0) {
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
-                                       address->rgbea.alpha_meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_C,
-                                       address->rgbea.alpha_meta_addr.low_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
-                                       address->rgbea.meta_addr.high_part);
-
-                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
-                                       PRIMARY_META_SURFACE_ADDRESS,
-                                       address->rgbea.meta_addr.low_part);
-               }
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
-                               address->rgbea.alpha_addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
-                               PRIMARY_SURFACE_ADDRESS_C,
-                               address->rgbea.alpha_addr.low_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
-                               PRIMARY_SURFACE_ADDRESS_HIGH,
-                               address->rgbea.addr.high_part);
-
-               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
-                               PRIMARY_SURFACE_ADDRESS,
-                               address->rgbea.addr.low_part);
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       hubp->request_address = *address;
-
-       return true;
-}
-
-void hubp3_program_tiling(
-       struct dcn20_hubp *hubp2,
-       const union dc_tiling_info *info,
-       const enum surface_pixel_format pixel_format)
-{
-       REG_UPDATE_4(DCSURF_ADDR_CONFIG,
-               NUM_PIPES, log_2(info->gfx9.num_pipes),
-               PIPE_INTERLEAVE, info->gfx9.pipe_interleave,
-               MAX_COMPRESSED_FRAGS, log_2(info->gfx9.max_compressed_frags),
-               NUM_PKRS, log_2(info->gfx9.num_pkrs));
-
-       REG_UPDATE_3(DCSURF_TILING_CONFIG,
-                       SW_MODE, info->gfx9.swizzle,
-                       META_LINEAR, info->gfx9.meta_linear,
-                       PIPE_ALIGNED, info->gfx9.pipe_aligned);
-
-}
-
-void hubp3_dcc_control(struct hubp *hubp, bool enable,
-               enum hubp_ind_block_size blk_size)
-{
-       uint32_t dcc_en = enable ? 1 : 0;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
-                       PRIMARY_SURFACE_DCC_EN, dcc_en,
-                       PRIMARY_SURFACE_DCC_IND_BLK, blk_size,
-                       SECONDARY_SURFACE_DCC_EN, dcc_en,
-                       SECONDARY_SURFACE_DCC_IND_BLK, blk_size);
-}
-
-void hubp3_dcc_control_sienna_cichlid(struct hubp *hubp,
-               struct dc_plane_dcc_param *dcc)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE_6(DCSURF_SURFACE_CONTROL,
-               PRIMARY_SURFACE_DCC_EN, dcc->enable,
-               PRIMARY_SURFACE_DCC_IND_BLK, dcc->dcc_ind_blk,
-               PRIMARY_SURFACE_DCC_IND_BLK_C, dcc->dcc_ind_blk_c,
-               SECONDARY_SURFACE_DCC_EN, dcc->enable,
-               SECONDARY_SURFACE_DCC_IND_BLK, dcc->dcc_ind_blk,
-               SECONDARY_SURFACE_DCC_IND_BLK_C, dcc->dcc_ind_blk_c);
-}
-
-void hubp3_dmdata_set_attributes(
-               struct hubp *hubp,
-               const struct dc_dmdata_attributes *attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       /*always HW mode */
-       REG_UPDATE(DMDATA_CNTL,
-                       DMDATA_MODE, 1);
-
-       /* for DMDATA flip, need to use SURFACE_UPDATE_LOCK */
-       REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 1);
-
-       /* toggle DMDATA_UPDATED and set repeat and size */
-       REG_UPDATE(DMDATA_CNTL,
-                       DMDATA_UPDATED, 0);
-       REG_UPDATE_3(DMDATA_CNTL,
-                       DMDATA_UPDATED, 1,
-                       DMDATA_REPEAT, attr->dmdata_repeat,
-                       DMDATA_SIZE, attr->dmdata_size);
-
-       /* set DMDATA address */
-       REG_WRITE(DMDATA_ADDRESS_LOW, attr->address.low_part);
-       REG_UPDATE(DMDATA_ADDRESS_HIGH,
-                       DMDATA_ADDRESS_HIGH, attr->address.high_part);
-
-       REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 0);
-
-}
-
-
-void hubp3_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       hubp3_dcc_control_sienna_cichlid(hubp, dcc);
-       hubp3_program_tiling(hubp2, tiling_info, format);
-       hubp2_program_size(hubp, format, plane_size, dcc);
-       hubp2_program_rotation(hubp, rotation, horizontal_mirror);
-       hubp2_program_pixel_format(hubp, format);
-}
-
-static void hubp3_program_deadline(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       hubp2_program_deadline(hubp, dlg_attr, ttu_attr);
-       REG_UPDATE(DCN_DMDATA_VM_CNTL,
-                       REFCYC_PER_VM_DMDATA, dlg_attr->refcyc_per_vm_dmdata);
-}
-
-void hubp3_read_state(struct hubp *hubp)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       struct dcn_hubp_state *s = &hubp2->state;
-       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
-
-       hubp2_read_state_common(hubp);
-
-       REG_GET_7(DCHUBP_REQ_SIZE_CONFIG,
-               CHUNK_SIZE, &rq_regs->rq_regs_l.chunk_size,
-               MIN_CHUNK_SIZE, &rq_regs->rq_regs_l.min_chunk_size,
-               META_CHUNK_SIZE, &rq_regs->rq_regs_l.meta_chunk_size,
-               MIN_META_CHUNK_SIZE, &rq_regs->rq_regs_l.min_meta_chunk_size,
-               DPTE_GROUP_SIZE, &rq_regs->rq_regs_l.dpte_group_size,
-               SWATH_HEIGHT, &rq_regs->rq_regs_l.swath_height,
-               PTE_ROW_HEIGHT_LINEAR, &rq_regs->rq_regs_l.pte_row_height_linear);
-
-       REG_GET_7(DCHUBP_REQ_SIZE_CONFIG_C,
-               CHUNK_SIZE_C, &rq_regs->rq_regs_c.chunk_size,
-               MIN_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_chunk_size,
-               META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.meta_chunk_size,
-               MIN_META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_meta_chunk_size,
-               DPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.dpte_group_size,
-               SWATH_HEIGHT_C, &rq_regs->rq_regs_c.swath_height,
-               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs->rq_regs_c.pte_row_height_linear);
-
-       if (REG(UCLK_PSTATE_FORCE))
-               s->uclk_pstate_force = REG_READ(UCLK_PSTATE_FORCE);
-
-       if (REG(DCHUBP_CNTL))
-               s->hubp_cntl = REG_READ(DCHUBP_CNTL);
-
-       if (REG(DCSURF_FLIP_CONTROL))
-               s->flip_control = REG_READ(DCSURF_FLIP_CONTROL);
-
-}
-
-void hubp3_setup(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
-{
-       /* otg is locked when this func is called. Register are double buffered.
-        * disable the requestors is not needed
-        */
-       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
-       hubp21_program_requestor(hubp, rq_regs);
-       hubp3_program_deadline(hubp, dlg_attr, ttu_attr);
-}
-
-void hubp3_init(struct hubp *hubp)
-{
-       // DEDCN21-133: Inconsistent row starting line for flip between DPTE and Meta
-       // This is a chicken bit to enable the ECO fix.
-
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       //hubp[i].HUBPREQ_DEBUG.HUBPREQ_DEBUG[26] = 1;
-       REG_WRITE(HUBPREQ_DEBUG, 1 << 26);
-}
-
-static struct hubp_funcs dcn30_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp3_program_surface_config,
-       .hubp_is_flip_pending = hubp2_is_flip_pending,
-       .hubp_setup = hubp3_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
-       .set_blank = hubp2_set_blank,
-       .set_blank_regs = hubp2_set_blank_regs,
-       .dcc_control = hubp3_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .set_cursor_attributes  = hubp2_cursor_set_attributes,
-       .set_cursor_position    = hubp2_cursor_set_position,
-       .hubp_clk_cntl = hubp2_clk_cntl,
-       .hubp_vtg_sel = hubp2_vtg_sel,
-       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp3_read_state,
-       .hubp_clear_underflow = hubp2_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp3_init,
-       .hubp_in_blank = hubp1_in_blank,
-       .hubp_soft_reset = hubp1_soft_reset,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-};
-
-bool hubp3_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask)
-{
-       hubp2->base.funcs = &dcn30_hubp_funcs;
-       hubp2->base.ctx = ctx;
-       hubp2->hubp_regs = hubp_regs;
-       hubp2->hubp_shift = hubp_shift;
-       hubp2->hubp_mask = hubp_mask;
-       hubp2->base.inst = inst;
-       hubp2->base.opp_id = OPP_ID_INVALID;
-       hubp2->base.mpcc_id = 0xf;
-
-       return true;
-}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.h
deleted file mode 100644 (file)
index b010531..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright 2020 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_HUBP_DCN30_H__
-#define __DC_HUBP_DCN30_H__
-
-#include "dcn20/dcn20_hubp.h"
-#include "dcn21/dcn21_hubp.h"
-
-#define HUBP_REG_LIST_DCN30(id)\
-       HUBP_REG_LIST_DCN21(id),\
-       SRI(DCN_DMDATA_VM_CNTL, HUBPREQ, id)
-
-
-#define HUBP_MASK_SH_LIST_DCN30_BASE(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN21_COMMON(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ALPHA_PLANE_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, REFCYC_PER_VM_DMDATA, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS_CLEAR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_LATE_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS_CLEAR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_DONE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PKRS, mask_sh)
-
-
-#define HUBP_MASK_SH_LIST_DCN30(mask_sh)\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, REFCYC_PER_VM_DMDATA, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS_CLEAR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_LATE_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS_CLEAR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_DONE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_IN_BLANK, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PKRS, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_WIDTH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_X_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_Y_START_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, SECONDARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_C, SECONDARY_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, SECONDARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, SECONDARY_META_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_Y_G, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_ALPHA, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, PACK_3TO2_ELEMENT_DISABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, ROW_TTU_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
-       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh),\
-       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ALPHA_PLANE_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_3, REFCYC_PER_VM_GROUP_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_4, REFCYC_PER_VM_REQ_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_5, REFCYC_PER_PTE_GROUP_FLIP_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_6, REFCYC_PER_META_CHUNK_FLIP_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_5, REFCYC_PER_VM_GROUP_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_6, REFCYC_PER_VM_REQ_VBLANK, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, VM_GROUP_SIZE, mask_sh)
-
-bool hubp3_construct(
-               struct dcn20_hubp *hubp2,
-               struct dc_context *ctx,
-               uint32_t inst,
-               const struct dcn_hubp2_registers *hubp_regs,
-               const struct dcn_hubp2_shift *hubp_shift,
-               const struct dcn_hubp2_mask *hubp_mask);
-
-void hubp3_set_vm_system_aperture_settings(struct hubp *hubp,
-       struct vm_system_aperture_param *apt);
-
-bool hubp3_program_surface_flip_and_addr(
-       struct hubp *hubp,
-       const struct dc_plane_address *address,
-       bool flip_immediate);
-
-void hubp3_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level);
-
-void hubp3_setup(
-               struct hubp *hubp,
-               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
-               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
-               struct _vcs_dpi_display_rq_regs_st *rq_regs,
-               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
-
-void hubp3_program_tiling(
-               struct dcn20_hubp *hubp2,
-               const union dc_tiling_info *info,
-               const enum surface_pixel_format pixel_format);
-
-void hubp3_dcc_control(struct hubp *hubp, bool enable,
-               enum hubp_ind_block_size blk_size);
-
-void hubp3_dcc_control_sienna_cichlid(struct hubp *hubp,
-               struct dc_plane_dcc_param *dcc);
-
-void hubp3_dmdata_set_attributes(
-               struct hubp *hubp,
-               const struct dc_dmdata_attributes *attr);
-
-void hubp3_read_state(struct hubp *hubp);
-
-void hubp3_init(struct hubp *hubp);
-
-#endif /* __DC_HUBP_DCN30_H__ */
-
-
index 7daa2f0..62c8ab0 100644 (file)
@@ -10,8 +10,7 @@
 #
 # Makefile for dcn31.
 
-DCN31 = dcn31_hubp.o \
-       dcn31_dio_link_encoder.o dcn31_panel_cntl.o \
+DCN31 = dcn31_dio_link_encoder.o dcn31_panel_cntl.o \
        dcn31_apg.o dcn31_hpo_dp_stream_encoder.o dcn31_hpo_dp_link_encoder.o \
        dcn31_afmt.o dcn31_vpg.o
 
diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c
deleted file mode 100644 (file)
index 8394e8c..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2012-20 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#include "dm_services.h"
-#include "dce_calcs.h"
-#include "reg_helper.h"
-#include "basics/conversion.h"
-#include "dcn31_hubp.h"
-
-#define REG(reg)\
-       hubp2->hubp_regs->reg
-
-#define CTX \
-       hubp2->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
-
-void hubp31_set_unbounded_requesting(struct hubp *hubp, bool enable)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_UNBOUNDED_REQ_MODE, enable);
-       REG_UPDATE(CURSOR_CONTROL, CURSOR_REQ_MODE, enable);
-}
-
-void hubp31_soft_reset(struct hubp *hubp, bool reset)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(DCHUBP_CNTL, HUBP_SOFT_RESET, reset);
-}
-
-static void hubp31_program_extended_blank(struct hubp *hubp,
-                                         unsigned int min_dst_y_next_start_optimized)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, min_dst_y_next_start_optimized);
-}
-
-void hubp31_program_extended_blank_value(
-       struct hubp *hubp, unsigned int min_dst_y_next_start_optimized)
-{
-       hubp31_program_extended_blank(hubp, min_dst_y_next_start_optimized);
-}
-
-static struct hubp_funcs dcn31_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp3_program_surface_config,
-       .hubp_is_flip_pending = hubp2_is_flip_pending,
-       .hubp_setup = hubp3_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
-       .set_blank = hubp2_set_blank,
-       .dcc_control = hubp3_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .set_cursor_attributes  = hubp2_cursor_set_attributes,
-       .set_cursor_position    = hubp2_cursor_set_position,
-       .hubp_clk_cntl = hubp2_clk_cntl,
-       .hubp_vtg_sel = hubp2_vtg_sel,
-       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp3_read_state,
-       .hubp_clear_underflow = hubp2_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp3_init,
-       .set_unbounded_requesting = hubp31_set_unbounded_requesting,
-       .hubp_soft_reset = hubp31_soft_reset,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-       .hubp_in_blank = hubp1_in_blank,
-       .program_extended_blank = hubp31_program_extended_blank,
-};
-
-bool hubp31_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask)
-{
-       hubp2->base.funcs = &dcn31_hubp_funcs;
-       hubp2->base.ctx = ctx;
-       hubp2->hubp_regs = hubp_regs;
-       hubp2->hubp_shift = hubp_shift;
-       hubp2->hubp_mask = hubp_mask;
-       hubp2->base.inst = inst;
-       hubp2->base.opp_id = OPP_ID_INVALID;
-       hubp2->base.mpcc_id = 0xf;
-
-       return true;
-}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.h
deleted file mode 100644 (file)
index d688db7..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright 2012-20 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_HUBP_DCN31_H__
-#define __DC_HUBP_DCN31_H__
-
-#include "dcn20/dcn20_hubp.h"
-#include "dcn21/dcn21_hubp.h"
-#include "dcn30/dcn30_hubp.h"
-
-#define HUBP_MASK_SH_LIST_DCN31(mask_sh)\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, REFCYC_PER_VM_DMDATA, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS_CLEAR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_LATE_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS_CLEAR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_DONE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNBOUNDED_REQ_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_IN_BLANK, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_SOFT_RESET, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PKRS, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_WIDTH_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_X_START_C, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_Y_START_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, SECONDARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_C, SECONDARY_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, SECONDARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, SECONDARY_META_SURFACE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_Y_G, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_ALPHA, mask_sh),\
-       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, PACK_3TO2_ELEMENT_DISABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
-       HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
-       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, ROW_TTU_MODE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
-       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh),\
-       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
-       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ALPHA_PLANE_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
-       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
-       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_REQ_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
-       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
-       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
-       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_3, REFCYC_PER_VM_GROUP_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_4, REFCYC_PER_VM_REQ_FLIP, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_5, REFCYC_PER_PTE_GROUP_FLIP_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_6, REFCYC_PER_META_CHUNK_FLIP_C, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_5, REFCYC_PER_VM_GROUP_VBLANK, mask_sh),\
-       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_6, REFCYC_PER_VM_REQ_VBLANK, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, VM_GROUP_SIZE, mask_sh)
-
-
-bool hubp31_construct(
-               struct dcn20_hubp *hubp2,
-               struct dc_context *ctx,
-               uint32_t inst,
-               const struct dcn_hubp2_registers *hubp_regs,
-               const struct dcn_hubp2_shift *hubp_shift,
-               const struct dcn_hubp2_mask *hubp_mask);
-
-void hubp31_soft_reset(struct hubp *hubp, bool reset);
-
-void hubp31_set_unbounded_requesting(struct hubp *hubp, bool enable);
-
-void hubp31_program_extended_blank_value(
-       struct hubp *hubp, unsigned int min_dst_y_next_start_optimized);
-
-#endif /* __DC_HUBP_DCN31_H__ */
index dd3c4e7..2d0eb20 100644 (file)
@@ -10,7 +10,7 @@
 #
 # Makefile for dcn32.
 
-DCN32 = dcn32_mmhubbub.o dcn32_hubp.o dcn32_mpc.o \
+DCN32 = dcn32_mmhubbub.o dcn32_mpc.o \
                dcn32_dio_stream_encoder.o dcn32_dio_link_encoder.o dcn32_resource_helpers.o \
                dcn32_hpo_dp_link_encoder.o
 
diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hubp.c
deleted file mode 100644 (file)
index ca5b4b2..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright 2012-20 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#include "dm_services.h"
-#include "dce_calcs.h"
-#include "reg_helper.h"
-#include "basics/conversion.h"
-#include "dcn32_hubp.h"
-
-#define REG(reg)\
-       hubp2->hubp_regs->reg
-
-#define CTX \
-       hubp2->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name) \
-       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
-
-void hubp32_update_force_pstate_disallow(struct hubp *hubp, bool pstate_disallow)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       REG_UPDATE_2(UCLK_PSTATE_FORCE,
-                       DATA_UCLK_PSTATE_FORCE_EN, pstate_disallow,
-                       DATA_UCLK_PSTATE_FORCE_VALUE, 0);
-}
-
-void hubp32_update_force_cursor_pstate_disallow(struct hubp *hubp, bool pstate_disallow)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE_2(UCLK_PSTATE_FORCE,
-                       CURSOR_UCLK_PSTATE_FORCE_EN, pstate_disallow,
-                       CURSOR_UCLK_PSTATE_FORCE_VALUE, 0);
-}
-
-void hubp32_update_mall_sel(struct hubp *hubp, uint32_t mall_sel, bool c_cursor)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       // Also cache cursor in MALL if using MALL for SS
-       REG_UPDATE_2(DCHUBP_MALL_CONFIG, USE_MALL_SEL, mall_sel,
-                       USE_MALL_FOR_CURSOR, c_cursor);
-}
-
-void hubp32_prepare_subvp_buffering(struct hubp *hubp, bool enable)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       REG_UPDATE(DCHUBP_VMPG_CONFIG, FORCE_ONE_ROW_FOR_FRAME, enable);
-
-       /* Programming guide suggests CURSOR_REQ_MODE = 1 for SubVP:
-        * For Pstate change using the MALL with sub-viewport buffering,
-        * the cursor does not use the MALL (USE_MALL_FOR_CURSOR is ignored)
-        * and sub-viewport positioning by Display FW has to avoid the cursor
-        * requests to DRAM (set CURSOR_REQ_MODE = 1 to minimize this exclusion).
-        *
-        * CURSOR_REQ_MODE = 1 begins fetching cursor data at the beginning of display prefetch.
-        * Setting this should allow the sub-viewport position to always avoid the cursor because
-        * we do not allow the sub-viewport region to overlap with display prefetch (i.e. during blank).
-        */
-       REG_UPDATE(CURSOR_CONTROL, CURSOR_REQ_MODE, enable);
-}
-
-void hubp32_phantom_hubp_post_enable(struct hubp *hubp)
-{
-       uint32_t reg_val;
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       /* For phantom pipe enable, disable GSL */
-       REG_UPDATE(DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, 0);
-       REG_UPDATE(DCHUBP_CNTL, HUBP_BLANK_EN, 1);
-       reg_val = REG_READ(DCHUBP_CNTL);
-       if (reg_val) {
-               /* init sequence workaround: in case HUBP is
-                * power gated, this wait would timeout.
-                *
-                * we just wrote reg_val to non-0, if it stay 0
-                * it means HUBP is gated
-                */
-               REG_WAIT(DCHUBP_CNTL,
-                               HUBP_NO_OUTSTANDING_REQ, 1,
-                               1, 200);
-       }
-}
-
-void hubp32_cursor_set_attributes(
-               struct hubp *hubp,
-               const struct dc_cursor_attributes *attr)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       enum cursor_pitch hw_pitch = hubp1_get_cursor_pitch(attr->pitch);
-       enum cursor_lines_per_chunk lpc = hubp2_get_lines_per_chunk(
-                       attr->width, attr->color_format);
-
-       //Round cursor width up to next multiple of 64
-       uint32_t cursor_width = ((attr->width + 63) / 64) * 64;
-       uint32_t cursor_height = attr->height;
-       uint32_t cursor_size = cursor_width * cursor_height;
-
-       hubp->curs_attr = *attr;
-
-       REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
-                       CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
-       REG_UPDATE(CURSOR_SURFACE_ADDRESS,
-                       CURSOR_SURFACE_ADDRESS, attr->address.low_part);
-
-       REG_UPDATE_2(CURSOR_SIZE,
-                       CURSOR_WIDTH, attr->width,
-                       CURSOR_HEIGHT, attr->height);
-
-       REG_UPDATE_4(CURSOR_CONTROL,
-                       CURSOR_MODE, attr->color_format,
-                       CURSOR_2X_MAGNIFY, attr->attribute_flags.bits.ENABLE_MAGNIFICATION,
-                       CURSOR_PITCH, hw_pitch,
-                       CURSOR_LINES_PER_CHUNK, lpc);
-
-       REG_SET_2(CURSOR_SETTINGS, 0,
-                       /* no shift of the cursor HDL schedule */
-                       CURSOR0_DST_Y_OFFSET, 0,
-                        /* used to shift the cursor chunk request deadline */
-                       CURSOR0_CHUNK_HDL_ADJUST, 3);
-
-       switch (attr->color_format) {
-       case CURSOR_MODE_MONO:
-               cursor_size /= 2;
-               break;
-       case CURSOR_MODE_COLOR_1BIT_AND:
-       case CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA:
-       case CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA:
-               cursor_size *= 4;
-               break;
-
-       case CURSOR_MODE_COLOR_64BIT_FP_PRE_MULTIPLIED:
-       case CURSOR_MODE_COLOR_64BIT_FP_UN_PRE_MULTIPLIED:
-       default:
-               cursor_size *= 8;
-               break;
-       }
-
-       if (cursor_size > 16384)
-               REG_UPDATE(DCHUBP_MALL_CONFIG, USE_MALL_FOR_CURSOR, true);
-       else
-               REG_UPDATE(DCHUBP_MALL_CONFIG, USE_MALL_FOR_CURSOR, false);
-}
-void hubp32_init(struct hubp *hubp)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       REG_WRITE(HUBPREQ_DEBUG_DB, 1 << 8);
-}
-static struct hubp_funcs dcn32_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp3_program_surface_config,
-       .hubp_is_flip_pending = hubp2_is_flip_pending,
-       .hubp_setup = hubp3_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
-       .set_blank = hubp2_set_blank,
-       .set_blank_regs = hubp2_set_blank_regs,
-       .dcc_control = hubp3_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .set_cursor_attributes  = hubp32_cursor_set_attributes,
-       .set_cursor_position    = hubp2_cursor_set_position,
-       .hubp_clk_cntl = hubp2_clk_cntl,
-       .hubp_vtg_sel = hubp2_vtg_sel,
-       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp3_read_state,
-       .hubp_clear_underflow = hubp2_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp3_init,
-       .set_unbounded_requesting = hubp31_set_unbounded_requesting,
-       .hubp_soft_reset = hubp31_soft_reset,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-       .hubp_in_blank = hubp1_in_blank,
-       .hubp_update_force_pstate_disallow = hubp32_update_force_pstate_disallow,
-       .hubp_update_force_cursor_pstate_disallow = hubp32_update_force_cursor_pstate_disallow,
-       .phantom_hubp_post_enable = hubp32_phantom_hubp_post_enable,
-       .hubp_update_mall_sel = hubp32_update_mall_sel,
-       .hubp_prepare_subvp_buffering = hubp32_prepare_subvp_buffering
-};
-
-bool hubp32_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask)
-{
-       hubp2->base.funcs = &dcn32_hubp_funcs;
-       hubp2->base.ctx = ctx;
-       hubp2->hubp_regs = hubp_regs;
-       hubp2->hubp_shift = hubp_shift;
-       hubp2->hubp_mask = hubp_mask;
-       hubp2->base.inst = inst;
-       hubp2->base.opp_id = OPP_ID_INVALID;
-       hubp2->base.mpcc_id = 0xf;
-
-       return true;
-}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hubp.h
deleted file mode 100644 (file)
index d2acbc1..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2012-20 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_HUBP_DCN32_H__
-#define __DC_HUBP_DCN32_H__
-
-#include "dcn20/dcn20_hubp.h"
-#include "dcn21/dcn21_hubp.h"
-#include "dcn30/dcn30_hubp.h"
-#include "dcn31/dcn31_hubp.h"
-
-#define HUBP_MASK_SH_LIST_DCN32(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN31(mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_MALL_CONFIG, USE_MALL_SEL, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_MALL_CONFIG, USE_MALL_FOR_CURSOR, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, VMPG_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, PTE_BUFFER_MODE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, BIGK_FRAGMENT_SIZE, mask_sh),\
-       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, FORCE_ONE_ROW_FOR_FRAME, mask_sh),\
-       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, DATA_UCLK_PSTATE_FORCE_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, DATA_UCLK_PSTATE_FORCE_VALUE, mask_sh),\
-       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, CURSOR_UCLK_PSTATE_FORCE_EN, mask_sh),\
-       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, CURSOR_UCLK_PSTATE_FORCE_VALUE, mask_sh)
-
-void hubp32_update_force_pstate_disallow(struct hubp *hubp, bool pstate_disallow);
-
-void hubp32_update_force_cursor_pstate_disallow(struct hubp *hubp, bool pstate_disallow);
-
-void hubp32_update_mall_sel(struct hubp *hubp, uint32_t mall_sel, bool c_cursor);
-
-void hubp32_prepare_subvp_buffering(struct hubp *hubp, bool enable);
-
-void hubp32_phantom_hubp_post_enable(struct hubp *hubp);
-
-void hubp32_cursor_set_attributes(struct hubp *hubp,
-               const struct dc_cursor_attributes *attr);
-
-void hubp32_init(struct hubp *hubp);
-
-bool hubp32_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn_hubp2_shift *hubp_shift,
-       const struct dcn_hubp2_mask *hubp_mask);
-
-#endif /* __DC_HUBP_DCN32_H__ */
index eb70d5f..d0fab60 100644 (file)
@@ -12,7 +12,6 @@
 
 DCN35 = dcn35_dio_stream_encoder.o \
        dcn35_dio_link_encoder.o \
-       dcn35_hubp.o \
        dcn35_mmhubbub.o dcn35_opp.o dcn35_pg_cntl.o dcn35_dwb.o
 
 AMD_DAL_DCN35 = $(addprefix $(AMDDALPATH)/dc/dcn35/,$(DCN35))
diff --git a/drivers/gpu/drm/amd/display/dc/dcn35/dcn35_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn35/dcn35_hubp.c
deleted file mode 100644 (file)
index 771fcd0..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * Copyright 2023 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#include "dcn35_hubp.h"
-#include "reg_helper.h"
-
-#define REG(reg)\
-       hubp2->hubp_regs->reg
-
-#define CTX \
-       hubp2->base.ctx
-
-#undef FN
-#define FN(reg_name, field_name)                                           \
-       ((const struct dcn35_hubp2_shift *)hubp2->hubp_shift)->field_name, \
-               ((const struct dcn35_hubp2_mask *)hubp2->hubp_mask)->field_name
-
-void hubp35_set_fgcg(struct hubp *hubp, bool enable)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       REG_UPDATE(HUBP_CLK_CNTL, HUBP_FGCG_REP_DIS, !enable);
-}
-
-static void hubp35_init(struct hubp *hubp)
-{
-       hubp3_init(hubp);
-
-       hubp35_set_fgcg(hubp, hubp->ctx->dc->debug.enable_fine_grain_clock_gating.bits.dchub);
-
-       /*do nothing for now for dcn3.5 or later*/
-}
-
-void hubp35_program_pixel_format(
-       struct hubp *hubp,
-       enum surface_pixel_format format)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       uint32_t green_bar = 1;
-       uint32_t red_bar = 3;
-       uint32_t blue_bar = 2;
-
-       /* swap for ABGR format */
-       if (format == SURFACE_PIXEL_FORMAT_GRPH_ABGR8888
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616
-                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F) {
-               red_bar = 2;
-               blue_bar = 3;
-       }
-
-       REG_UPDATE_3(HUBPRET_CONTROL,
-                       CROSSBAR_SRC_Y_G, green_bar,
-                       CROSSBAR_SRC_CB_B, blue_bar,
-                       CROSSBAR_SRC_CR_R, red_bar);
-
-       /* Mapping is same as ipp programming (cnvc) */
-
-       switch (format) {
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 1);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 3);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 8);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB2101010:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 10);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616: /* we use crossbar already */
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 26); /* ARGB16161616_UNORM */
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F:
-       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F:/*we use crossbar already*/
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 24);
-               break;
-
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 65);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 64);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCbCr:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 67);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCrCb:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 66);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_AYCrCb8888:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 12);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FIX:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 112);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FIX:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 113);
-               break;
-       case SURFACE_PIXEL_FORMAT_VIDEO_ACrYCb2101010:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 114);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FLOAT:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 118);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FLOAT:
-               REG_UPDATE(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 119);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGBE:
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 116,
-                               ALPHA_PLANE_EN, 0);
-               break;
-       case SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA:
-               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
-                               SURFACE_PIXEL_FORMAT, 116,
-                               ALPHA_PLANE_EN, 1);
-               break;
-       default:
-               BREAK_TO_DEBUGGER();
-               break;
-       }
-
-       /* don't see the need of program the xbar in DCN 1.0 */
-}
-
-void hubp35_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-
-       hubp3_dcc_control_sienna_cichlid(hubp, dcc);
-       hubp3_program_tiling(hubp2, tiling_info, format);
-       hubp2_program_size(hubp, format, plane_size, dcc);
-       hubp2_program_rotation(hubp, rotation, horizontal_mirror);
-       hubp35_program_pixel_format(hubp, format);
-}
-
-struct hubp_funcs dcn35_hubp_funcs = {
-       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
-       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
-       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
-       .hubp_program_surface_config = hubp35_program_surface_config,
-       .hubp_is_flip_pending = hubp2_is_flip_pending,
-       .hubp_setup = hubp3_setup,
-       .hubp_setup_interdependent = hubp2_setup_interdependent,
-       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
-       .set_blank = hubp2_set_blank,
-       .dcc_control = hubp3_dcc_control,
-       .mem_program_viewport = min_set_viewport,
-       .set_cursor_attributes  = hubp2_cursor_set_attributes,
-       .set_cursor_position    = hubp2_cursor_set_position,
-       .hubp_clk_cntl = hubp2_clk_cntl,
-       .hubp_vtg_sel = hubp2_vtg_sel,
-       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
-       .dmdata_load = hubp2_dmdata_load,
-       .dmdata_status_done = hubp2_dmdata_status_done,
-       .hubp_read_state = hubp3_read_state,
-       .hubp_clear_underflow = hubp2_clear_underflow,
-       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
-       .hubp_init = hubp35_init,
-       .set_unbounded_requesting = hubp31_set_unbounded_requesting,
-       .hubp_soft_reset = hubp31_soft_reset,
-       .hubp_set_flip_int = hubp1_set_flip_int,
-       .hubp_in_blank = hubp1_in_blank,
-       .program_extended_blank = hubp31_program_extended_blank_value,
-};
-
-bool hubp35_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn35_hubp2_shift *hubp_shift,
-       const struct dcn35_hubp2_mask *hubp_mask)
-{
-       hubp2->base.funcs = &dcn35_hubp_funcs;
-       hubp2->base.ctx = ctx;
-       hubp2->hubp_regs = hubp_regs;
-       hubp2->hubp_shift = (const struct dcn_hubp2_shift *)hubp_shift;
-       hubp2->hubp_mask = (const struct dcn_hubp2_mask *)hubp_mask;
-       hubp2->base.inst = inst;
-       hubp2->base.opp_id = OPP_ID_INVALID;
-       hubp2->base.mpcc_id = 0xf;
-
-       return true;
-}
-
-
diff --git a/drivers/gpu/drm/amd/display/dc/dcn35/dcn35_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn35/dcn35_hubp.h
deleted file mode 100644 (file)
index 586b43a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* SPDX-License-Identifier: MIT */
-/*
- * Copyright 2023 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: AMD
- *
- */
-
-#ifndef __DC_HUBP_DCN35_H__
-#define __DC_HUBP_DCN35_H__
-
-#include "dcn31/dcn31_hubp.h"
-#include "dcn32/dcn32_hubp.h"
-#define HUBP_MASK_SH_LIST_DCN35(mask_sh)\
-       HUBP_MASK_SH_LIST_DCN32(mask_sh),\
-       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_FGCG_REP_DIS, mask_sh)
-
-#define DCN35_HUBP_REG_FIELD_VARIABLE_LIST(type)          \
-       struct {                                          \
-               DCN32_HUBP_REG_FIELD_VARIABLE_LIST(type); \
-               type HUBP_FGCG_REP_DIS;                   \
-       }
-
-struct dcn35_hubp2_shift {
-       DCN35_HUBP_REG_FIELD_VARIABLE_LIST(uint8_t);
-};
-
-struct dcn35_hubp2_mask {
-       DCN35_HUBP_REG_FIELD_VARIABLE_LIST(uint32_t);
-};
-
-
-bool hubp35_construct(
-       struct dcn20_hubp *hubp2,
-       struct dc_context *ctx,
-       uint32_t inst,
-       const struct dcn_hubp2_registers *hubp_regs,
-       const struct dcn35_hubp2_shift *hubp_shift,
-       const struct dcn35_hubp2_mask *hubp_mask);
-
-void hubp35_set_fgcg(struct hubp *hubp, bool enable);
-
-void hubp35_program_pixel_format(
-       struct hubp *hubp,
-       enum surface_pixel_format format);
-
-void hubp35_program_surface_config(
-       struct hubp *hubp,
-       enum surface_pixel_format format,
-       union dc_tiling_info *tiling_info,
-       struct plane_size *plane_size,
-       enum dc_rotation_angle rotation,
-       struct dc_plane_dcc_param *dcc,
-       bool horizontal_mirror,
-       unsigned int compat_level);
-
-#endif /* __DC_HUBP_DCN35_H__ */
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/Makefile b/drivers/gpu/drm/amd/display/dc/hubp/Makefile
new file mode 100644 (file)
index 0000000..a25a8b2
--- /dev/null
@@ -0,0 +1,92 @@
+
+# Copyright 2022 Advanced Micro Devices, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+# Makefile for the 'hubp' sub-component of DAL.
+#
+ifdef CONFIG_DRM_AMD_DC_FP
+###############################################################################
+# DCN
+###############################################################################
+
+HUBP_DCN10 = dcn10_hubp.o
+
+AMD_DAL_HUBP_DCN10 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn10/,$(HUBP_DCN10))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN10)
+###############################################################################
+
+HUBP_DCN20 = dcn20_hubp.o
+
+AMD_DAL_HUBP_DCN20 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn20/,$(HUBP_DCN20))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN20)
+
+###############################################################################
+
+HUBP_DCN201 = dcn201_hubp.o
+
+AMD_DAL_HUBP_DCN201 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn201/,$(HUBP_DCN201))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN201)
+
+###############################################################################
+
+HUBP_DCN21 = dcn21_hubp.o
+
+AMD_DAL_HUBP_DCN21 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn21/,$(HUBP_DCN21))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN21)
+
+###############################################################################
+HUBP_DCN30 = dcn30_hubp.o
+
+AMD_DAL_HUBP_DCN30 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn30/,$(HUBP_DCN30))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN30)
+
+###############################################################################
+
+HUBP_DCN31 = dcn31_hubp.o
+
+AMD_DAL_HUBP_DCN31 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn31/,$(HUBP_DCN31))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN31)
+
+###############################################################################
+
+HUBP_DCN32 = dcn32_hubp.o
+
+AMD_DAL_HUBP_DCN32 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn32/,$(HUBP_DCN32))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN32)
+
+###############################################################################
+
+HUBP_DCN35 = dcn35_hubp.o
+
+AMD_DAL_HUBP_DCN35 = $(addprefix $(AMDDALPATH)/dc/hubp/dcn35/,$(HUBP_DCN35))
+
+AMD_DISPLAY_FILES += $(AMD_DAL_HUBP_DCN35)
+
+###############################################################################
+
+###############################################################################
+endif
\ No newline at end of file
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.c
new file mode 100644 (file)
index 0000000..bf39981
--- /dev/null
@@ -0,0 +1,1396 @@
+/*
+ * Copyright 2012-15 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+#include "dm_services.h"
+#include "dce_calcs.h"
+#include "reg_helper.h"
+#include "basics/conversion.h"
+#include "dcn10_hubp.h"
+
+#define REG(reg)\
+       hubp1->hubp_regs->reg
+
+#define CTX \
+       hubp1->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp1->hubp_shift->field_name, hubp1->hubp_mask->field_name
+
+void hubp1_set_blank(struct hubp *hubp, bool blank)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t blank_en = blank ? 1 : 0;
+
+       REG_UPDATE_2(DCHUBP_CNTL,
+                       HUBP_BLANK_EN, blank_en,
+                       HUBP_TTU_DISABLE, blank_en);
+
+       if (blank) {
+               uint32_t reg_val = REG_READ(DCHUBP_CNTL);
+
+               if (reg_val) {
+                       /* init sequence workaround: in case HUBP is
+                        * power gated, this wait would timeout.
+                        *
+                        * we just wrote reg_val to non-0, if it stay 0
+                        * it means HUBP is gated
+                        */
+                       REG_WAIT(DCHUBP_CNTL,
+                                       HUBP_NO_OUTSTANDING_REQ, 1,
+                                       1, 200);
+               }
+
+               hubp->mpcc_id = 0xf;
+               hubp->opp_id = OPP_ID_INVALID;
+       }
+}
+
+static void hubp1_disconnect(struct hubp *hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL,
+                       HUBP_TTU_DISABLE, 1);
+
+       REG_UPDATE(CURSOR_CONTROL,
+                       CURSOR_ENABLE, 0);
+}
+
+static void hubp1_disable_control(struct hubp *hubp, bool disable_hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t disable = disable_hubp ? 1 : 0;
+
+       REG_UPDATE(DCHUBP_CNTL,
+                       HUBP_DISABLE, disable);
+}
+
+static unsigned int hubp1_get_underflow_status(struct hubp *hubp)
+{
+       uint32_t hubp_underflow = 0;
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_GET(DCHUBP_CNTL,
+               HUBP_UNDERFLOW_STATUS,
+               &hubp_underflow);
+
+       return hubp_underflow;
+}
+
+
+void hubp1_clear_underflow(struct hubp *hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, 1);
+}
+
+static void hubp1_set_hubp_blank_en(struct hubp *hubp, bool blank)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t blank_en = blank ? 1 : 0;
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_BLANK_EN, blank_en);
+}
+
+void hubp1_vready_workaround(struct hubp *hubp,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       uint32_t value = 0;
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       /* set HBUBREQ_DEBUG_DB[12] = 1 */
+       value = REG_READ(HUBPREQ_DEBUG_DB);
+
+       /* hack mode disable */
+       value |= 0x100;
+       value &= ~0x1000;
+
+       if ((pipe_dest->vstartup_start - 2*(pipe_dest->vready_offset+pipe_dest->vupdate_width
+               + pipe_dest->vupdate_offset) / pipe_dest->htotal) <= pipe_dest->vblank_end) {
+               /* if (eco_fix_needed(otg_global_sync_timing)
+                * set HBUBREQ_DEBUG_DB[12] = 1 */
+               value |= 0x1000;
+       }
+
+       REG_WRITE(HUBPREQ_DEBUG_DB, value);
+}
+
+void hubp1_program_tiling(
+       struct hubp *hubp,
+       const union dc_tiling_info *info,
+       const enum surface_pixel_format pixel_format)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE_6(DCSURF_ADDR_CONFIG,
+                       NUM_PIPES, log_2(info->gfx9.num_pipes),
+                       NUM_BANKS, log_2(info->gfx9.num_banks),
+                       PIPE_INTERLEAVE, info->gfx9.pipe_interleave,
+                       NUM_SE, log_2(info->gfx9.num_shader_engines),
+                       NUM_RB_PER_SE, log_2(info->gfx9.num_rb_per_se),
+                       MAX_COMPRESSED_FRAGS, log_2(info->gfx9.max_compressed_frags));
+
+       REG_UPDATE_4(DCSURF_TILING_CONFIG,
+                       SW_MODE, info->gfx9.swizzle,
+                       META_LINEAR, info->gfx9.meta_linear,
+                       RB_ALIGNED, info->gfx9.rb_aligned,
+                       PIPE_ALIGNED, info->gfx9.pipe_aligned);
+}
+
+void hubp1_program_size(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       const struct plane_size *plane_size,
+       struct dc_plane_dcc_param *dcc)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t pitch, meta_pitch, pitch_c, meta_pitch_c;
+
+       /* Program data and meta surface pitch (calculation from addrlib)
+        * 444 or 420 luma
+        */
+       if (format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN && format < SURFACE_PIXEL_FORMAT_SUBSAMPLE_END) {
+               ASSERT(plane_size->chroma_pitch != 0);
+               /* Chroma pitch zero can cause system hang! */
+
+               pitch = plane_size->surface_pitch - 1;
+               meta_pitch = dcc->meta_pitch - 1;
+               pitch_c = plane_size->chroma_pitch - 1;
+               meta_pitch_c = dcc->meta_pitch_c - 1;
+       } else {
+               pitch = plane_size->surface_pitch - 1;
+               meta_pitch = dcc->meta_pitch - 1;
+               pitch_c = 0;
+               meta_pitch_c = 0;
+       }
+
+       if (!dcc->enable) {
+               meta_pitch = 0;
+               meta_pitch_c = 0;
+       }
+
+       REG_UPDATE_2(DCSURF_SURFACE_PITCH,
+                       PITCH, pitch, META_PITCH, meta_pitch);
+
+       if (format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN)
+               REG_UPDATE_2(DCSURF_SURFACE_PITCH_C,
+                       PITCH_C, pitch_c, META_PITCH_C, meta_pitch_c);
+}
+
+void hubp1_program_rotation(
+       struct hubp *hubp,
+       enum dc_rotation_angle rotation,
+       bool horizontal_mirror)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t mirror;
+
+
+       if (horizontal_mirror)
+               mirror = 1;
+       else
+               mirror = 0;
+
+       /* Program rotation angle and horz mirror - no mirror */
+       if (rotation == ROTATION_ANGLE_0)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 0,
+                               H_MIRROR_EN, mirror);
+       else if (rotation == ROTATION_ANGLE_90)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 1,
+                               H_MIRROR_EN, mirror);
+       else if (rotation == ROTATION_ANGLE_180)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 2,
+                               H_MIRROR_EN, mirror);
+       else if (rotation == ROTATION_ANGLE_270)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 3,
+                               H_MIRROR_EN, mirror);
+}
+
+void hubp1_program_pixel_format(
+       struct hubp *hubp,
+       enum surface_pixel_format format)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t red_bar = 3;
+       uint32_t blue_bar = 2;
+
+       /* swap for ABGR format */
+       if (format == SURFACE_PIXEL_FORMAT_GRPH_ABGR8888
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F) {
+               red_bar = 2;
+               blue_bar = 3;
+       }
+
+       REG_UPDATE_2(HUBPRET_CONTROL,
+                       CROSSBAR_SRC_CB_B, blue_bar,
+                       CROSSBAR_SRC_CR_R, red_bar);
+
+       /* Mapping is same as ipp programming (cnvc) */
+
+       switch (format) {
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 1);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 3);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 8);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB2101010:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 10);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616: /*we use crossbar already*/
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 26); /* ARGB16161616_UNORM */
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F:/*we use crossbar already*/
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 24);
+               break;
+
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 65);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 64);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCbCr:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 67);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCrCb:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 66);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_AYCrCb8888:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 12);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FIX:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 112);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FIX:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 113);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_ACrYCb2101010:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 114);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FLOAT:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 118);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FLOAT:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 119);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGBE:
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 116,
+                               ALPHA_PLANE_EN, 0);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA:
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 116,
+                               ALPHA_PLANE_EN, 1);
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       /* don't see the need of program the xbar in DCN 1.0 */
+}
+
+bool hubp1_program_surface_flip_and_addr(
+       struct hubp *hubp,
+       const struct dc_plane_address *address,
+       bool flip_immediate)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+
+       //program flip type
+       REG_UPDATE(DCSURF_FLIP_CONTROL,
+                       SURFACE_FLIP_TYPE, flip_immediate);
+
+
+       if (address->type == PLN_ADDR_TYPE_GRPH_STEREO) {
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0x1);
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x1);
+
+       } else {
+               // turn off stereo if not in stereo
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0x0);
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x0);
+       }
+
+
+
+       /* HW automatically latch rest of address register on write to
+        * DCSURF_PRIMARY_SURFACE_ADDRESS if SURFACE_UPDATE_LOCK is not used
+        *
+        * program high first and then the low addr, order matters!
+        */
+       switch (address->type) {
+       case PLN_ADDR_TYPE_GRAPHICS:
+               /* DCN1.0 does not support const color
+                * TODO: program DCHUBBUB_RET_PATH_DCC_CFGx_0/1
+                * base on address->grph.dcc_const_color
+                * x = 0, 2, 4, 6 for pipe 0, 1, 2, 3 for rgb and luma
+                * x = 1, 3, 5, 7 for pipe 0, 1, 2, 3 for chroma
+                */
+
+               if (address->grph.addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_2(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface);
+
+               if (address->grph.meta_addr.quad_part != 0) {
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph.meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->grph.meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->grph.addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->grph.addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
+               if (address->video_progressive.luma_addr.quad_part == 0
+                       || address->video_progressive.chroma_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                               PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
+                               address->video_progressive.chroma_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
+                               PRIMARY_META_SURFACE_ADDRESS_C,
+                               address->video_progressive.chroma_meta_addr.low_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                               address->video_progressive.luma_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                               PRIMARY_META_SURFACE_ADDRESS,
+                               address->video_progressive.luma_meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
+                       PRIMARY_SURFACE_ADDRESS_HIGH_C,
+                       address->video_progressive.chroma_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
+                       PRIMARY_SURFACE_ADDRESS_C,
+                       address->video_progressive.chroma_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                       PRIMARY_SURFACE_ADDRESS_HIGH,
+                       address->video_progressive.luma_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                       PRIMARY_SURFACE_ADDRESS,
+                       address->video_progressive.luma_addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_GRPH_STEREO:
+               if (address->grph_stereo.left_addr.quad_part == 0)
+                       break;
+               if (address->grph_stereo.right_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface,
+                               SECONDARY_SURFACE_TMZ, address->tmz_surface,
+                               SECONDARY_SURFACE_TMZ_C, address->tmz_surface,
+                               SECONDARY_META_SURFACE_TMZ, address->tmz_surface,
+                               SECONDARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph_stereo.right_meta_addr.high_part);
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
+                                       SECONDARY_META_SURFACE_ADDRESS,
+                                       address->grph_stereo.right_meta_addr.low_part);
+               }
+               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph_stereo.left_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->grph_stereo.left_meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
+                               SECONDARY_SURFACE_ADDRESS_HIGH,
+                               address->grph_stereo.right_addr.high_part);
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
+                               SECONDARY_SURFACE_ADDRESS,
+                               address->grph_stereo.right_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->grph_stereo.left_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->grph_stereo.left_addr.low_part);
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       hubp->request_address = *address;
+
+       return true;
+}
+
+void hubp1_dcc_control(struct hubp *hubp, bool enable,
+               enum hubp_ind_block_size independent_64b_blks)
+{
+       uint32_t dcc_en = enable ? 1 : 0;
+       uint32_t dcc_ind_64b_blk = independent_64b_blks ? 1 : 0;
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                       PRIMARY_SURFACE_DCC_EN, dcc_en,
+                       PRIMARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk,
+                       SECONDARY_SURFACE_DCC_EN, dcc_en,
+                       SECONDARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk);
+}
+
+void hubp1_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level)
+{
+       hubp1_dcc_control(hubp, dcc->enable, dcc->independent_64b_blks);
+       hubp1_program_tiling(hubp, tiling_info, format);
+       hubp1_program_size(hubp, format, plane_size, dcc);
+       hubp1_program_rotation(hubp, rotation, horizontal_mirror);
+       hubp1_program_pixel_format(hubp, format);
+}
+
+void hubp1_program_requestor(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE(HUBPRET_CONTROL,
+                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
+       REG_SET_4(DCN_EXPANSION_MODE, 0,
+                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
+                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
+                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
+                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
+       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG, 0,
+               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, rq_regs->rq_regs_l.dpte_group_size,
+               MPTE_GROUP_SIZE, rq_regs->rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, rq_regs->rq_regs_l.pte_row_height_linear);
+       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG_C, 0,
+               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.dpte_group_size,
+               MPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.mpte_group_size,
+               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, rq_regs->rq_regs_c.pte_row_height_linear);
+}
+
+
+void hubp1_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       /* DLG - Per hubp */
+       REG_SET_2(BLANK_OFFSET_0, 0,
+               REFCYC_H_BLANK_END, dlg_attr->refcyc_h_blank_end,
+               DLG_V_BLANK_END, dlg_attr->dlg_vblank_end);
+
+       REG_SET(BLANK_OFFSET_1, 0,
+               MIN_DST_Y_NEXT_START, dlg_attr->min_dst_y_next_start);
+
+       REG_SET(DST_DIMENSIONS, 0,
+               REFCYC_PER_HTOTAL, dlg_attr->refcyc_per_htotal);
+
+       REG_SET_2(DST_AFTER_SCALER, 0,
+               REFCYC_X_AFTER_SCALER, dlg_attr->refcyc_x_after_scaler,
+               DST_Y_AFTER_SCALER, dlg_attr->dst_y_after_scaler);
+
+       REG_SET(REF_FREQ_TO_PIX_FREQ, 0,
+               REF_FREQ_TO_PIX_FREQ, dlg_attr->ref_freq_to_pix_freq);
+
+       /* DLG - Per luma/chroma */
+       REG_SET(VBLANK_PARAMETERS_1, 0,
+               REFCYC_PER_PTE_GROUP_VBLANK_L, dlg_attr->refcyc_per_pte_group_vblank_l);
+
+       if (REG(NOM_PARAMETERS_0))
+               REG_SET(NOM_PARAMETERS_0, 0,
+                       DST_Y_PER_PTE_ROW_NOM_L, dlg_attr->dst_y_per_pte_row_nom_l);
+
+       if (REG(NOM_PARAMETERS_1))
+               REG_SET(NOM_PARAMETERS_1, 0,
+                       REFCYC_PER_PTE_GROUP_NOM_L, dlg_attr->refcyc_per_pte_group_nom_l);
+
+       REG_SET(NOM_PARAMETERS_4, 0,
+               DST_Y_PER_META_ROW_NOM_L, dlg_attr->dst_y_per_meta_row_nom_l);
+
+       REG_SET(NOM_PARAMETERS_5, 0,
+               REFCYC_PER_META_CHUNK_NOM_L, dlg_attr->refcyc_per_meta_chunk_nom_l);
+
+       REG_SET_2(PER_LINE_DELIVERY, 0,
+               REFCYC_PER_LINE_DELIVERY_L, dlg_attr->refcyc_per_line_delivery_l,
+               REFCYC_PER_LINE_DELIVERY_C, dlg_attr->refcyc_per_line_delivery_c);
+
+       REG_SET(VBLANK_PARAMETERS_2, 0,
+               REFCYC_PER_PTE_GROUP_VBLANK_C, dlg_attr->refcyc_per_pte_group_vblank_c);
+
+       if (REG(NOM_PARAMETERS_2))
+               REG_SET(NOM_PARAMETERS_2, 0,
+                       DST_Y_PER_PTE_ROW_NOM_C, dlg_attr->dst_y_per_pte_row_nom_c);
+
+       if (REG(NOM_PARAMETERS_3))
+               REG_SET(NOM_PARAMETERS_3, 0,
+                       REFCYC_PER_PTE_GROUP_NOM_C, dlg_attr->refcyc_per_pte_group_nom_c);
+
+       REG_SET(NOM_PARAMETERS_6, 0,
+               DST_Y_PER_META_ROW_NOM_C, dlg_attr->dst_y_per_meta_row_nom_c);
+
+       REG_SET(NOM_PARAMETERS_7, 0,
+               REFCYC_PER_META_CHUNK_NOM_C, dlg_attr->refcyc_per_meta_chunk_nom_c);
+
+       /* TTU - per hubp */
+       REG_SET_2(DCN_TTU_QOS_WM, 0,
+               QoS_LEVEL_LOW_WM, ttu_attr->qos_level_low_wm,
+               QoS_LEVEL_HIGH_WM, ttu_attr->qos_level_high_wm);
+
+       /* TTU - per luma/chroma */
+       /* Assumed surf0 is luma and 1 is chroma */
+
+       REG_SET_3(DCN_SURF0_TTU_CNTL0, 0,
+               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_l,
+               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_l,
+               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_l);
+
+       REG_SET_3(DCN_SURF1_TTU_CNTL0, 0,
+               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_c,
+               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_c,
+               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_c);
+
+       REG_SET_3(DCN_CUR0_TTU_CNTL0, 0,
+               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_cur0,
+               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_cur0,
+               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_cur0);
+}
+
+static void hubp1_setup(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       /* otg is locked when this func is called. Register are double buffered.
+        * disable the requestors is not needed
+        */
+       hubp1_program_requestor(hubp, rq_regs);
+       hubp1_program_deadline(hubp, dlg_attr, ttu_attr);
+       hubp1_vready_workaround(hubp, pipe_dest);
+}
+
+static void hubp1_setup_interdependent(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_SET_2(PREFETCH_SETTINS, 0,
+               DST_Y_PREFETCH, dlg_attr->dst_y_prefetch,
+               VRATIO_PREFETCH, dlg_attr->vratio_prefetch);
+
+       REG_SET(PREFETCH_SETTINS_C, 0,
+               VRATIO_PREFETCH_C, dlg_attr->vratio_prefetch_c);
+
+       REG_SET_2(VBLANK_PARAMETERS_0, 0,
+               DST_Y_PER_VM_VBLANK, dlg_attr->dst_y_per_vm_vblank,
+               DST_Y_PER_ROW_VBLANK, dlg_attr->dst_y_per_row_vblank);
+
+       REG_SET(VBLANK_PARAMETERS_3, 0,
+               REFCYC_PER_META_CHUNK_VBLANK_L, dlg_attr->refcyc_per_meta_chunk_vblank_l);
+
+       REG_SET(VBLANK_PARAMETERS_4, 0,
+               REFCYC_PER_META_CHUNK_VBLANK_C, dlg_attr->refcyc_per_meta_chunk_vblank_c);
+
+       REG_SET_2(PER_LINE_DELIVERY_PRE, 0,
+               REFCYC_PER_LINE_DELIVERY_PRE_L, dlg_attr->refcyc_per_line_delivery_pre_l,
+               REFCYC_PER_LINE_DELIVERY_PRE_C, dlg_attr->refcyc_per_line_delivery_pre_c);
+
+       REG_SET(DCN_SURF0_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               ttu_attr->refcyc_per_req_delivery_pre_l);
+       REG_SET(DCN_SURF1_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               ttu_attr->refcyc_per_req_delivery_pre_c);
+       REG_SET(DCN_CUR0_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE, ttu_attr->refcyc_per_req_delivery_pre_cur0);
+
+       REG_SET_2(DCN_GLOBAL_TTU_CNTL, 0,
+               MIN_TTU_VBLANK, ttu_attr->min_ttu_vblank,
+               QoS_LEVEL_FLIP, ttu_attr->qos_level_flip);
+}
+
+bool hubp1_is_flip_pending(struct hubp *hubp)
+{
+       uint32_t flip_pending = 0;
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       struct dc_plane_address earliest_inuse_address;
+
+       if (hubp && hubp->power_gated)
+               return false;
+
+       REG_GET(DCSURF_FLIP_CONTROL,
+                       SURFACE_FLIP_PENDING, &flip_pending);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
+                       SURFACE_EARLIEST_INUSE_ADDRESS, &earliest_inuse_address.grph.addr.low_part);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
+                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &earliest_inuse_address.grph.addr.high_part);
+
+       if (flip_pending)
+               return true;
+
+       if (earliest_inuse_address.grph.addr.quad_part != hubp->request_address.grph.addr.quad_part)
+               return true;
+
+       return false;
+}
+
+static uint32_t aperture_default_system = 1;
+static uint32_t context0_default_system; /* = 0;*/
+
+static void hubp1_set_vm_system_aperture_settings(struct hubp *hubp,
+               struct vm_system_aperture_param *apt)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_default;
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
+
+       mc_vm_apt_default.quad_part = apt->sys_default.quad_part >> 12;
+       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 12;
+       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 12;
+
+       REG_SET_2(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, 0,
+               MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, aperture_default_system, /* 1 = system physical memory */
+               MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mc_vm_apt_default.high_part);
+       REG_SET(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, 0,
+               MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mc_vm_apt_default.low_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, 0,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, mc_vm_apt_low.high_part);
+       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, 0,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mc_vm_apt_low.low_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, 0,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mc_vm_apt_high.high_part);
+       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, 0,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mc_vm_apt_high.low_part);
+}
+
+static void hubp1_set_vm_context0_settings(struct hubp *hubp,
+               const struct vm_context0_param *vm0)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       /* pte base */
+       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, 0,
+                       VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, vm0->pte_base.high_part);
+       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, 0,
+                       VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, vm0->pte_base.low_part);
+
+       /* pte start */
+       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, 0,
+                       VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, vm0->pte_start.high_part);
+       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, 0,
+                       VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, vm0->pte_start.low_part);
+
+       /* pte end */
+       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, 0,
+                       VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, vm0->pte_end.high_part);
+       REG_SET(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, 0,
+                       VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, vm0->pte_end.low_part);
+
+       /* fault handling */
+       REG_SET_2(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, 0,
+                       VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, vm0->fault_default.high_part,
+                       VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM, context0_default_system);
+       REG_SET(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, 0,
+                       VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, vm0->fault_default.low_part);
+
+       /* control: enable VM PTE*/
+       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
+                       ENABLE_L1_TLB, 1,
+                       SYSTEM_ACCESS_MODE, 3);
+}
+
+void min_set_viewport(
+       struct hubp *hubp,
+       const struct rect *viewport,
+       const struct rect *viewport_c)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION, 0,
+                 PRI_VIEWPORT_WIDTH, viewport->width,
+                 PRI_VIEWPORT_HEIGHT, viewport->height);
+
+       REG_SET_2(DCSURF_PRI_VIEWPORT_START, 0,
+                 PRI_VIEWPORT_X_START, viewport->x,
+                 PRI_VIEWPORT_Y_START, viewport->y);
+
+       /*for stereo*/
+       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION, 0,
+                 SEC_VIEWPORT_WIDTH, viewport->width,
+                 SEC_VIEWPORT_HEIGHT, viewport->height);
+
+       REG_SET_2(DCSURF_SEC_VIEWPORT_START, 0,
+                 SEC_VIEWPORT_X_START, viewport->x,
+                 SEC_VIEWPORT_Y_START, viewport->y);
+
+       /* DC supports NV12 only at the moment */
+       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION_C, 0,
+                 PRI_VIEWPORT_WIDTH_C, viewport_c->width,
+                 PRI_VIEWPORT_HEIGHT_C, viewport_c->height);
+
+       REG_SET_2(DCSURF_PRI_VIEWPORT_START_C, 0,
+                 PRI_VIEWPORT_X_START_C, viewport_c->x,
+                 PRI_VIEWPORT_Y_START_C, viewport_c->y);
+
+       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION_C, 0,
+                 SEC_VIEWPORT_WIDTH_C, viewport_c->width,
+                 SEC_VIEWPORT_HEIGHT_C, viewport_c->height);
+
+       REG_SET_2(DCSURF_SEC_VIEWPORT_START_C, 0,
+                 SEC_VIEWPORT_X_START_C, viewport_c->x,
+                 SEC_VIEWPORT_Y_START_C, viewport_c->y);
+}
+
+void hubp1_read_state_common(struct hubp *hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       struct dcn_hubp_state *s = &hubp1->state;
+       struct _vcs_dpi_display_dlg_regs_st *dlg_attr = &s->dlg_attr;
+       struct _vcs_dpi_display_ttu_regs_st *ttu_attr = &s->ttu_attr;
+       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
+       uint32_t aperture_low_msb, aperture_low_lsb;
+       uint32_t aperture_high_msb, aperture_high_lsb;
+
+       /* Requester */
+       REG_GET(HUBPRET_CONTROL,
+                       DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs->plane1_base_address);
+       REG_GET_4(DCN_EXPANSION_MODE,
+                       DRQ_EXPANSION_MODE, &rq_regs->drq_expansion_mode,
+                       PRQ_EXPANSION_MODE, &rq_regs->prq_expansion_mode,
+                       MRQ_EXPANSION_MODE, &rq_regs->mrq_expansion_mode,
+                       CRQ_EXPANSION_MODE, &rq_regs->crq_expansion_mode);
+
+       REG_GET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, &aperture_low_msb);
+
+       REG_GET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, &aperture_low_lsb);
+
+       REG_GET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, &aperture_high_msb);
+
+       REG_GET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, &aperture_high_lsb);
+
+       // On DCN1, aperture is broken down into MSB and LSB; only keep bits [47:18] to match later DCN format
+       rq_regs->aperture_low_addr = (aperture_low_msb << 26) | (aperture_low_lsb >> 6);
+       rq_regs->aperture_high_addr = (aperture_high_msb << 26) | (aperture_high_lsb >> 6);
+
+       /* DLG - Per hubp */
+       REG_GET_2(BLANK_OFFSET_0,
+               REFCYC_H_BLANK_END, &dlg_attr->refcyc_h_blank_end,
+               DLG_V_BLANK_END, &dlg_attr->dlg_vblank_end);
+
+       REG_GET(BLANK_OFFSET_1,
+               MIN_DST_Y_NEXT_START, &dlg_attr->min_dst_y_next_start);
+
+       REG_GET(DST_DIMENSIONS,
+               REFCYC_PER_HTOTAL, &dlg_attr->refcyc_per_htotal);
+
+       REG_GET_2(DST_AFTER_SCALER,
+               REFCYC_X_AFTER_SCALER, &dlg_attr->refcyc_x_after_scaler,
+               DST_Y_AFTER_SCALER, &dlg_attr->dst_y_after_scaler);
+
+       if (REG(PREFETCH_SETTINS))
+               REG_GET_2(PREFETCH_SETTINS,
+                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
+                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
+       else
+               REG_GET_2(PREFETCH_SETTINGS,
+                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
+                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
+
+       REG_GET_2(VBLANK_PARAMETERS_0,
+               DST_Y_PER_VM_VBLANK, &dlg_attr->dst_y_per_vm_vblank,
+               DST_Y_PER_ROW_VBLANK, &dlg_attr->dst_y_per_row_vblank);
+
+       REG_GET(REF_FREQ_TO_PIX_FREQ,
+               REF_FREQ_TO_PIX_FREQ, &dlg_attr->ref_freq_to_pix_freq);
+
+       /* DLG - Per luma/chroma */
+       REG_GET(VBLANK_PARAMETERS_1,
+               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr->refcyc_per_pte_group_vblank_l);
+
+       REG_GET(VBLANK_PARAMETERS_3,
+               REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr->refcyc_per_meta_chunk_vblank_l);
+
+       if (REG(NOM_PARAMETERS_0))
+               REG_GET(NOM_PARAMETERS_0,
+                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr->dst_y_per_pte_row_nom_l);
+
+       if (REG(NOM_PARAMETERS_1))
+               REG_GET(NOM_PARAMETERS_1,
+                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr->refcyc_per_pte_group_nom_l);
+
+       REG_GET(NOM_PARAMETERS_4,
+               DST_Y_PER_META_ROW_NOM_L, &dlg_attr->dst_y_per_meta_row_nom_l);
+
+       REG_GET(NOM_PARAMETERS_5,
+               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr->refcyc_per_meta_chunk_nom_l);
+
+       REG_GET_2(PER_LINE_DELIVERY_PRE,
+               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr->refcyc_per_line_delivery_pre_l,
+               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr->refcyc_per_line_delivery_pre_c);
+
+       REG_GET_2(PER_LINE_DELIVERY,
+               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr->refcyc_per_line_delivery_l,
+               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr->refcyc_per_line_delivery_c);
+
+       if (REG(PREFETCH_SETTINS_C))
+               REG_GET(PREFETCH_SETTINS_C,
+                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
+       else
+               REG_GET(PREFETCH_SETTINGS_C,
+                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
+
+       REG_GET(VBLANK_PARAMETERS_2,
+               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr->refcyc_per_pte_group_vblank_c);
+
+       REG_GET(VBLANK_PARAMETERS_4,
+               REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr->refcyc_per_meta_chunk_vblank_c);
+
+       if (REG(NOM_PARAMETERS_2))
+               REG_GET(NOM_PARAMETERS_2,
+                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr->dst_y_per_pte_row_nom_c);
+
+       if (REG(NOM_PARAMETERS_3))
+               REG_GET(NOM_PARAMETERS_3,
+                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr->refcyc_per_pte_group_nom_c);
+
+       REG_GET(NOM_PARAMETERS_6,
+               DST_Y_PER_META_ROW_NOM_C, &dlg_attr->dst_y_per_meta_row_nom_c);
+
+       REG_GET(NOM_PARAMETERS_7,
+               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr->refcyc_per_meta_chunk_nom_c);
+
+       /* TTU - per hubp */
+       REG_GET_2(DCN_TTU_QOS_WM,
+               QoS_LEVEL_LOW_WM, &ttu_attr->qos_level_low_wm,
+               QoS_LEVEL_HIGH_WM, &ttu_attr->qos_level_high_wm);
+
+       REG_GET_2(DCN_GLOBAL_TTU_CNTL,
+               MIN_TTU_VBLANK, &ttu_attr->min_ttu_vblank,
+               QoS_LEVEL_FLIP, &ttu_attr->qos_level_flip);
+
+       /* TTU - per luma/chroma */
+       /* Assumed surf0 is luma and 1 is chroma */
+
+       REG_GET_3(DCN_SURF0_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_l,
+               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_l,
+               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_l);
+
+       REG_GET(DCN_SURF0_TTU_CNTL1,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               &ttu_attr->refcyc_per_req_delivery_pre_l);
+
+       REG_GET_3(DCN_SURF1_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_c,
+               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_c,
+               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_c);
+
+       REG_GET(DCN_SURF1_TTU_CNTL1,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               &ttu_attr->refcyc_per_req_delivery_pre_c);
+
+       /* Rest of hubp */
+       REG_GET(DCSURF_SURFACE_CONFIG,
+                       SURFACE_PIXEL_FORMAT, &s->pixel_format);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
+                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &s->inuse_addr_hi);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
+                       SURFACE_EARLIEST_INUSE_ADDRESS, &s->inuse_addr_lo);
+
+       REG_GET_2(DCSURF_PRI_VIEWPORT_DIMENSION,
+                       PRI_VIEWPORT_WIDTH, &s->viewport_width,
+                       PRI_VIEWPORT_HEIGHT, &s->viewport_height);
+
+       REG_GET_2(DCSURF_SURFACE_CONFIG,
+                       ROTATION_ANGLE, &s->rotation_angle,
+                       H_MIRROR_EN, &s->h_mirror_en);
+
+       REG_GET(DCSURF_TILING_CONFIG,
+                       SW_MODE, &s->sw_mode);
+
+       REG_GET(DCSURF_SURFACE_CONTROL,
+                       PRIMARY_SURFACE_DCC_EN, &s->dcc_en);
+
+       REG_GET_3(DCHUBP_CNTL,
+                       HUBP_BLANK_EN, &s->blank_en,
+                       HUBP_TTU_DISABLE, &s->ttu_disable,
+                       HUBP_UNDERFLOW_STATUS, &s->underflow_status);
+
+       REG_GET(HUBP_CLK_CNTL,
+                       HUBP_CLOCK_ENABLE, &s->clock_en);
+
+       REG_GET(DCN_GLOBAL_TTU_CNTL,
+                       MIN_TTU_VBLANK, &s->min_ttu_vblank);
+
+       REG_GET_2(DCN_TTU_QOS_WM,
+                       QoS_LEVEL_LOW_WM, &s->qos_level_low_wm,
+                       QoS_LEVEL_HIGH_WM, &s->qos_level_high_wm);
+
+       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS,
+                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_lo);
+
+       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH,
+                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_hi);
+
+       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS,
+                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_lo);
+
+       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_hi);
+}
+
+void hubp1_read_state(struct hubp *hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       struct dcn_hubp_state *s = &hubp1->state;
+       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
+
+       hubp1_read_state_common(hubp);
+
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
+               CHUNK_SIZE, &rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, &rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, &rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, &rq_regs->rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, &rq_regs->rq_regs_l.dpte_group_size,
+               MPTE_GROUP_SIZE, &rq_regs->rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, &rq_regs->rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, &rq_regs->rq_regs_l.pte_row_height_linear);
+
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG_C,
+               CHUNK_SIZE_C, &rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.dpte_group_size,
+               MPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.mpte_group_size,
+               SWATH_HEIGHT_C, &rq_regs->rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs->rq_regs_c.pte_row_height_linear);
+
+}
+enum cursor_pitch hubp1_get_cursor_pitch(unsigned int pitch)
+{
+       enum cursor_pitch hw_pitch;
+
+       switch (pitch) {
+       case 64:
+               hw_pitch = CURSOR_PITCH_64_PIXELS;
+               break;
+       case 128:
+               hw_pitch = CURSOR_PITCH_128_PIXELS;
+               break;
+       case 256:
+               hw_pitch = CURSOR_PITCH_256_PIXELS;
+               break;
+       default:
+               DC_ERR("Invalid cursor pitch of %d. "
+                               "Only 64/128/256 is supported on DCN.\n", pitch);
+               hw_pitch = CURSOR_PITCH_64_PIXELS;
+               break;
+       }
+       return hw_pitch;
+}
+
+static enum cursor_lines_per_chunk hubp1_get_lines_per_chunk(
+               unsigned int cur_width,
+               enum dc_cursor_color_format format)
+{
+       enum cursor_lines_per_chunk line_per_chunk;
+
+       if (format == CURSOR_MODE_MONO)
+               /* impl B. expansion in CUR Buffer reader */
+               line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
+       else if (cur_width <= 32)
+               line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
+       else if (cur_width <= 64)
+               line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
+       else if (cur_width <= 128)
+               line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
+       else
+               line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
+
+       return line_per_chunk;
+}
+
+void hubp1_cursor_set_attributes(
+               struct hubp *hubp,
+               const struct dc_cursor_attributes *attr)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       enum cursor_pitch hw_pitch = hubp1_get_cursor_pitch(attr->pitch);
+       enum cursor_lines_per_chunk lpc = hubp1_get_lines_per_chunk(
+                       attr->width, attr->color_format);
+
+       hubp->curs_attr = *attr;
+
+       REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
+                       CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
+       REG_UPDATE(CURSOR_SURFACE_ADDRESS,
+                       CURSOR_SURFACE_ADDRESS, attr->address.low_part);
+
+       REG_UPDATE_2(CURSOR_SIZE,
+                       CURSOR_WIDTH, attr->width,
+                       CURSOR_HEIGHT, attr->height);
+
+       REG_UPDATE_3(CURSOR_CONTROL,
+                       CURSOR_MODE, attr->color_format,
+                       CURSOR_PITCH, hw_pitch,
+                       CURSOR_LINES_PER_CHUNK, lpc);
+
+       REG_SET_2(CURSOR_SETTINS, 0,
+                       /* no shift of the cursor HDL schedule */
+                       CURSOR0_DST_Y_OFFSET, 0,
+                        /* used to shift the cursor chunk request deadline */
+                       CURSOR0_CHUNK_HDL_ADJUST, 3);
+}
+
+void hubp1_cursor_set_position(
+               struct hubp *hubp,
+               const struct dc_cursor_position *pos,
+               const struct dc_cursor_mi_param *param)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       int x_pos = pos->x - param->viewport.x;
+       int y_pos = pos->y - param->viewport.y;
+       int x_hotspot = pos->x_hotspot;
+       int y_hotspot = pos->y_hotspot;
+       int src_x_offset = x_pos - pos->x_hotspot;
+       int src_y_offset = y_pos - pos->y_hotspot;
+       int cursor_height = (int)hubp->curs_attr.height;
+       int cursor_width = (int)hubp->curs_attr.width;
+       uint32_t dst_x_offset;
+       uint32_t cur_en = pos->enable ? 1 : 0;
+
+       hubp->curs_pos = *pos;
+
+       /*
+        * Guard aganst cursor_set_position() from being called with invalid
+        * attributes
+        *
+        * TODO: Look at combining cursor_set_position() and
+        * cursor_set_attributes() into cursor_update()
+        */
+       if (hubp->curs_attr.address.quad_part == 0)
+               return;
+
+       // Transform cursor width / height and hotspots for offset calculations
+       if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) {
+               swap(cursor_height, cursor_width);
+               swap(x_hotspot, y_hotspot);
+
+               if (param->rotation == ROTATION_ANGLE_90) {
+                       // hotspot = (-y, x)
+                       src_x_offset = x_pos - (cursor_width - x_hotspot);
+                       src_y_offset = y_pos - y_hotspot;
+               } else if (param->rotation == ROTATION_ANGLE_270) {
+                       // hotspot = (y, -x)
+                       src_x_offset = x_pos - x_hotspot;
+                       src_y_offset = y_pos - (cursor_height - y_hotspot);
+               }
+       } else if (param->rotation == ROTATION_ANGLE_180) {
+               // hotspot = (-x, -y)
+               if (!param->mirror)
+                       src_x_offset = x_pos - (cursor_width - x_hotspot);
+
+               src_y_offset = y_pos - (cursor_height - y_hotspot);
+       }
+
+       dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0;
+       dst_x_offset *= param->ref_clk_khz;
+       dst_x_offset /= param->pixel_clk_khz;
+
+       ASSERT(param->h_scale_ratio.value);
+
+       if (param->h_scale_ratio.value)
+               dst_x_offset = dc_fixpt_floor(dc_fixpt_div(
+                               dc_fixpt_from_int(dst_x_offset),
+                               param->h_scale_ratio));
+
+       if (src_x_offset >= (int)param->viewport.width)
+               cur_en = 0;  /* not visible beyond right edge*/
+
+       if (src_x_offset + cursor_width <= 0)
+               cur_en = 0;  /* not visible beyond left edge*/
+
+       if (src_y_offset >= (int)param->viewport.height)
+               cur_en = 0;  /* not visible beyond bottom edge*/
+
+       if (src_y_offset + cursor_height <= 0)
+               cur_en = 0;  /* not visible beyond top edge*/
+
+       if (cur_en && REG_READ(CURSOR_SURFACE_ADDRESS) == 0)
+               hubp->funcs->set_cursor_attributes(hubp, &hubp->curs_attr);
+
+       REG_UPDATE(CURSOR_CONTROL,
+                       CURSOR_ENABLE, cur_en);
+
+       REG_SET_2(CURSOR_POSITION, 0,
+                       CURSOR_X_POSITION, pos->x,
+                       CURSOR_Y_POSITION, pos->y);
+
+       REG_SET_2(CURSOR_HOT_SPOT, 0,
+                       CURSOR_HOT_SPOT_X, pos->x_hotspot,
+                       CURSOR_HOT_SPOT_Y, pos->y_hotspot);
+
+       REG_SET(CURSOR_DST_OFFSET, 0,
+                       CURSOR_DST_X_OFFSET, dst_x_offset);
+       /* TODO Handle surface pixel formats other than 4:4:4 */
+}
+
+/**
+ * hubp1_clk_cntl - Disable or enable clocks for DCHUBP
+ *
+ * @hubp: hubp struct reference.
+ * @enable: Set true for enabling gate clock.
+ *
+ * When enabling/disabling DCHUBP clock, we affect dcfclk/dppclk.
+ */
+void hubp1_clk_cntl(struct hubp *hubp, bool enable)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+       uint32_t clk_enable = enable ? 1 : 0;
+
+       REG_UPDATE(HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, clk_enable);
+}
+
+void hubp1_vtg_sel(struct hubp *hubp, uint32_t otg_inst)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_VTG_SEL, otg_inst);
+}
+
+bool hubp1_in_blank(struct hubp *hubp)
+{
+       uint32_t in_blank;
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_GET(DCHUBP_CNTL, HUBP_IN_BLANK, &in_blank);
+       return in_blank ? true : false;
+}
+
+void hubp1_soft_reset(struct hubp *hubp, bool reset)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_DISABLE, reset ? 1 : 0);
+}
+
+/**
+ * hubp1_set_flip_int - Enable surface flip interrupt
+ *
+ * @hubp: hubp struct reference.
+ */
+void hubp1_set_flip_int(struct hubp *hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_UPDATE(DCSURF_SURFACE_FLIP_INTERRUPT,
+               SURFACE_FLIP_INT_MASK, 1);
+
+       return;
+}
+
+/**
+ * hubp1_wait_pipe_read_start - wait for hubp ret path starting read.
+ *
+ * @hubp: hubp struct reference.
+ */
+static void hubp1_wait_pipe_read_start(struct hubp *hubp)
+{
+       struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp);
+
+       REG_WAIT(HUBPRET_READ_LINE_STATUS,
+               PIPE_READ_VBLANK, 0,
+                1, 1000);
+}
+
+void hubp1_init(struct hubp *hubp)
+{
+       //do nothing
+}
+static const struct hubp_funcs dcn10_hubp_funcs = {
+       .hubp_program_surface_flip_and_addr =
+                       hubp1_program_surface_flip_and_addr,
+       .hubp_program_surface_config =
+                       hubp1_program_surface_config,
+       .hubp_is_flip_pending = hubp1_is_flip_pending,
+       .hubp_setup = hubp1_setup,
+       .hubp_setup_interdependent = hubp1_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp1_set_vm_system_aperture_settings,
+       .hubp_set_vm_context0_settings = hubp1_set_vm_context0_settings,
+       .set_blank = hubp1_set_blank,
+       .dcc_control = hubp1_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .set_hubp_blank_en = hubp1_set_hubp_blank_en,
+       .set_cursor_attributes  = hubp1_cursor_set_attributes,
+       .set_cursor_position    = hubp1_cursor_set_position,
+       .hubp_disconnect = hubp1_disconnect,
+       .hubp_clk_cntl = hubp1_clk_cntl,
+       .hubp_vtg_sel = hubp1_vtg_sel,
+       .hubp_read_state = hubp1_read_state,
+       .hubp_clear_underflow = hubp1_clear_underflow,
+       .hubp_disable_control =  hubp1_disable_control,
+       .hubp_get_underflow_status = hubp1_get_underflow_status,
+       .hubp_init = hubp1_init,
+
+       .dmdata_set_attributes = NULL,
+       .dmdata_load = NULL,
+       .hubp_soft_reset = hubp1_soft_reset,
+       .hubp_in_blank = hubp1_in_blank,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+       .hubp_wait_pipe_read_start = hubp1_wait_pipe_read_start,
+};
+
+/*****************************************/
+/* Constructor, Destructor               */
+/*****************************************/
+
+void dcn10_hubp_construct(
+       struct dcn10_hubp *hubp1,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_mi_registers *hubp_regs,
+       const struct dcn_mi_shift *hubp_shift,
+       const struct dcn_mi_mask *hubp_mask)
+{
+       hubp1->base.funcs = &dcn10_hubp_funcs;
+       hubp1->base.ctx = ctx;
+       hubp1->hubp_regs = hubp_regs;
+       hubp1->hubp_shift = hubp_shift;
+       hubp1->hubp_mask = hubp_mask;
+       hubp1->base.inst = inst;
+       hubp1->base.opp_id = OPP_ID_INVALID;
+       hubp1->base.mpcc_id = 0xf;
+}
+
+
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn10/dcn10_hubp.h
new file mode 100644 (file)
index 0000000..69119b2
--- /dev/null
@@ -0,0 +1,797 @@
+/* Copyright 2012-15 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_MEM_INPUT_DCN10_H__
+#define __DC_MEM_INPUT_DCN10_H__
+
+#include "hubp.h"
+
+#define TO_DCN10_HUBP(hubp)\
+       container_of(hubp, struct dcn10_hubp, base)
+
+/* Register address initialization macro for all ASICs (including those with reduced functionality) */
+#define HUBP_REG_LIST_DCN(id)\
+       SRI(DCHUBP_CNTL, HUBP, id),\
+       SRI(HUBPREQ_DEBUG_DB, HUBP, id),\
+       SRI(HUBPREQ_DEBUG, HUBP, id),\
+       SRI(DCSURF_ADDR_CONFIG, HUBP, id),\
+       SRI(DCSURF_TILING_CONFIG, HUBP, id),\
+       SRI(DCSURF_SURFACE_PITCH, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_PITCH_C, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_CONFIG, HUBP, id),\
+       SRI(DCSURF_FLIP_CONTROL, HUBPREQ, id),\
+       SRI(DCSURF_PRI_VIEWPORT_DIMENSION, HUBP, id), \
+       SRI(DCSURF_PRI_VIEWPORT_START, HUBP, id), \
+       SRI(DCSURF_SEC_VIEWPORT_DIMENSION, HUBP, id), \
+       SRI(DCSURF_SEC_VIEWPORT_START, HUBP, id), \
+       SRI(DCSURF_PRI_VIEWPORT_DIMENSION_C, HUBP, id), \
+       SRI(DCSURF_PRI_VIEWPORT_START_C, HUBP, id), \
+       SRI(DCSURF_SEC_VIEWPORT_DIMENSION_C, HUBP, id), \
+       SRI(DCSURF_SEC_VIEWPORT_START_C, HUBP, id), \
+       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_C, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_C, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
+       SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\
+       SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_INUSE, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_INUSE_HIGH, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_INUSE_C, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_INUSE_HIGH_C, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_EARLIEST_INUSE, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_EARLIEST_INUSE_HIGH, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_EARLIEST_INUSE_C, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_CONTROL, HUBPREQ, id),\
+       SRI(DCSURF_SURFACE_FLIP_INTERRUPT, HUBPREQ, id),\
+       SRI(HUBPRET_CONTROL, HUBPRET, id),\
+       SRI(HUBPRET_READ_LINE_STATUS, HUBPRET, id),\
+       SRI(DCN_EXPANSION_MODE, HUBPREQ, id),\
+       SRI(DCHUBP_REQ_SIZE_CONFIG, HUBP, id),\
+       SRI(DCHUBP_REQ_SIZE_CONFIG_C, HUBP, id),\
+       SRI(BLANK_OFFSET_0, HUBPREQ, id),\
+       SRI(BLANK_OFFSET_1, HUBPREQ, id),\
+       SRI(DST_DIMENSIONS, HUBPREQ, id),\
+       SRI(DST_AFTER_SCALER, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_0, HUBPREQ, id),\
+       SRI(REF_FREQ_TO_PIX_FREQ, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_1, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_3, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_4, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_5, HUBPREQ, id),\
+       SRI(PER_LINE_DELIVERY_PRE, HUBPREQ, id),\
+       SRI(PER_LINE_DELIVERY, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_2, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_4, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_6, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_7, HUBPREQ, id),\
+       SRI(DCN_TTU_QOS_WM, HUBPREQ, id),\
+       SRI(DCN_GLOBAL_TTU_CNTL, HUBPREQ, id),\
+       SRI(DCN_SURF0_TTU_CNTL0, HUBPREQ, id),\
+       SRI(DCN_SURF0_TTU_CNTL1, HUBPREQ, id),\
+       SRI(DCN_SURF1_TTU_CNTL0, HUBPREQ, id),\
+       SRI(DCN_SURF1_TTU_CNTL1, HUBPREQ, id),\
+       SRI(DCN_CUR0_TTU_CNTL0, HUBPREQ, id),\
+       SRI(DCN_CUR0_TTU_CNTL1, HUBPREQ, id),\
+       SRI(HUBP_CLK_CNTL, HUBP, id)
+
+/* Register address initialization macro for ASICs with VM */
+#define HUBP_REG_LIST_DCN_VM(id)\
+       SRI(NOM_PARAMETERS_0, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_1, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_2, HUBPREQ, id),\
+       SRI(NOM_PARAMETERS_3, HUBPREQ, id),\
+       SRI(DCN_VM_MX_L1_TLB_CNTL, HUBPREQ, id)
+
+#define HUBP_REG_LIST_DCN10(id)\
+       HUBP_REG_LIST_DCN(id),\
+       HUBP_REG_LIST_DCN_VM(id),\
+       SRI(PREFETCH_SETTINS, HUBPREQ, id),\
+       SRI(PREFETCH_SETTINS_C, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\
+       SRI(CURSOR_SETTINS, HUBPREQ, id), \
+       SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR, id), \
+       SRI(CURSOR_SURFACE_ADDRESS, CURSOR, id), \
+       SRI(CURSOR_SIZE, CURSOR, id), \
+       SRI(CURSOR_CONTROL, CURSOR, id), \
+       SRI(CURSOR_POSITION, CURSOR, id), \
+       SRI(CURSOR_HOT_SPOT, CURSOR, id), \
+       SRI(CURSOR_DST_OFFSET, CURSOR, id)
+
+#define HUBP_COMMON_REG_VARIABLE_LIST \
+       uint32_t DCHUBP_CNTL; \
+       uint32_t HUBPREQ_DEBUG_DB; \
+       uint32_t HUBPREQ_DEBUG; \
+       uint32_t DCSURF_ADDR_CONFIG; \
+       uint32_t DCSURF_TILING_CONFIG; \
+       uint32_t DCSURF_SURFACE_PITCH; \
+       uint32_t DCSURF_SURFACE_PITCH_C; \
+       uint32_t DCSURF_SURFACE_CONFIG; \
+       uint32_t DCSURF_FLIP_CONTROL; \
+       uint32_t DCSURF_PRI_VIEWPORT_DIMENSION; \
+       uint32_t DCSURF_PRI_VIEWPORT_START; \
+       uint32_t DCSURF_SEC_VIEWPORT_DIMENSION; \
+       uint32_t DCSURF_SEC_VIEWPORT_START; \
+       uint32_t DCSURF_PRI_VIEWPORT_DIMENSION_C; \
+       uint32_t DCSURF_PRI_VIEWPORT_START_C; \
+       uint32_t DCSURF_SEC_VIEWPORT_DIMENSION_C; \
+       uint32_t DCSURF_SEC_VIEWPORT_START_C; \
+       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH; \
+       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS; \
+       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH; \
+       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS; \
+       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH; \
+       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS; \
+       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH; \
+       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS; \
+       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C; \
+       uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_C; \
+       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C; \
+       uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_C; \
+       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C; \
+       uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_C; \
+       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C; \
+       uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_C; \
+       uint32_t DCSURF_SURFACE_INUSE; \
+       uint32_t DCSURF_SURFACE_INUSE_HIGH; \
+       uint32_t DCSURF_SURFACE_INUSE_C; \
+       uint32_t DCSURF_SURFACE_INUSE_HIGH_C; \
+       uint32_t DCSURF_SURFACE_EARLIEST_INUSE; \
+       uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH; \
+       uint32_t DCSURF_SURFACE_EARLIEST_INUSE_C; \
+       uint32_t DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C; \
+       uint32_t DCSURF_SURFACE_CONTROL; \
+       uint32_t DCSURF_SURFACE_FLIP_INTERRUPT; \
+       uint32_t HUBPRET_CONTROL; \
+       uint32_t HUBPRET_READ_LINE_STATUS; \
+       uint32_t DCN_EXPANSION_MODE; \
+       uint32_t DCHUBP_REQ_SIZE_CONFIG; \
+       uint32_t DCHUBP_REQ_SIZE_CONFIG_C; \
+       uint32_t BLANK_OFFSET_0; \
+       uint32_t BLANK_OFFSET_1; \
+       uint32_t DST_DIMENSIONS; \
+       uint32_t DST_AFTER_SCALER; \
+       uint32_t PREFETCH_SETTINS; \
+       uint32_t PREFETCH_SETTINGS; \
+       uint32_t VBLANK_PARAMETERS_0; \
+       uint32_t REF_FREQ_TO_PIX_FREQ; \
+       uint32_t VBLANK_PARAMETERS_1; \
+       uint32_t VBLANK_PARAMETERS_3; \
+       uint32_t NOM_PARAMETERS_0; \
+       uint32_t NOM_PARAMETERS_1; \
+       uint32_t NOM_PARAMETERS_4; \
+       uint32_t NOM_PARAMETERS_5; \
+       uint32_t PER_LINE_DELIVERY_PRE; \
+       uint32_t PER_LINE_DELIVERY; \
+       uint32_t PREFETCH_SETTINS_C; \
+       uint32_t PREFETCH_SETTINGS_C; \
+       uint32_t VBLANK_PARAMETERS_2; \
+       uint32_t VBLANK_PARAMETERS_4; \
+       uint32_t NOM_PARAMETERS_2; \
+       uint32_t NOM_PARAMETERS_3; \
+       uint32_t NOM_PARAMETERS_6; \
+       uint32_t NOM_PARAMETERS_7; \
+       uint32_t DCN_TTU_QOS_WM; \
+       uint32_t DCN_GLOBAL_TTU_CNTL; \
+       uint32_t DCN_SURF0_TTU_CNTL0; \
+       uint32_t DCN_SURF0_TTU_CNTL1; \
+       uint32_t DCN_SURF1_TTU_CNTL0; \
+       uint32_t DCN_SURF1_TTU_CNTL1; \
+       uint32_t DCN_CUR0_TTU_CNTL0; \
+       uint32_t DCN_CUR0_TTU_CNTL1; \
+       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB; \
+       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB; \
+       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB; \
+       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB; \
+       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB; \
+       uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB; \
+       uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB; \
+       uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB; \
+       uint32_t DCN_VM_MX_L1_TLB_CNTL; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR; \
+       uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR; \
+       uint32_t CURSOR_SETTINS; \
+       uint32_t CURSOR_SETTINGS; \
+       uint32_t CURSOR_SURFACE_ADDRESS_HIGH; \
+       uint32_t CURSOR_SURFACE_ADDRESS; \
+       uint32_t CURSOR_SIZE; \
+       uint32_t CURSOR_CONTROL; \
+       uint32_t CURSOR_POSITION; \
+       uint32_t CURSOR_HOT_SPOT; \
+       uint32_t CURSOR_DST_OFFSET; \
+       uint32_t HUBP_CLK_CNTL
+
+#define HUBP_SF(reg_name, field_name, post_fix)\
+       .field_name = reg_name ## __ ## field_name ## post_fix
+
+/* Mask/shift struct generation macro for all ASICs (including those with reduced functionality) */
+/*1.x, 2.x, and 3.x*/
+#define HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh)\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_IN_BLANK, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_BANKS, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_SE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_RB_PER_SE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_WIDTH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_X_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_Y_START_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, SECONDARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_C, SECONDARY_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, SECONDARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, SECONDARY_META_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_READ_LINE_STATUS, PIPE_READ_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
+       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh)
+/*2.x and 1.x only*/
+#define HUBP_MASK_SH_LIST_DCN_COMMON(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MPTE_GROUP_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MPTE_GROUP_SIZE_C, mask_sh)
+
+/*2.x and 1.x only*/
+#define HUBP_MASK_SH_LIST_DCN(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN_COMMON(mask_sh)
+
+/* Mask/shift struct generation macro for ASICs with VM */
+#define HUBP_MASK_SH_LIST_DCN_VM(mask_sh)\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_0, DST_Y_PER_PTE_ROW_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_1, REFCYC_PER_PTE_GROUP_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_2, DST_Y_PER_PTE_ROW_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_3, REFCYC_PER_PTE_GROUP_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_CUR0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh)
+
+#define HUBP_MASK_SH_LIST_DCN10(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN(mask_sh),\
+       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, DST_Y_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, VRATIO_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINS_C, VRATIO_PREFETCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_DST_Y_OFFSET, mask_sh), \
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
+       HUBP_SF(CURSOR0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh)
+
+#define DCN_HUBP_REG_FIELD_BASE_LIST(type) \
+       type HUBP_BLANK_EN;\
+       type HUBP_DISABLE;\
+       type HUBP_TTU_DISABLE;\
+       type HUBP_NO_OUTSTANDING_REQ;\
+       type HUBP_VTG_SEL;\
+       type HUBP_UNDERFLOW_STATUS;\
+       type HUBP_UNDERFLOW_CLEAR;\
+       type HUBP_IN_BLANK;\
+       type NUM_PIPES;\
+       type NUM_BANKS;\
+       type PIPE_INTERLEAVE;\
+       type NUM_SE;\
+       type NUM_RB_PER_SE;\
+       type MAX_COMPRESSED_FRAGS;\
+       type SW_MODE;\
+       type META_LINEAR;\
+       type RB_ALIGNED;\
+       type PIPE_ALIGNED;\
+       type PITCH;\
+       type META_PITCH;\
+       type PITCH_C;\
+       type META_PITCH_C;\
+       type ROTATION_ANGLE;\
+       type H_MIRROR_EN;\
+       type SURFACE_PIXEL_FORMAT;\
+       type SURFACE_FLIP_TYPE;\
+       type SURFACE_FLIP_MODE_FOR_STEREOSYNC;\
+       type SURFACE_FLIP_IN_STEREOSYNC;\
+       type SURFACE_UPDATE_LOCK;\
+       type SURFACE_FLIP_PENDING;\
+       type PRI_VIEWPORT_WIDTH; \
+       type PRI_VIEWPORT_HEIGHT; \
+       type PRI_VIEWPORT_X_START; \
+       type PRI_VIEWPORT_Y_START; \
+       type SEC_VIEWPORT_WIDTH; \
+       type SEC_VIEWPORT_HEIGHT; \
+       type SEC_VIEWPORT_X_START; \
+       type SEC_VIEWPORT_Y_START; \
+       type PRI_VIEWPORT_WIDTH_C; \
+       type PRI_VIEWPORT_HEIGHT_C; \
+       type PRI_VIEWPORT_X_START_C; \
+       type PRI_VIEWPORT_Y_START_C; \
+       type SEC_VIEWPORT_WIDTH_C; \
+       type SEC_VIEWPORT_HEIGHT_C; \
+       type SEC_VIEWPORT_X_START_C; \
+       type SEC_VIEWPORT_Y_START_C; \
+       type PRIMARY_SURFACE_ADDRESS_HIGH;\
+       type PRIMARY_SURFACE_ADDRESS;\
+       type SECONDARY_SURFACE_ADDRESS_HIGH;\
+       type SECONDARY_SURFACE_ADDRESS;\
+       type PRIMARY_META_SURFACE_ADDRESS_HIGH;\
+       type PRIMARY_META_SURFACE_ADDRESS;\
+       type SECONDARY_META_SURFACE_ADDRESS_HIGH;\
+       type SECONDARY_META_SURFACE_ADDRESS;\
+       type PRIMARY_SURFACE_ADDRESS_HIGH_C;\
+       type PRIMARY_SURFACE_ADDRESS_C;\
+       type SECONDARY_SURFACE_ADDRESS_HIGH_C;\
+       type SECONDARY_SURFACE_ADDRESS_C;\
+       type PRIMARY_META_SURFACE_ADDRESS_HIGH_C;\
+       type PRIMARY_META_SURFACE_ADDRESS_C;\
+       type SECONDARY_META_SURFACE_ADDRESS_HIGH_C;\
+       type SECONDARY_META_SURFACE_ADDRESS_C;\
+       type SURFACE_INUSE_ADDRESS;\
+       type SURFACE_INUSE_ADDRESS_HIGH;\
+       type SURFACE_INUSE_ADDRESS_C;\
+       type SURFACE_INUSE_ADDRESS_HIGH_C;\
+       type SURFACE_EARLIEST_INUSE_ADDRESS;\
+       type SURFACE_EARLIEST_INUSE_ADDRESS_HIGH;\
+       type SURFACE_EARLIEST_INUSE_ADDRESS_C;\
+       type SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C;\
+       type PRIMARY_SURFACE_TMZ;\
+       type PRIMARY_SURFACE_TMZ_C;\
+       type SECONDARY_SURFACE_TMZ;\
+       type SECONDARY_SURFACE_TMZ_C;\
+       type PRIMARY_META_SURFACE_TMZ;\
+       type PRIMARY_META_SURFACE_TMZ_C;\
+       type SECONDARY_META_SURFACE_TMZ;\
+       type SECONDARY_META_SURFACE_TMZ_C;\
+       type PRIMARY_SURFACE_DCC_EN;\
+       type PRIMARY_SURFACE_DCC_IND_64B_BLK;\
+       type SECONDARY_SURFACE_DCC_EN;\
+       type SECONDARY_SURFACE_DCC_IND_64B_BLK;\
+       type SURFACE_FLIP_INT_MASK;\
+       type DET_BUF_PLANE1_BASE_ADDRESS;\
+       type CROSSBAR_SRC_CB_B;\
+       type CROSSBAR_SRC_CR_R;\
+       type PIPE_READ_VBLANK;\
+       type DRQ_EXPANSION_MODE;\
+       type PRQ_EXPANSION_MODE;\
+       type MRQ_EXPANSION_MODE;\
+       type CRQ_EXPANSION_MODE;\
+       type CHUNK_SIZE;\
+       type MIN_CHUNK_SIZE;\
+       type META_CHUNK_SIZE;\
+       type MIN_META_CHUNK_SIZE;\
+       type DPTE_GROUP_SIZE;\
+       type MPTE_GROUP_SIZE;\
+       type SWATH_HEIGHT;\
+       type PTE_ROW_HEIGHT_LINEAR;\
+       type CHUNK_SIZE_C;\
+       type MIN_CHUNK_SIZE_C;\
+       type META_CHUNK_SIZE_C;\
+       type MIN_META_CHUNK_SIZE_C;\
+       type DPTE_GROUP_SIZE_C;\
+       type MPTE_GROUP_SIZE_C;\
+       type SWATH_HEIGHT_C;\
+       type PTE_ROW_HEIGHT_LINEAR_C;\
+       type REFCYC_H_BLANK_END;\
+       type DLG_V_BLANK_END;\
+       type MIN_DST_Y_NEXT_START;\
+       type REFCYC_PER_HTOTAL;\
+       type REFCYC_X_AFTER_SCALER;\
+       type DST_Y_AFTER_SCALER;\
+       type DST_Y_PREFETCH;\
+       type VRATIO_PREFETCH;\
+       type DST_Y_PER_VM_VBLANK;\
+       type DST_Y_PER_ROW_VBLANK;\
+       type REF_FREQ_TO_PIX_FREQ;\
+       type REFCYC_PER_PTE_GROUP_VBLANK_L;\
+       type REFCYC_PER_META_CHUNK_VBLANK_L;\
+       type DST_Y_PER_PTE_ROW_NOM_L;\
+       type REFCYC_PER_PTE_GROUP_NOM_L;\
+       type DST_Y_PER_META_ROW_NOM_L;\
+       type REFCYC_PER_META_CHUNK_NOM_L;\
+       type REFCYC_PER_LINE_DELIVERY_PRE_L;\
+       type REFCYC_PER_LINE_DELIVERY_PRE_C;\
+       type REFCYC_PER_LINE_DELIVERY_L;\
+       type REFCYC_PER_LINE_DELIVERY_C;\
+       type VRATIO_PREFETCH_C;\
+       type REFCYC_PER_PTE_GROUP_VBLANK_C;\
+       type REFCYC_PER_META_CHUNK_VBLANK_C;\
+       type DST_Y_PER_PTE_ROW_NOM_C;\
+       type REFCYC_PER_PTE_GROUP_NOM_C;\
+       type DST_Y_PER_META_ROW_NOM_C;\
+       type REFCYC_PER_META_CHUNK_NOM_C;\
+       type QoS_LEVEL_LOW_WM;\
+       type QoS_LEVEL_HIGH_WM;\
+       type MIN_TTU_VBLANK;\
+       type QoS_LEVEL_FLIP;\
+       type REFCYC_PER_REQ_DELIVERY;\
+       type QoS_LEVEL_FIXED;\
+       type QoS_RAMP_DISABLE;\
+       type REFCYC_PER_REQ_DELIVERY_PRE;\
+       type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB;\
+       type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB;\
+       type VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB;\
+       type VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB;\
+       type VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB;\
+       type VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB;\
+       type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB;\
+       type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_SYSTEM;\
+       type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB;\
+       type ENABLE_L1_TLB;\
+       type SYSTEM_ACCESS_MODE;\
+       type HUBP_CLOCK_ENABLE;\
+       type MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\
+       type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\
+       type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\
+       type MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB;\
+       type MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB;\
+       type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB;\
+       type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;\
+       type MC_VM_SYSTEM_APERTURE_LOW_ADDR;\
+       type MC_VM_SYSTEM_APERTURE_HIGH_ADDR;\
+       type DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\
+       type DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\
+       type DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\
+       /* todo:  get these from GVM instead of reading registers ourselves */\
+       type PAGE_DIRECTORY_ENTRY_HI32;\
+       type PAGE_DIRECTORY_ENTRY_LO32;\
+       type LOGICAL_PAGE_NUMBER_HI4;\
+       type LOGICAL_PAGE_NUMBER_LO32;\
+       type PHYSICAL_PAGE_ADDR_HI4;\
+       type PHYSICAL_PAGE_ADDR_LO32;\
+       type PHYSICAL_PAGE_NUMBER_MSB;\
+       type PHYSICAL_PAGE_NUMBER_LSB;\
+       type LOGICAL_ADDR;\
+       type CURSOR0_DST_Y_OFFSET; \
+       type CURSOR0_CHUNK_HDL_ADJUST; \
+       type CURSOR_SURFACE_ADDRESS_HIGH; \
+       type CURSOR_SURFACE_ADDRESS; \
+       type CURSOR_WIDTH; \
+       type CURSOR_HEIGHT; \
+       type CURSOR_MODE; \
+       type CURSOR_2X_MAGNIFY; \
+       type CURSOR_PITCH; \
+       type CURSOR_LINES_PER_CHUNK; \
+       type CURSOR_ENABLE; \
+       type CURSOR_X_POSITION; \
+       type CURSOR_Y_POSITION; \
+       type CURSOR_HOT_SPOT_X; \
+       type CURSOR_HOT_SPOT_Y; \
+       type CURSOR_DST_X_OFFSET; \
+       type OUTPUT_FP
+
+#define DCN_HUBP_REG_FIELD_LIST(type) \
+       DCN_HUBP_REG_FIELD_BASE_LIST(type);\
+       type ALPHA_PLANE_EN
+
+struct dcn_mi_registers {
+       HUBP_COMMON_REG_VARIABLE_LIST;
+};
+
+struct dcn_mi_shift {
+       DCN_HUBP_REG_FIELD_LIST(uint8_t);
+};
+
+struct dcn_mi_mask {
+       DCN_HUBP_REG_FIELD_LIST(uint32_t);
+};
+
+struct dcn_hubp_state {
+       struct _vcs_dpi_display_dlg_regs_st dlg_attr;
+       struct _vcs_dpi_display_ttu_regs_st ttu_attr;
+       struct _vcs_dpi_display_rq_regs_st rq_regs;
+       uint32_t pixel_format;
+       uint32_t inuse_addr_hi;
+       uint32_t inuse_addr_lo;
+       uint32_t viewport_width;
+       uint32_t viewport_height;
+       uint32_t rotation_angle;
+       uint32_t h_mirror_en;
+       uint32_t sw_mode;
+       uint32_t dcc_en;
+       uint32_t blank_en;
+       uint32_t clock_en;
+       uint32_t underflow_status;
+       uint32_t ttu_disable;
+       uint32_t min_ttu_vblank;
+       uint32_t qos_level_low_wm;
+       uint32_t qos_level_high_wm;
+       uint32_t primary_surface_addr_lo;
+       uint32_t primary_surface_addr_hi;
+       uint32_t primary_meta_addr_lo;
+       uint32_t primary_meta_addr_hi;
+       uint32_t uclk_pstate_force;
+       uint32_t hubp_cntl;
+       uint32_t flip_control;
+};
+
+struct dcn10_hubp {
+       struct hubp base;
+       struct dcn_hubp_state state;
+       const struct dcn_mi_registers *hubp_regs;
+       const struct dcn_mi_shift *hubp_shift;
+       const struct dcn_mi_mask *hubp_mask;
+};
+
+void hubp1_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level);
+
+void hubp1_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
+
+void hubp1_program_requestor(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs);
+
+void hubp1_program_pixel_format(
+       struct hubp *hubp,
+       enum surface_pixel_format format);
+
+void hubp1_program_size(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       const struct plane_size *plane_size,
+       struct dc_plane_dcc_param *dcc);
+
+void hubp1_program_rotation(
+       struct hubp *hubp,
+       enum dc_rotation_angle rotation,
+       bool horizontal_mirror);
+
+void hubp1_program_tiling(
+       struct hubp *hubp,
+       const union dc_tiling_info *info,
+       const enum surface_pixel_format pixel_format);
+
+void hubp1_dcc_control(struct hubp *hubp,
+               bool enable,
+               enum hubp_ind_block_size independent_64b_blks);
+
+bool hubp1_program_surface_flip_and_addr(
+       struct hubp *hubp,
+       const struct dc_plane_address *address,
+       bool flip_immediate);
+
+bool hubp1_is_flip_pending(struct hubp *hubp);
+
+void hubp1_cursor_set_attributes(
+               struct hubp *hubp,
+               const struct dc_cursor_attributes *attr);
+
+void hubp1_cursor_set_position(
+               struct hubp *hubp,
+               const struct dc_cursor_position *pos,
+               const struct dc_cursor_mi_param *param);
+
+void hubp1_set_blank(struct hubp *hubp, bool blank);
+
+void min_set_viewport(struct hubp *hubp,
+               const struct rect *viewport,
+               const struct rect *viewport_c);
+
+void hubp1_clk_cntl(struct hubp *hubp, bool enable);
+void hubp1_vtg_sel(struct hubp *hubp, uint32_t otg_inst);
+
+void dcn10_hubp_construct(
+       struct dcn10_hubp *hubp1,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_mi_registers *hubp_regs,
+       const struct dcn_mi_shift *hubp_shift,
+       const struct dcn_mi_mask *hubp_mask);
+
+void hubp1_read_state(struct hubp *hubp);
+void hubp1_clear_underflow(struct hubp *hubp);
+
+enum cursor_pitch hubp1_get_cursor_pitch(unsigned int pitch);
+
+void hubp1_vready_workaround(struct hubp *hubp,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
+
+void hubp1_init(struct hubp *hubp);
+void hubp1_read_state_common(struct hubp *hubp);
+bool hubp1_in_blank(struct hubp *hubp);
+void hubp1_soft_reset(struct hubp *hubp, bool reset);
+
+void hubp1_set_flip_int(struct hubp *hubp);
+
+#endif
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn20/dcn20_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn20/dcn20_hubp.c
new file mode 100644 (file)
index 0000000..6bba020
--- /dev/null
@@ -0,0 +1,1699 @@
+/*
+ * Copyright 2012-2021 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#include "dcn20_hubp.h"
+
+#include "dm_services.h"
+#include "dce_calcs.h"
+#include "reg_helper.h"
+#include "basics/conversion.h"
+
+#define DC_LOGGER \
+       ctx->logger
+#define DC_LOGGER_INIT(logger)
+
+#define REG(reg)\
+       hubp2->hubp_regs->reg
+
+#define CTX \
+       hubp2->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
+
+void hubp2_set_vm_system_aperture_settings(struct hubp *hubp,
+               struct vm_system_aperture_param *apt)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_default;
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
+
+       // The format of default addr is 48:12 of the 48 bit addr
+       mc_vm_apt_default.quad_part = apt->sys_default.quad_part >> 12;
+
+       // The format of high/low are 48:18 of the 48 bit addr
+       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 18;
+       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 18;
+
+       REG_UPDATE_2(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB,
+               DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, 1, /* 1 = system physical memory */
+               DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mc_vm_apt_default.high_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, 0,
+                       DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mc_vm_apt_default.low_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, 0,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, mc_vm_apt_low.quad_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, 0,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mc_vm_apt_high.quad_part);
+
+       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
+                       ENABLE_L1_TLB, 1,
+                       SYSTEM_ACCESS_MODE, 0x3);
+}
+
+void hubp2_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       /* DLG - Per hubp */
+       REG_SET_2(BLANK_OFFSET_0, 0,
+               REFCYC_H_BLANK_END, dlg_attr->refcyc_h_blank_end,
+               DLG_V_BLANK_END, dlg_attr->dlg_vblank_end);
+
+       REG_SET(BLANK_OFFSET_1, 0,
+               MIN_DST_Y_NEXT_START, dlg_attr->min_dst_y_next_start);
+
+       REG_SET(DST_DIMENSIONS, 0,
+               REFCYC_PER_HTOTAL, dlg_attr->refcyc_per_htotal);
+
+       REG_SET_2(DST_AFTER_SCALER, 0,
+               REFCYC_X_AFTER_SCALER, dlg_attr->refcyc_x_after_scaler,
+               DST_Y_AFTER_SCALER, dlg_attr->dst_y_after_scaler);
+
+       REG_SET(REF_FREQ_TO_PIX_FREQ, 0,
+               REF_FREQ_TO_PIX_FREQ, dlg_attr->ref_freq_to_pix_freq);
+
+       /* DLG - Per luma/chroma */
+       REG_SET(VBLANK_PARAMETERS_1, 0,
+               REFCYC_PER_PTE_GROUP_VBLANK_L, dlg_attr->refcyc_per_pte_group_vblank_l);
+
+       if (REG(NOM_PARAMETERS_0))
+               REG_SET(NOM_PARAMETERS_0, 0,
+                       DST_Y_PER_PTE_ROW_NOM_L, dlg_attr->dst_y_per_pte_row_nom_l);
+
+       if (REG(NOM_PARAMETERS_1))
+               REG_SET(NOM_PARAMETERS_1, 0,
+                       REFCYC_PER_PTE_GROUP_NOM_L, dlg_attr->refcyc_per_pte_group_nom_l);
+
+       REG_SET(NOM_PARAMETERS_4, 0,
+               DST_Y_PER_META_ROW_NOM_L, dlg_attr->dst_y_per_meta_row_nom_l);
+
+       REG_SET(NOM_PARAMETERS_5, 0,
+               REFCYC_PER_META_CHUNK_NOM_L, dlg_attr->refcyc_per_meta_chunk_nom_l);
+
+       REG_SET_2(PER_LINE_DELIVERY, 0,
+               REFCYC_PER_LINE_DELIVERY_L, dlg_attr->refcyc_per_line_delivery_l,
+               REFCYC_PER_LINE_DELIVERY_C, dlg_attr->refcyc_per_line_delivery_c);
+
+       REG_SET(VBLANK_PARAMETERS_2, 0,
+               REFCYC_PER_PTE_GROUP_VBLANK_C, dlg_attr->refcyc_per_pte_group_vblank_c);
+
+       if (REG(NOM_PARAMETERS_2))
+               REG_SET(NOM_PARAMETERS_2, 0,
+                       DST_Y_PER_PTE_ROW_NOM_C, dlg_attr->dst_y_per_pte_row_nom_c);
+
+       if (REG(NOM_PARAMETERS_3))
+               REG_SET(NOM_PARAMETERS_3, 0,
+                       REFCYC_PER_PTE_GROUP_NOM_C, dlg_attr->refcyc_per_pte_group_nom_c);
+
+       REG_SET(NOM_PARAMETERS_6, 0,
+               DST_Y_PER_META_ROW_NOM_C, dlg_attr->dst_y_per_meta_row_nom_c);
+
+       REG_SET(NOM_PARAMETERS_7, 0,
+               REFCYC_PER_META_CHUNK_NOM_C, dlg_attr->refcyc_per_meta_chunk_nom_c);
+
+       /* TTU - per hubp */
+       REG_SET_2(DCN_TTU_QOS_WM, 0,
+               QoS_LEVEL_LOW_WM, ttu_attr->qos_level_low_wm,
+               QoS_LEVEL_HIGH_WM, ttu_attr->qos_level_high_wm);
+
+       /* TTU - per luma/chroma */
+       /* Assumed surf0 is luma and 1 is chroma */
+
+       REG_SET_3(DCN_SURF0_TTU_CNTL0, 0,
+               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_l,
+               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_l,
+               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_l);
+
+       REG_SET_3(DCN_SURF1_TTU_CNTL0, 0,
+               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_c,
+               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_c,
+               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_c);
+
+       REG_SET_3(DCN_CUR0_TTU_CNTL0, 0,
+               REFCYC_PER_REQ_DELIVERY, ttu_attr->refcyc_per_req_delivery_cur0,
+               QoS_LEVEL_FIXED, ttu_attr->qos_level_fixed_cur0,
+               QoS_RAMP_DISABLE, ttu_attr->qos_ramp_disable_cur0);
+
+       REG_SET(FLIP_PARAMETERS_1, 0,
+               REFCYC_PER_PTE_GROUP_FLIP_L, dlg_attr->refcyc_per_pte_group_flip_l);
+}
+
+void hubp2_vready_at_or_After_vsync(struct hubp *hubp,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       uint32_t value = 0;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       /* disable_dlg_test_mode Set 9th bit to 1 to disable "dv" mode */
+       REG_WRITE(HUBPREQ_DEBUG_DB, 1 << 8);
+       /*
+       if (VSTARTUP_START - (VREADY_OFFSET+VUPDATE_WIDTH+VUPDATE_OFFSET)/htotal)
+       <= OTG_V_BLANK_END
+               Set HUBP_VREADY_AT_OR_AFTER_VSYNC = 1
+       else
+               Set HUBP_VREADY_AT_OR_AFTER_VSYNC = 0
+       */
+       if (pipe_dest->htotal != 0) {
+               if ((pipe_dest->vstartup_start - (pipe_dest->vready_offset+pipe_dest->vupdate_width
+                       + pipe_dest->vupdate_offset) / pipe_dest->htotal) <= pipe_dest->vblank_end) {
+                       value = 1;
+               } else
+                       value = 0;
+       }
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, value);
+}
+
+static void hubp2_program_requestor(struct hubp *hubp,
+                                   struct _vcs_dpi_display_rq_regs_st *rq_regs)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(HUBPRET_CONTROL,
+                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
+       REG_SET_4(DCN_EXPANSION_MODE, 0,
+                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
+                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
+                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
+                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
+       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG, 0,
+               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, rq_regs->rq_regs_l.dpte_group_size,
+               MPTE_GROUP_SIZE, rq_regs->rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, rq_regs->rq_regs_l.pte_row_height_linear);
+       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG_C, 0,
+               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.dpte_group_size,
+               MPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.mpte_group_size,
+               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, rq_regs->rq_regs_c.pte_row_height_linear);
+}
+
+static void hubp2_setup(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       /* otg is locked when this func is called. Register are double buffered.
+        * disable the requestors is not needed
+        */
+
+       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
+       hubp2_program_requestor(hubp, rq_regs);
+       hubp2_program_deadline(hubp, dlg_attr, ttu_attr);
+
+}
+
+void hubp2_setup_interdependent(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_SET_2(PREFETCH_SETTINGS, 0,
+                       DST_Y_PREFETCH, dlg_attr->dst_y_prefetch,
+                       VRATIO_PREFETCH, dlg_attr->vratio_prefetch);
+
+       REG_SET(PREFETCH_SETTINGS_C, 0,
+                       VRATIO_PREFETCH_C, dlg_attr->vratio_prefetch_c);
+
+       REG_SET_2(VBLANK_PARAMETERS_0, 0,
+               DST_Y_PER_VM_VBLANK, dlg_attr->dst_y_per_vm_vblank,
+               DST_Y_PER_ROW_VBLANK, dlg_attr->dst_y_per_row_vblank);
+
+       REG_SET_2(FLIP_PARAMETERS_0, 0,
+               DST_Y_PER_VM_FLIP, dlg_attr->dst_y_per_vm_flip,
+               DST_Y_PER_ROW_FLIP, dlg_attr->dst_y_per_row_flip);
+
+       REG_SET(VBLANK_PARAMETERS_3, 0,
+               REFCYC_PER_META_CHUNK_VBLANK_L, dlg_attr->refcyc_per_meta_chunk_vblank_l);
+
+       REG_SET(VBLANK_PARAMETERS_4, 0,
+               REFCYC_PER_META_CHUNK_VBLANK_C, dlg_attr->refcyc_per_meta_chunk_vblank_c);
+
+       REG_SET(FLIP_PARAMETERS_2, 0,
+               REFCYC_PER_META_CHUNK_FLIP_L, dlg_attr->refcyc_per_meta_chunk_flip_l);
+
+       REG_SET_2(PER_LINE_DELIVERY_PRE, 0,
+               REFCYC_PER_LINE_DELIVERY_PRE_L, dlg_attr->refcyc_per_line_delivery_pre_l,
+               REFCYC_PER_LINE_DELIVERY_PRE_C, dlg_attr->refcyc_per_line_delivery_pre_c);
+
+       REG_SET(DCN_SURF0_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               ttu_attr->refcyc_per_req_delivery_pre_l);
+       REG_SET(DCN_SURF1_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               ttu_attr->refcyc_per_req_delivery_pre_c);
+       REG_SET(DCN_CUR0_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE, ttu_attr->refcyc_per_req_delivery_pre_cur0);
+       REG_SET(DCN_CUR1_TTU_CNTL1, 0,
+               REFCYC_PER_REQ_DELIVERY_PRE, ttu_attr->refcyc_per_req_delivery_pre_cur1);
+
+       REG_SET_2(DCN_GLOBAL_TTU_CNTL, 0,
+               MIN_TTU_VBLANK, ttu_attr->min_ttu_vblank,
+               QoS_LEVEL_FLIP, ttu_attr->qos_level_flip);
+}
+
+/* DCN2 (GFX10), the following GFX fields are deprecated. They can be set but they will not be used:
+ *     NUM_BANKS
+ *     NUM_SE
+ *     NUM_RB_PER_SE
+ *     RB_ALIGNED
+ * Other things can be defaulted, since they never change:
+ *     PIPE_ALIGNED = 0
+ *     META_LINEAR = 0
+ * In GFX10, only these apply:
+ *     PIPE_INTERLEAVE
+ *     NUM_PIPES
+ *     MAX_COMPRESSED_FRAGS
+ *     SW_MODE
+ */
+static void hubp2_program_tiling(
+       struct dcn20_hubp *hubp2,
+       const union dc_tiling_info *info,
+       const enum surface_pixel_format pixel_format)
+{
+       REG_UPDATE_3(DCSURF_ADDR_CONFIG,
+                       NUM_PIPES, log_2(info->gfx9.num_pipes),
+                       PIPE_INTERLEAVE, info->gfx9.pipe_interleave,
+                       MAX_COMPRESSED_FRAGS, log_2(info->gfx9.max_compressed_frags));
+
+       REG_UPDATE_4(DCSURF_TILING_CONFIG,
+                       SW_MODE, info->gfx9.swizzle,
+                       META_LINEAR, 0,
+                       RB_ALIGNED, 0,
+                       PIPE_ALIGNED, 0);
+}
+
+void hubp2_program_size(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       const struct plane_size *plane_size,
+       struct dc_plane_dcc_param *dcc)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t pitch, meta_pitch, pitch_c, meta_pitch_c;
+       bool use_pitch_c = false;
+
+       /* Program data and meta surface pitch (calculation from addrlib)
+        * 444 or 420 luma
+        */
+       use_pitch_c = format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN
+               && format < SURFACE_PIXEL_FORMAT_SUBSAMPLE_END;
+       use_pitch_c = use_pitch_c
+               || (format == SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA);
+       if (use_pitch_c) {
+               ASSERT(plane_size->chroma_pitch != 0);
+               /* Chroma pitch zero can cause system hang! */
+
+               pitch = plane_size->surface_pitch - 1;
+               meta_pitch = dcc->meta_pitch - 1;
+               pitch_c = plane_size->chroma_pitch - 1;
+               meta_pitch_c = dcc->meta_pitch_c - 1;
+       } else {
+               pitch = plane_size->surface_pitch - 1;
+               meta_pitch = dcc->meta_pitch - 1;
+               pitch_c = 0;
+               meta_pitch_c = 0;
+       }
+
+       if (!dcc->enable) {
+               meta_pitch = 0;
+               meta_pitch_c = 0;
+       }
+
+       REG_UPDATE_2(DCSURF_SURFACE_PITCH,
+                       PITCH, pitch, META_PITCH, meta_pitch);
+
+       use_pitch_c = format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN;
+       use_pitch_c = use_pitch_c
+               || (format == SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA);
+       if (use_pitch_c)
+               REG_UPDATE_2(DCSURF_SURFACE_PITCH_C,
+                       PITCH_C, pitch_c, META_PITCH_C, meta_pitch_c);
+}
+
+void hubp2_program_rotation(
+       struct hubp *hubp,
+       enum dc_rotation_angle rotation,
+       bool horizontal_mirror)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t mirror;
+
+
+       if (horizontal_mirror)
+               mirror = 1;
+       else
+               mirror = 0;
+
+       /* Program rotation angle and horz mirror - no mirror */
+       if (rotation == ROTATION_ANGLE_0)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 0,
+                               H_MIRROR_EN, mirror);
+       else if (rotation == ROTATION_ANGLE_90)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 1,
+                               H_MIRROR_EN, mirror);
+       else if (rotation == ROTATION_ANGLE_180)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 2,
+                               H_MIRROR_EN, mirror);
+       else if (rotation == ROTATION_ANGLE_270)
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               ROTATION_ANGLE, 3,
+                               H_MIRROR_EN, mirror);
+}
+
+void hubp2_dcc_control(struct hubp *hubp, bool enable,
+               enum hubp_ind_block_size independent_64b_blks)
+{
+       uint32_t dcc_en = enable ? 1 : 0;
+       uint32_t dcc_ind_64b_blk = independent_64b_blks ? 1 : 0;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                       PRIMARY_SURFACE_DCC_EN, dcc_en,
+                       PRIMARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk,
+                       SECONDARY_SURFACE_DCC_EN, dcc_en,
+                       SECONDARY_SURFACE_DCC_IND_64B_BLK, dcc_ind_64b_blk);
+}
+
+void hubp2_program_pixel_format(
+       struct hubp *hubp,
+       enum surface_pixel_format format)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t red_bar = 3;
+       uint32_t blue_bar = 2;
+
+       /* swap for ABGR format */
+       if (format == SURFACE_PIXEL_FORMAT_GRPH_ABGR8888
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F) {
+               red_bar = 2;
+               blue_bar = 3;
+       }
+
+       REG_UPDATE_2(HUBPRET_CONTROL,
+                       CROSSBAR_SRC_CB_B, blue_bar,
+                       CROSSBAR_SRC_CR_R, red_bar);
+
+       /* Mapping is same as ipp programming (cnvc) */
+
+       switch (format) {
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 1);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 3);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 8);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB2101010:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 10);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616: /*we use crossbar already*/
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 26); /* ARGB16161616_UNORM */
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F:/*we use crossbar already*/
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 24);
+               break;
+
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 65);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 64);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCbCr:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 67);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCrCb:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 66);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_AYCrCb8888:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 12);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FIX:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 112);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FIX:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 113);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_ACrYCb2101010:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 114);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FLOAT:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 118);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FLOAT:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 119);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGBE:
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 116,
+                               ALPHA_PLANE_EN, 0);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA:
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 116,
+                               ALPHA_PLANE_EN, 1);
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       /* don't see the need of program the xbar in DCN 1.0 */
+}
+
+void hubp2_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       hubp2_dcc_control(hubp, dcc->enable, dcc->independent_64b_blks);
+       hubp2_program_tiling(hubp2, tiling_info, format);
+       hubp2_program_size(hubp, format, plane_size, dcc);
+       hubp2_program_rotation(hubp, rotation, horizontal_mirror);
+       hubp2_program_pixel_format(hubp, format);
+}
+
+enum cursor_lines_per_chunk hubp2_get_lines_per_chunk(
+       unsigned int cursor_width,
+       enum dc_cursor_color_format cursor_mode)
+{
+       enum cursor_lines_per_chunk line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
+
+       if (cursor_mode == CURSOR_MODE_MONO)
+               line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
+       else if (cursor_mode == CURSOR_MODE_COLOR_1BIT_AND ||
+                cursor_mode == CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA ||
+                cursor_mode == CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA) {
+               if (cursor_width >= 1   && cursor_width <= 32)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
+               else if (cursor_width >= 33  && cursor_width <= 64)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
+               else if (cursor_width >= 65  && cursor_width <= 128)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
+               else if (cursor_width >= 129 && cursor_width <= 256)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
+       } else if (cursor_mode == CURSOR_MODE_COLOR_64BIT_FP_PRE_MULTIPLIED ||
+                  cursor_mode == CURSOR_MODE_COLOR_64BIT_FP_UN_PRE_MULTIPLIED) {
+               if (cursor_width >= 1   && cursor_width <= 16)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
+               else if (cursor_width >= 17  && cursor_width <= 32)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
+               else if (cursor_width >= 33  && cursor_width <= 64)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
+               else if (cursor_width >= 65 && cursor_width <= 128)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
+               else if (cursor_width >= 129 && cursor_width <= 256)
+                       line_per_chunk = CURSOR_LINE_PER_CHUNK_1;
+       }
+
+       return line_per_chunk;
+}
+
+void hubp2_cursor_set_attributes(
+               struct hubp *hubp,
+               const struct dc_cursor_attributes *attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       enum cursor_pitch hw_pitch = hubp1_get_cursor_pitch(attr->pitch);
+       enum cursor_lines_per_chunk lpc = hubp2_get_lines_per_chunk(
+                       attr->width, attr->color_format);
+
+       hubp->curs_attr = *attr;
+
+       REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
+                       CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
+       REG_UPDATE(CURSOR_SURFACE_ADDRESS,
+                       CURSOR_SURFACE_ADDRESS, attr->address.low_part);
+
+       REG_UPDATE_2(CURSOR_SIZE,
+                       CURSOR_WIDTH, attr->width,
+                       CURSOR_HEIGHT, attr->height);
+
+       REG_UPDATE_4(CURSOR_CONTROL,
+                       CURSOR_MODE, attr->color_format,
+                       CURSOR_2X_MAGNIFY, attr->attribute_flags.bits.ENABLE_MAGNIFICATION,
+                       CURSOR_PITCH, hw_pitch,
+                       CURSOR_LINES_PER_CHUNK, lpc);
+
+       REG_SET_2(CURSOR_SETTINGS, 0,
+                       /* no shift of the cursor HDL schedule */
+                       CURSOR0_DST_Y_OFFSET, 0,
+                        /* used to shift the cursor chunk request deadline */
+                       CURSOR0_CHUNK_HDL_ADJUST, 3);
+
+       hubp->att.SURFACE_ADDR_HIGH  = attr->address.high_part;
+       hubp->att.SURFACE_ADDR       = attr->address.low_part;
+       hubp->att.size.bits.width    = attr->width;
+       hubp->att.size.bits.height   = attr->height;
+       hubp->att.cur_ctl.bits.mode  = attr->color_format;
+
+       hubp->cur_rect.w = attr->width;
+       hubp->cur_rect.h = attr->height;
+
+       hubp->att.cur_ctl.bits.pitch = hw_pitch;
+       hubp->att.cur_ctl.bits.line_per_chunk = lpc;
+       hubp->att.cur_ctl.bits.cur_2x_magnify = attr->attribute_flags.bits.ENABLE_MAGNIFICATION;
+       hubp->att.settings.bits.dst_y_offset  = 0;
+       hubp->att.settings.bits.chunk_hdl_adjust = 3;
+}
+
+void hubp2_dmdata_set_attributes(
+               struct hubp *hubp,
+               const struct dc_dmdata_attributes *attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       if (attr->dmdata_mode == DMDATA_HW_MODE) {
+               /* set to HW mode */
+               REG_UPDATE(DMDATA_CNTL,
+                               DMDATA_MODE, 1);
+
+               /* for DMDATA flip, need to use SURFACE_UPDATE_LOCK */
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 1);
+
+               /* toggle DMDATA_UPDATED and set repeat and size */
+               REG_UPDATE(DMDATA_CNTL,
+                               DMDATA_UPDATED, 0);
+               REG_UPDATE_3(DMDATA_CNTL,
+                               DMDATA_UPDATED, 1,
+                               DMDATA_REPEAT, attr->dmdata_repeat,
+                               DMDATA_SIZE, attr->dmdata_size);
+
+               /* set DMDATA address */
+               REG_WRITE(DMDATA_ADDRESS_LOW, attr->address.low_part);
+               REG_UPDATE(DMDATA_ADDRESS_HIGH,
+                               DMDATA_ADDRESS_HIGH, attr->address.high_part);
+
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 0);
+
+       } else {
+               /* set to SW mode before loading data */
+               REG_SET(DMDATA_CNTL, 0,
+                               DMDATA_MODE, 0);
+               /* toggle DMDATA_SW_UPDATED to start loading sequence */
+               REG_UPDATE(DMDATA_SW_CNTL,
+                               DMDATA_SW_UPDATED, 0);
+               REG_UPDATE_3(DMDATA_SW_CNTL,
+                               DMDATA_SW_UPDATED, 1,
+                               DMDATA_SW_REPEAT, attr->dmdata_repeat,
+                               DMDATA_SW_SIZE, attr->dmdata_size);
+               /* load data into hubp dmdata buffer */
+               hubp2_dmdata_load(hubp, attr->dmdata_size, attr->dmdata_sw_data);
+       }
+
+       /* Note that DL_DELTA must be programmed if we want to use TTU mode */
+       REG_SET_3(DMDATA_QOS_CNTL, 0,
+                       DMDATA_QOS_MODE, attr->dmdata_qos_mode,
+                       DMDATA_QOS_LEVEL, attr->dmdata_qos_level,
+                       DMDATA_DL_DELTA, attr->dmdata_dl_delta);
+}
+
+void hubp2_dmdata_load(
+               struct hubp *hubp,
+               uint32_t dmdata_sw_size,
+               const uint32_t *dmdata_sw_data)
+{
+       int i;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       /* load dmdata into HUBP buffer in SW mode */
+       for (i = 0; i < dmdata_sw_size / 4; i++)
+               REG_WRITE(DMDATA_SW_DATA, dmdata_sw_data[i]);
+}
+
+bool hubp2_dmdata_status_done(struct hubp *hubp)
+{
+       uint32_t status;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_GET(DMDATA_STATUS, DMDATA_DONE, &status);
+       return (status == 1);
+}
+
+bool hubp2_program_surface_flip_and_addr(
+       struct hubp *hubp,
+       const struct dc_plane_address *address,
+       bool flip_immediate)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       //program flip type
+       REG_UPDATE(DCSURF_FLIP_CONTROL,
+                       SURFACE_FLIP_TYPE, flip_immediate);
+
+       // Program VMID reg
+       REG_UPDATE(VMID_SETTINGS_0,
+                       VMID, address->vmid);
+
+
+       /* HW automatically latch rest of address register on write to
+        * DCSURF_PRIMARY_SURFACE_ADDRESS if SURFACE_UPDATE_LOCK is not used
+        *
+        * program high first and then the low addr, order matters!
+        */
+       switch (address->type) {
+       case PLN_ADDR_TYPE_GRAPHICS:
+               /* DCN1.0 does not support const color
+                * TODO: program DCHUBBUB_RET_PATH_DCC_CFGx_0/1
+                * base on address->grph.dcc_const_color
+                * x = 0, 2, 4, 6 for pipe 0, 1, 2, 3 for rgb and luma
+                * x = 1, 3, 5, 7 for pipe 0, 1, 2, 3 for chroma
+                */
+
+               if (address->grph.addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_2(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface);
+
+               if (address->grph.meta_addr.quad_part != 0) {
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph.meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->grph.meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->grph.addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->grph.addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
+               if (address->video_progressive.luma_addr.quad_part == 0
+                               || address->video_progressive.chroma_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
+                                       address->video_progressive.chroma_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_C,
+                                       address->video_progressive.chroma_meta_addr.low_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->video_progressive.luma_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->video_progressive.luma_meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
+                               address->video_progressive.chroma_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_C,
+                               address->video_progressive.chroma_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->video_progressive.luma_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->video_progressive.luma_addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_GRPH_STEREO:
+               if (address->grph_stereo.left_addr.quad_part == 0)
+                       break;
+               if (address->grph_stereo.right_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface,
+                               SECONDARY_SURFACE_TMZ, address->tmz_surface,
+                               SECONDARY_SURFACE_TMZ_C, address->tmz_surface,
+                               SECONDARY_META_SURFACE_TMZ, address->tmz_surface,
+                               SECONDARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph_stereo.right_meta_addr.high_part);
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
+                                       SECONDARY_META_SURFACE_ADDRESS,
+                                       address->grph_stereo.right_meta_addr.low_part);
+               }
+               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph_stereo.left_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->grph_stereo.left_meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
+                               SECONDARY_SURFACE_ADDRESS_HIGH,
+                               address->grph_stereo.right_addr.high_part);
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
+                               SECONDARY_SURFACE_ADDRESS,
+                               address->grph_stereo.right_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->grph_stereo.left_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->grph_stereo.left_addr.low_part);
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       hubp->request_address = *address;
+
+       return true;
+}
+
+void hubp2_enable_triplebuffer(
+       struct hubp *hubp,
+       bool enable)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t triple_buffer_en = 0;
+       bool tri_buffer_en;
+
+       REG_GET(DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, &triple_buffer_en);
+       tri_buffer_en = (triple_buffer_en == 1);
+       if (tri_buffer_en != enable) {
+               REG_UPDATE(DCSURF_FLIP_CONTROL2,
+                       SURFACE_TRIPLE_BUFFER_ENABLE, enable ? DC_TRIPLEBUFFER_ENABLE : DC_TRIPLEBUFFER_DISABLE);
+       }
+}
+
+bool hubp2_is_triplebuffer_enabled(
+       struct hubp *hubp)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t triple_buffer_en = 0;
+
+       REG_GET(DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, &triple_buffer_en);
+
+       return (bool)triple_buffer_en;
+}
+
+void hubp2_set_flip_control_surface_gsl(struct hubp *hubp, bool enable)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, enable ? 1 : 0);
+}
+
+bool hubp2_is_flip_pending(struct hubp *hubp)
+{
+       uint32_t flip_pending = 0;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       struct dc_plane_address earliest_inuse_address;
+
+       if (hubp && hubp->power_gated)
+               return false;
+
+       REG_GET(DCSURF_FLIP_CONTROL,
+                       SURFACE_FLIP_PENDING, &flip_pending);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
+                       SURFACE_EARLIEST_INUSE_ADDRESS, &earliest_inuse_address.grph.addr.low_part);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
+                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &earliest_inuse_address.grph.addr.high_part);
+
+       if (flip_pending)
+               return true;
+
+       if (earliest_inuse_address.grph.addr.quad_part != hubp->request_address.grph.addr.quad_part)
+               return true;
+
+       return false;
+}
+
+void hubp2_set_blank(struct hubp *hubp, bool blank)
+{
+       hubp2_set_blank_regs(hubp, blank);
+
+       if (blank) {
+               hubp->mpcc_id = 0xf;
+               hubp->opp_id = OPP_ID_INVALID;
+       }
+}
+
+void hubp2_set_blank_regs(struct hubp *hubp, bool blank)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t blank_en = blank ? 1 : 0;
+
+       if (blank) {
+               uint32_t reg_val = REG_READ(DCHUBP_CNTL);
+
+               if (reg_val) {
+                       /* init sequence workaround: in case HUBP is
+                        * power gated, this wait would timeout.
+                        *
+                        * we just wrote reg_val to non-0, if it stay 0
+                        * it means HUBP is gated
+                        */
+                       REG_WAIT(DCHUBP_CNTL,
+                                       HUBP_NO_OUTSTANDING_REQ, 1,
+                                       1, 100000);
+               }
+       }
+
+       REG_UPDATE_2(DCHUBP_CNTL,
+                       HUBP_BLANK_EN, blank_en,
+                       HUBP_TTU_DISABLE, 0);
+}
+
+void hubp2_cursor_set_position(
+               struct hubp *hubp,
+               const struct dc_cursor_position *pos,
+               const struct dc_cursor_mi_param *param)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       int x_pos = pos->x - param->viewport.x;
+       int y_pos = pos->y - param->viewport.y;
+       int x_hotspot = pos->x_hotspot;
+       int y_hotspot = pos->y_hotspot;
+       int src_x_offset = x_pos - pos->x_hotspot;
+       int src_y_offset = y_pos - pos->y_hotspot;
+       int cursor_height = (int)hubp->curs_attr.height;
+       int cursor_width = (int)hubp->curs_attr.width;
+       uint32_t dst_x_offset;
+       uint32_t cur_en = pos->enable ? 1 : 0;
+
+       hubp->curs_pos = *pos;
+
+       /*
+        * Guard aganst cursor_set_position() from being called with invalid
+        * attributes
+        *
+        * TODO: Look at combining cursor_set_position() and
+        * cursor_set_attributes() into cursor_update()
+        */
+       if (hubp->curs_attr.address.quad_part == 0)
+               return;
+
+       // Transform cursor width / height and hotspots for offset calculations
+       if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) {
+               swap(cursor_height, cursor_width);
+               swap(x_hotspot, y_hotspot);
+
+               if (param->rotation == ROTATION_ANGLE_90) {
+                       // hotspot = (-y, x)
+                       src_x_offset = x_pos - (cursor_width - x_hotspot);
+                       src_y_offset = y_pos - y_hotspot;
+               } else if (param->rotation == ROTATION_ANGLE_270) {
+                       // hotspot = (y, -x)
+                       src_x_offset = x_pos - x_hotspot;
+                       src_y_offset = y_pos - (cursor_height - y_hotspot);
+               }
+       } else if (param->rotation == ROTATION_ANGLE_180) {
+               // hotspot = (-x, -y)
+               if (!param->mirror)
+                       src_x_offset = x_pos - (cursor_width - x_hotspot);
+
+               src_y_offset = y_pos - (cursor_height - y_hotspot);
+       }
+
+       dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0;
+       dst_x_offset *= param->ref_clk_khz;
+       dst_x_offset /= param->pixel_clk_khz;
+
+       ASSERT(param->h_scale_ratio.value);
+
+       if (param->h_scale_ratio.value)
+               dst_x_offset = dc_fixpt_floor(dc_fixpt_div(
+                               dc_fixpt_from_int(dst_x_offset),
+                               param->h_scale_ratio));
+
+       if (src_x_offset >= (int)param->viewport.width)
+               cur_en = 0;  /* not visible beyond right edge*/
+
+       if (src_x_offset + cursor_width <= 0)
+               cur_en = 0;  /* not visible beyond left edge*/
+
+       if (src_y_offset >= (int)param->viewport.height)
+               cur_en = 0;  /* not visible beyond bottom edge*/
+
+       if (src_y_offset + cursor_height <= 0)
+               cur_en = 0;  /* not visible beyond top edge*/
+
+       if (cur_en && REG_READ(CURSOR_SURFACE_ADDRESS) == 0)
+               hubp->funcs->set_cursor_attributes(hubp, &hubp->curs_attr);
+
+       REG_UPDATE(CURSOR_CONTROL,
+                       CURSOR_ENABLE, cur_en);
+
+       REG_SET_2(CURSOR_POSITION, 0,
+                       CURSOR_X_POSITION, pos->x,
+                       CURSOR_Y_POSITION, pos->y);
+
+       REG_SET_2(CURSOR_HOT_SPOT, 0,
+                       CURSOR_HOT_SPOT_X, pos->x_hotspot,
+                       CURSOR_HOT_SPOT_Y, pos->y_hotspot);
+
+       REG_SET(CURSOR_DST_OFFSET, 0,
+                       CURSOR_DST_X_OFFSET, dst_x_offset);
+       /* TODO Handle surface pixel formats other than 4:4:4 */
+       /* Cursor Position Register Config */
+       hubp->pos.cur_ctl.bits.cur_enable = cur_en;
+       hubp->pos.position.bits.x_pos = pos->x;
+       hubp->pos.position.bits.y_pos = pos->y;
+       hubp->pos.hot_spot.bits.x_hot = pos->x_hotspot;
+       hubp->pos.hot_spot.bits.y_hot = pos->y_hotspot;
+       hubp->pos.dst_offset.bits.dst_x_offset = dst_x_offset;
+       /* Cursor Rectangle Cache
+        * Cursor bitmaps have different hotspot values
+        * There's a possibility that the above logic returns a negative value,
+        * so we clamp them to 0
+        */
+       if (src_x_offset < 0)
+               src_x_offset = 0;
+       if (src_y_offset < 0)
+               src_y_offset = 0;
+       /* Save necessary cursor info x, y position. w, h is saved in attribute func. */
+       if (param->stream->link->psr_settings.psr_version >= DC_PSR_VERSION_SU_1 &&
+           param->rotation != ROTATION_ANGLE_0) {
+               hubp->cur_rect.x = 0;
+               hubp->cur_rect.y = 0;
+               hubp->cur_rect.w = param->stream->timing.h_addressable;
+               hubp->cur_rect.h = param->stream->timing.v_addressable;
+       } else {
+               hubp->cur_rect.x = src_x_offset + param->viewport.x;
+               hubp->cur_rect.y = src_y_offset + param->viewport.y;
+       }
+}
+
+void hubp2_clk_cntl(struct hubp *hubp, bool enable)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t clk_enable = enable ? 1 : 0;
+
+       REG_UPDATE(HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, clk_enable);
+}
+
+void hubp2_vtg_sel(struct hubp *hubp, uint32_t otg_inst)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_VTG_SEL, otg_inst);
+}
+
+void hubp2_clear_underflow(struct hubp *hubp)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, 1);
+}
+
+void hubp2_read_state_common(struct hubp *hubp)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       struct dcn_hubp_state *s = &hubp2->state;
+       struct _vcs_dpi_display_dlg_regs_st *dlg_attr = &s->dlg_attr;
+       struct _vcs_dpi_display_ttu_regs_st *ttu_attr = &s->ttu_attr;
+       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
+
+       /* Requester */
+       REG_GET(HUBPRET_CONTROL,
+                       DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs->plane1_base_address);
+       REG_GET_4(DCN_EXPANSION_MODE,
+                       DRQ_EXPANSION_MODE, &rq_regs->drq_expansion_mode,
+                       PRQ_EXPANSION_MODE, &rq_regs->prq_expansion_mode,
+                       MRQ_EXPANSION_MODE, &rq_regs->mrq_expansion_mode,
+                       CRQ_EXPANSION_MODE, &rq_regs->crq_expansion_mode);
+
+       REG_GET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, &rq_regs->aperture_high_addr);
+
+       REG_GET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, &rq_regs->aperture_low_addr);
+
+       /* DLG - Per hubp */
+       REG_GET_2(BLANK_OFFSET_0,
+               REFCYC_H_BLANK_END, &dlg_attr->refcyc_h_blank_end,
+               DLG_V_BLANK_END, &dlg_attr->dlg_vblank_end);
+
+       REG_GET(BLANK_OFFSET_1,
+               MIN_DST_Y_NEXT_START, &dlg_attr->min_dst_y_next_start);
+
+       REG_GET(DST_DIMENSIONS,
+               REFCYC_PER_HTOTAL, &dlg_attr->refcyc_per_htotal);
+
+       REG_GET_2(DST_AFTER_SCALER,
+               REFCYC_X_AFTER_SCALER, &dlg_attr->refcyc_x_after_scaler,
+               DST_Y_AFTER_SCALER, &dlg_attr->dst_y_after_scaler);
+
+       if (REG(PREFETCH_SETTINS))
+               REG_GET_2(PREFETCH_SETTINS,
+                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
+                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
+       else
+               REG_GET_2(PREFETCH_SETTINGS,
+                       DST_Y_PREFETCH, &dlg_attr->dst_y_prefetch,
+                       VRATIO_PREFETCH, &dlg_attr->vratio_prefetch);
+
+       REG_GET_2(VBLANK_PARAMETERS_0,
+               DST_Y_PER_VM_VBLANK, &dlg_attr->dst_y_per_vm_vblank,
+               DST_Y_PER_ROW_VBLANK, &dlg_attr->dst_y_per_row_vblank);
+
+       REG_GET(REF_FREQ_TO_PIX_FREQ,
+               REF_FREQ_TO_PIX_FREQ, &dlg_attr->ref_freq_to_pix_freq);
+
+       /* DLG - Per luma/chroma */
+       REG_GET(VBLANK_PARAMETERS_1,
+               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr->refcyc_per_pte_group_vblank_l);
+
+       REG_GET(VBLANK_PARAMETERS_3,
+               REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr->refcyc_per_meta_chunk_vblank_l);
+
+       if (REG(NOM_PARAMETERS_0))
+               REG_GET(NOM_PARAMETERS_0,
+                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr->dst_y_per_pte_row_nom_l);
+
+       if (REG(NOM_PARAMETERS_1))
+               REG_GET(NOM_PARAMETERS_1,
+                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr->refcyc_per_pte_group_nom_l);
+
+       REG_GET(NOM_PARAMETERS_4,
+               DST_Y_PER_META_ROW_NOM_L, &dlg_attr->dst_y_per_meta_row_nom_l);
+
+       REG_GET(NOM_PARAMETERS_5,
+               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr->refcyc_per_meta_chunk_nom_l);
+
+       REG_GET_2(PER_LINE_DELIVERY_PRE,
+               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr->refcyc_per_line_delivery_pre_l,
+               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr->refcyc_per_line_delivery_pre_c);
+
+       REG_GET_2(PER_LINE_DELIVERY,
+               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr->refcyc_per_line_delivery_l,
+               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr->refcyc_per_line_delivery_c);
+
+       if (REG(PREFETCH_SETTINS_C))
+               REG_GET(PREFETCH_SETTINS_C,
+                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
+       else
+               REG_GET(PREFETCH_SETTINGS_C,
+                       VRATIO_PREFETCH_C, &dlg_attr->vratio_prefetch_c);
+
+       REG_GET(VBLANK_PARAMETERS_2,
+               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr->refcyc_per_pte_group_vblank_c);
+
+       REG_GET(VBLANK_PARAMETERS_4,
+               REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr->refcyc_per_meta_chunk_vblank_c);
+
+       if (REG(NOM_PARAMETERS_2))
+               REG_GET(NOM_PARAMETERS_2,
+                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr->dst_y_per_pte_row_nom_c);
+
+       if (REG(NOM_PARAMETERS_3))
+               REG_GET(NOM_PARAMETERS_3,
+                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr->refcyc_per_pte_group_nom_c);
+
+       REG_GET(NOM_PARAMETERS_6,
+               DST_Y_PER_META_ROW_NOM_C, &dlg_attr->dst_y_per_meta_row_nom_c);
+
+       REG_GET(NOM_PARAMETERS_7,
+               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr->refcyc_per_meta_chunk_nom_c);
+
+       /* TTU - per hubp */
+       REG_GET_2(DCN_TTU_QOS_WM,
+               QoS_LEVEL_LOW_WM, &ttu_attr->qos_level_low_wm,
+               QoS_LEVEL_HIGH_WM, &ttu_attr->qos_level_high_wm);
+
+       REG_GET_2(DCN_GLOBAL_TTU_CNTL,
+               MIN_TTU_VBLANK, &ttu_attr->min_ttu_vblank,
+               QoS_LEVEL_FLIP, &ttu_attr->qos_level_flip);
+
+       /* TTU - per luma/chroma */
+       /* Assumed surf0 is luma and 1 is chroma */
+
+       REG_GET_3(DCN_SURF0_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_l,
+               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_l,
+               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_l);
+
+       REG_GET(DCN_SURF0_TTU_CNTL1,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               &ttu_attr->refcyc_per_req_delivery_pre_l);
+
+       REG_GET_3(DCN_SURF1_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr->refcyc_per_req_delivery_c,
+               QoS_LEVEL_FIXED, &ttu_attr->qos_level_fixed_c,
+               QoS_RAMP_DISABLE, &ttu_attr->qos_ramp_disable_c);
+
+       REG_GET(DCN_SURF1_TTU_CNTL1,
+               REFCYC_PER_REQ_DELIVERY_PRE,
+               &ttu_attr->refcyc_per_req_delivery_pre_c);
+
+       /* Rest of hubp */
+       REG_GET(DCSURF_SURFACE_CONFIG,
+                       SURFACE_PIXEL_FORMAT, &s->pixel_format);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE_HIGH,
+                       SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, &s->inuse_addr_hi);
+
+       REG_GET(DCSURF_SURFACE_EARLIEST_INUSE,
+                       SURFACE_EARLIEST_INUSE_ADDRESS, &s->inuse_addr_lo);
+
+       REG_GET_2(DCSURF_PRI_VIEWPORT_DIMENSION,
+                       PRI_VIEWPORT_WIDTH, &s->viewport_width,
+                       PRI_VIEWPORT_HEIGHT, &s->viewport_height);
+
+       REG_GET_2(DCSURF_SURFACE_CONFIG,
+                       ROTATION_ANGLE, &s->rotation_angle,
+                       H_MIRROR_EN, &s->h_mirror_en);
+
+       REG_GET(DCSURF_TILING_CONFIG,
+                       SW_MODE, &s->sw_mode);
+
+       REG_GET(DCSURF_SURFACE_CONTROL,
+                       PRIMARY_SURFACE_DCC_EN, &s->dcc_en);
+
+       REG_GET_3(DCHUBP_CNTL,
+                       HUBP_BLANK_EN, &s->blank_en,
+                       HUBP_TTU_DISABLE, &s->ttu_disable,
+                       HUBP_UNDERFLOW_STATUS, &s->underflow_status);
+
+       REG_GET(HUBP_CLK_CNTL,
+                       HUBP_CLOCK_ENABLE, &s->clock_en);
+
+       REG_GET(DCN_GLOBAL_TTU_CNTL,
+                       MIN_TTU_VBLANK, &s->min_ttu_vblank);
+
+       REG_GET_2(DCN_TTU_QOS_WM,
+                       QoS_LEVEL_LOW_WM, &s->qos_level_low_wm,
+                       QoS_LEVEL_HIGH_WM, &s->qos_level_high_wm);
+
+       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS,
+                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_lo);
+
+       REG_GET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH,
+                       PRIMARY_SURFACE_ADDRESS, &s->primary_surface_addr_hi);
+
+       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS,
+                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_lo);
+
+       REG_GET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                       PRIMARY_META_SURFACE_ADDRESS, &s->primary_meta_addr_hi);
+}
+
+void hubp2_read_state(struct hubp *hubp)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       struct dcn_hubp_state *s = &hubp2->state;
+       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
+
+       hubp2_read_state_common(hubp);
+
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
+               CHUNK_SIZE, &rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, &rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, &rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, &rq_regs->rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, &rq_regs->rq_regs_l.dpte_group_size,
+               MPTE_GROUP_SIZE, &rq_regs->rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, &rq_regs->rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, &rq_regs->rq_regs_l.pte_row_height_linear);
+
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG_C,
+               CHUNK_SIZE_C, &rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.dpte_group_size,
+               MPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.mpte_group_size,
+               SWATH_HEIGHT_C, &rq_regs->rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs->rq_regs_c.pte_row_height_linear);
+
+       if (REG(DCHUBP_CNTL))
+               s->hubp_cntl = REG_READ(DCHUBP_CNTL);
+
+       if (REG(DCSURF_FLIP_CONTROL))
+               s->flip_control = REG_READ(DCSURF_FLIP_CONTROL);
+
+}
+
+static void hubp2_validate_dml_output(struct hubp *hubp,
+               struct dc_context *ctx,
+               struct _vcs_dpi_display_rq_regs_st *dml_rq_regs,
+               struct _vcs_dpi_display_dlg_regs_st *dml_dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *dml_ttu_attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       struct _vcs_dpi_display_rq_regs_st rq_regs = {0};
+       struct _vcs_dpi_display_dlg_regs_st dlg_attr = {0};
+       struct _vcs_dpi_display_ttu_regs_st ttu_attr = {0};
+       DC_LOGGER_INIT(ctx->logger);
+       DC_LOG_DEBUG("DML Validation | Running Validation");
+
+       /* Requestor Regs */
+       REG_GET(HUBPRET_CONTROL,
+               DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs.plane1_base_address);
+       REG_GET_4(DCN_EXPANSION_MODE,
+               DRQ_EXPANSION_MODE, &rq_regs.drq_expansion_mode,
+               PRQ_EXPANSION_MODE, &rq_regs.prq_expansion_mode,
+               MRQ_EXPANSION_MODE, &rq_regs.mrq_expansion_mode,
+               CRQ_EXPANSION_MODE, &rq_regs.crq_expansion_mode);
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
+               CHUNK_SIZE, &rq_regs.rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, &rq_regs.rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, &rq_regs.rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, &rq_regs.rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, &rq_regs.rq_regs_l.dpte_group_size,
+               MPTE_GROUP_SIZE, &rq_regs.rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, &rq_regs.rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, &rq_regs.rq_regs_l.pte_row_height_linear);
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG_C,
+               CHUNK_SIZE_C, &rq_regs.rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, &rq_regs.rq_regs_c.dpte_group_size,
+               MPTE_GROUP_SIZE_C, &rq_regs.rq_regs_c.mpte_group_size,
+               SWATH_HEIGHT_C, &rq_regs.rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs.rq_regs_c.pte_row_height_linear);
+
+       if (rq_regs.plane1_base_address != dml_rq_regs->plane1_base_address)
+               DC_LOG_DEBUG("DML Validation | HUBPRET_CONTROL:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->plane1_base_address, rq_regs.plane1_base_address);
+       if (rq_regs.drq_expansion_mode != dml_rq_regs->drq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->drq_expansion_mode, rq_regs.drq_expansion_mode);
+       if (rq_regs.prq_expansion_mode != dml_rq_regs->prq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:MRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->prq_expansion_mode, rq_regs.prq_expansion_mode);
+       if (rq_regs.mrq_expansion_mode != dml_rq_regs->mrq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->mrq_expansion_mode, rq_regs.mrq_expansion_mode);
+       if (rq_regs.crq_expansion_mode != dml_rq_regs->crq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:CRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->crq_expansion_mode, rq_regs.crq_expansion_mode);
+
+       if (rq_regs.rq_regs_l.chunk_size != dml_rq_regs->rq_regs_l.chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.chunk_size, rq_regs.rq_regs_l.chunk_size);
+       if (rq_regs.rq_regs_l.min_chunk_size != dml_rq_regs->rq_regs_l.min_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.min_chunk_size, rq_regs.rq_regs_l.min_chunk_size);
+       if (rq_regs.rq_regs_l.meta_chunk_size != dml_rq_regs->rq_regs_l.meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.meta_chunk_size, rq_regs.rq_regs_l.meta_chunk_size);
+       if (rq_regs.rq_regs_l.min_meta_chunk_size != dml_rq_regs->rq_regs_l.min_meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.min_meta_chunk_size, rq_regs.rq_regs_l.min_meta_chunk_size);
+       if (rq_regs.rq_regs_l.dpte_group_size != dml_rq_regs->rq_regs_l.dpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:DPTE_GROUP_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.dpte_group_size, rq_regs.rq_regs_l.dpte_group_size);
+       if (rq_regs.rq_regs_l.mpte_group_size != dml_rq_regs->rq_regs_l.mpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MPTE_GROUP_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.mpte_group_size, rq_regs.rq_regs_l.mpte_group_size);
+       if (rq_regs.rq_regs_l.swath_height != dml_rq_regs->rq_regs_l.swath_height)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:SWATH_HEIGHT - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.swath_height, rq_regs.rq_regs_l.swath_height);
+       if (rq_regs.rq_regs_l.pte_row_height_linear != dml_rq_regs->rq_regs_l.pte_row_height_linear)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:PTE_ROW_HEIGHT_LINEAR - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.pte_row_height_linear, rq_regs.rq_regs_l.pte_row_height_linear);
+
+       if (rq_regs.rq_regs_c.chunk_size != dml_rq_regs->rq_regs_c.chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.chunk_size, rq_regs.rq_regs_c.chunk_size);
+       if (rq_regs.rq_regs_c.min_chunk_size != dml_rq_regs->rq_regs_c.min_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.min_chunk_size, rq_regs.rq_regs_c.min_chunk_size);
+       if (rq_regs.rq_regs_c.meta_chunk_size != dml_rq_regs->rq_regs_c.meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.meta_chunk_size, rq_regs.rq_regs_c.meta_chunk_size);
+       if (rq_regs.rq_regs_c.min_meta_chunk_size != dml_rq_regs->rq_regs_c.min_meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.min_meta_chunk_size, rq_regs.rq_regs_c.min_meta_chunk_size);
+       if (rq_regs.rq_regs_c.dpte_group_size != dml_rq_regs->rq_regs_c.dpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:DPTE_GROUP_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.dpte_group_size, rq_regs.rq_regs_c.dpte_group_size);
+       if (rq_regs.rq_regs_c.mpte_group_size != dml_rq_regs->rq_regs_c.mpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MPTE_GROUP_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.mpte_group_size, rq_regs.rq_regs_c.mpte_group_size);
+       if (rq_regs.rq_regs_c.swath_height != dml_rq_regs->rq_regs_c.swath_height)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:SWATH_HEIGHT_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.swath_height, rq_regs.rq_regs_c.swath_height);
+       if (rq_regs.rq_regs_c.pte_row_height_linear != dml_rq_regs->rq_regs_c.pte_row_height_linear)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:PTE_ROW_HEIGHT_LINEAR_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.pte_row_height_linear, rq_regs.rq_regs_c.pte_row_height_linear);
+
+       /* DLG - Per hubp */
+       REG_GET_2(BLANK_OFFSET_0,
+               REFCYC_H_BLANK_END, &dlg_attr.refcyc_h_blank_end,
+               DLG_V_BLANK_END, &dlg_attr.dlg_vblank_end);
+       REG_GET(BLANK_OFFSET_1,
+               MIN_DST_Y_NEXT_START, &dlg_attr.min_dst_y_next_start);
+       REG_GET(DST_DIMENSIONS,
+               REFCYC_PER_HTOTAL, &dlg_attr.refcyc_per_htotal);
+       REG_GET_2(DST_AFTER_SCALER,
+               REFCYC_X_AFTER_SCALER, &dlg_attr.refcyc_x_after_scaler,
+               DST_Y_AFTER_SCALER, &dlg_attr.dst_y_after_scaler);
+       REG_GET(REF_FREQ_TO_PIX_FREQ,
+               REF_FREQ_TO_PIX_FREQ, &dlg_attr.ref_freq_to_pix_freq);
+
+       if (dlg_attr.refcyc_h_blank_end != dml_dlg_attr->refcyc_h_blank_end)
+               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:REFCYC_H_BLANK_END - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_h_blank_end, dlg_attr.refcyc_h_blank_end);
+       if (dlg_attr.dlg_vblank_end != dml_dlg_attr->dlg_vblank_end)
+               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:DLG_V_BLANK_END - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dlg_vblank_end, dlg_attr.dlg_vblank_end);
+       if (dlg_attr.min_dst_y_next_start != dml_dlg_attr->min_dst_y_next_start)
+               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_1:MIN_DST_Y_NEXT_START - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->min_dst_y_next_start, dlg_attr.min_dst_y_next_start);
+       if (dlg_attr.refcyc_per_htotal != dml_dlg_attr->refcyc_per_htotal)
+               DC_LOG_DEBUG("DML Validation | DST_DIMENSIONS:REFCYC_PER_HTOTAL - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_htotal, dlg_attr.refcyc_per_htotal);
+       if (dlg_attr.refcyc_x_after_scaler != dml_dlg_attr->refcyc_x_after_scaler)
+               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:REFCYC_X_AFTER_SCALER - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_x_after_scaler, dlg_attr.refcyc_x_after_scaler);
+       if (dlg_attr.dst_y_after_scaler != dml_dlg_attr->dst_y_after_scaler)
+               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:DST_Y_AFTER_SCALER - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_after_scaler, dlg_attr.dst_y_after_scaler);
+       if (dlg_attr.ref_freq_to_pix_freq != dml_dlg_attr->ref_freq_to_pix_freq)
+               DC_LOG_DEBUG("DML Validation | REF_FREQ_TO_PIX_FREQ:REF_FREQ_TO_PIX_FREQ - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->ref_freq_to_pix_freq, dlg_attr.ref_freq_to_pix_freq);
+
+       /* DLG - Per luma/chroma */
+       REG_GET(VBLANK_PARAMETERS_1,
+               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr.refcyc_per_pte_group_vblank_l);
+       if (REG(NOM_PARAMETERS_0))
+               REG_GET(NOM_PARAMETERS_0,
+                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr.dst_y_per_pte_row_nom_l);
+       if (REG(NOM_PARAMETERS_1))
+               REG_GET(NOM_PARAMETERS_1,
+                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr.refcyc_per_pte_group_nom_l);
+       REG_GET(NOM_PARAMETERS_4,
+               DST_Y_PER_META_ROW_NOM_L, &dlg_attr.dst_y_per_meta_row_nom_l);
+       REG_GET(NOM_PARAMETERS_5,
+               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr.refcyc_per_meta_chunk_nom_l);
+       REG_GET_2(PER_LINE_DELIVERY,
+               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr.refcyc_per_line_delivery_l,
+               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr.refcyc_per_line_delivery_c);
+       REG_GET_2(PER_LINE_DELIVERY_PRE,
+               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr.refcyc_per_line_delivery_pre_l,
+               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr.refcyc_per_line_delivery_pre_c);
+       REG_GET(VBLANK_PARAMETERS_2,
+               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr.refcyc_per_pte_group_vblank_c);
+       if (REG(NOM_PARAMETERS_2))
+               REG_GET(NOM_PARAMETERS_2,
+                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr.dst_y_per_pte_row_nom_c);
+       if (REG(NOM_PARAMETERS_3))
+               REG_GET(NOM_PARAMETERS_3,
+                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr.refcyc_per_pte_group_nom_c);
+       REG_GET(NOM_PARAMETERS_6,
+               DST_Y_PER_META_ROW_NOM_C, &dlg_attr.dst_y_per_meta_row_nom_c);
+       REG_GET(NOM_PARAMETERS_7,
+               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr.refcyc_per_meta_chunk_nom_c);
+       REG_GET(VBLANK_PARAMETERS_3,
+                       REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr.refcyc_per_meta_chunk_vblank_l);
+       REG_GET(VBLANK_PARAMETERS_4,
+                       REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr.refcyc_per_meta_chunk_vblank_c);
+
+       if (dlg_attr.refcyc_per_pte_group_vblank_l != dml_dlg_attr->refcyc_per_pte_group_vblank_l)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_1:REFCYC_PER_PTE_GROUP_VBLANK_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_vblank_l, dlg_attr.refcyc_per_pte_group_vblank_l);
+       if (dlg_attr.dst_y_per_pte_row_nom_l != dml_dlg_attr->dst_y_per_pte_row_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_0:DST_Y_PER_PTE_ROW_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_pte_row_nom_l, dlg_attr.dst_y_per_pte_row_nom_l);
+       if (dlg_attr.refcyc_per_pte_group_nom_l != dml_dlg_attr->refcyc_per_pte_group_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_1:REFCYC_PER_PTE_GROUP_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_nom_l, dlg_attr.refcyc_per_pte_group_nom_l);
+       if (dlg_attr.dst_y_per_meta_row_nom_l != dml_dlg_attr->dst_y_per_meta_row_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_4:DST_Y_PER_META_ROW_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_meta_row_nom_l, dlg_attr.dst_y_per_meta_row_nom_l);
+       if (dlg_attr.refcyc_per_meta_chunk_nom_l != dml_dlg_attr->refcyc_per_meta_chunk_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_5:REFCYC_PER_META_CHUNK_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_nom_l, dlg_attr.refcyc_per_meta_chunk_nom_l);
+       if (dlg_attr.refcyc_per_line_delivery_l != dml_dlg_attr->refcyc_per_line_delivery_l)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_l, dlg_attr.refcyc_per_line_delivery_l);
+       if (dlg_attr.refcyc_per_line_delivery_c != dml_dlg_attr->refcyc_per_line_delivery_c)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_c, dlg_attr.refcyc_per_line_delivery_c);
+       if (dlg_attr.refcyc_per_pte_group_vblank_c != dml_dlg_attr->refcyc_per_pte_group_vblank_c)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_2:REFCYC_PER_PTE_GROUP_VBLANK_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_vblank_c, dlg_attr.refcyc_per_pte_group_vblank_c);
+       if (dlg_attr.dst_y_per_pte_row_nom_c != dml_dlg_attr->dst_y_per_pte_row_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_2:DST_Y_PER_PTE_ROW_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_pte_row_nom_c, dlg_attr.dst_y_per_pte_row_nom_c);
+       if (dlg_attr.refcyc_per_pte_group_nom_c != dml_dlg_attr->refcyc_per_pte_group_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_3:REFCYC_PER_PTE_GROUP_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_nom_c, dlg_attr.refcyc_per_pte_group_nom_c);
+       if (dlg_attr.dst_y_per_meta_row_nom_c != dml_dlg_attr->dst_y_per_meta_row_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_6:DST_Y_PER_META_ROW_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_meta_row_nom_c, dlg_attr.dst_y_per_meta_row_nom_c);
+       if (dlg_attr.refcyc_per_meta_chunk_nom_c != dml_dlg_attr->refcyc_per_meta_chunk_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_7:REFCYC_PER_META_CHUNK_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_nom_c, dlg_attr.refcyc_per_meta_chunk_nom_c);
+       if (dlg_attr.refcyc_per_line_delivery_pre_l != dml_dlg_attr->refcyc_per_line_delivery_pre_l)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_pre_l, dlg_attr.refcyc_per_line_delivery_pre_l);
+       if (dlg_attr.refcyc_per_line_delivery_pre_c != dml_dlg_attr->refcyc_per_line_delivery_pre_c)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_pre_c, dlg_attr.refcyc_per_line_delivery_pre_c);
+       if (dlg_attr.refcyc_per_meta_chunk_vblank_l != dml_dlg_attr->refcyc_per_meta_chunk_vblank_l)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_3:REFCYC_PER_META_CHUNK_VBLANK_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_l, dlg_attr.refcyc_per_meta_chunk_vblank_l);
+       if (dlg_attr.refcyc_per_meta_chunk_vblank_c != dml_dlg_attr->refcyc_per_meta_chunk_vblank_c)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_4:REFCYC_PER_META_CHUNK_VBLANK_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_c, dlg_attr.refcyc_per_meta_chunk_vblank_c);
+
+       /* TTU - per hubp */
+       REG_GET_2(DCN_TTU_QOS_WM,
+               QoS_LEVEL_LOW_WM, &ttu_attr.qos_level_low_wm,
+               QoS_LEVEL_HIGH_WM, &ttu_attr.qos_level_high_wm);
+
+       if (ttu_attr.qos_level_low_wm != dml_ttu_attr->qos_level_low_wm)
+               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_LOW_WM - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_low_wm, ttu_attr.qos_level_low_wm);
+       if (ttu_attr.qos_level_high_wm != dml_ttu_attr->qos_level_high_wm)
+               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_HIGH_WM - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_high_wm, ttu_attr.qos_level_high_wm);
+
+       /* TTU - per luma/chroma */
+       /* Assumed surf0 is luma and 1 is chroma */
+       REG_GET_3(DCN_SURF0_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_l,
+               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_l,
+               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_l);
+       REG_GET_3(DCN_SURF1_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_c,
+               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_c,
+               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_c);
+       REG_GET_3(DCN_CUR0_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_cur0,
+               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_cur0,
+               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_cur0);
+       REG_GET(FLIP_PARAMETERS_1,
+               REFCYC_PER_PTE_GROUP_FLIP_L, &dlg_attr.refcyc_per_pte_group_flip_l);
+       REG_GET(DCN_CUR0_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur0);
+       REG_GET(DCN_CUR1_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur1);
+       REG_GET(DCN_SURF0_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_l);
+       REG_GET(DCN_SURF1_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_c);
+
+       if (ttu_attr.refcyc_per_req_delivery_l != dml_ttu_attr->refcyc_per_req_delivery_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_l, ttu_attr.refcyc_per_req_delivery_l);
+       if (ttu_attr.qos_level_fixed_l != dml_ttu_attr->qos_level_fixed_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_fixed_l, ttu_attr.qos_level_fixed_l);
+       if (ttu_attr.qos_ramp_disable_l != dml_ttu_attr->qos_ramp_disable_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_ramp_disable_l, ttu_attr.qos_ramp_disable_l);
+       if (ttu_attr.refcyc_per_req_delivery_c != dml_ttu_attr->refcyc_per_req_delivery_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_c, ttu_attr.refcyc_per_req_delivery_c);
+       if (ttu_attr.qos_level_fixed_c != dml_ttu_attr->qos_level_fixed_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_fixed_c, ttu_attr.qos_level_fixed_c);
+       if (ttu_attr.qos_ramp_disable_c != dml_ttu_attr->qos_ramp_disable_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_ramp_disable_c, ttu_attr.qos_ramp_disable_c);
+       if (ttu_attr.refcyc_per_req_delivery_cur0 != dml_ttu_attr->refcyc_per_req_delivery_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_cur0, ttu_attr.refcyc_per_req_delivery_cur0);
+       if (ttu_attr.qos_level_fixed_cur0 != dml_ttu_attr->qos_level_fixed_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_fixed_cur0, ttu_attr.qos_level_fixed_cur0);
+       if (ttu_attr.qos_ramp_disable_cur0 != dml_ttu_attr->qos_ramp_disable_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_ramp_disable_cur0, ttu_attr.qos_ramp_disable_cur0);
+       if (dlg_attr.refcyc_per_pte_group_flip_l != dml_dlg_attr->refcyc_per_pte_group_flip_l)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_1:REFCYC_PER_PTE_GROUP_FLIP_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_flip_l, dlg_attr.refcyc_per_pte_group_flip_l);
+       if (ttu_attr.refcyc_per_req_delivery_pre_cur0 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur0, ttu_attr.refcyc_per_req_delivery_pre_cur0);
+       if (ttu_attr.refcyc_per_req_delivery_pre_cur1 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur1)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur1, ttu_attr.refcyc_per_req_delivery_pre_cur1);
+       if (ttu_attr.refcyc_per_req_delivery_pre_l != dml_ttu_attr->refcyc_per_req_delivery_pre_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_l, ttu_attr.refcyc_per_req_delivery_pre_l);
+       if (ttu_attr.refcyc_per_req_delivery_pre_c != dml_ttu_attr->refcyc_per_req_delivery_pre_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_c, ttu_attr.refcyc_per_req_delivery_pre_c);
+}
+
+static struct hubp_funcs dcn20_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp2_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp2_program_surface_config,
+       .hubp_is_flip_pending = hubp2_is_flip_pending,
+       .hubp_setup = hubp2_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp2_set_vm_system_aperture_settings,
+       .set_blank = hubp2_set_blank,
+       .set_blank_regs = hubp2_set_blank_regs,
+       .dcc_control = hubp2_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .set_cursor_attributes  = hubp2_cursor_set_attributes,
+       .set_cursor_position    = hubp2_cursor_set_position,
+       .hubp_clk_cntl = hubp2_clk_cntl,
+       .hubp_vtg_sel = hubp2_vtg_sel,
+       .dmdata_set_attributes = hubp2_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp2_read_state,
+       .hubp_clear_underflow = hubp2_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp1_init,
+       .validate_dml_output = hubp2_validate_dml_output,
+       .hubp_in_blank = hubp1_in_blank,
+       .hubp_soft_reset = hubp1_soft_reset,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+};
+
+
+bool hubp2_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask)
+{
+       hubp2->base.funcs = &dcn20_hubp_funcs;
+       hubp2->base.ctx = ctx;
+       hubp2->hubp_regs = hubp_regs;
+       hubp2->hubp_shift = hubp_shift;
+       hubp2->hubp_mask = hubp_mask;
+       hubp2->base.inst = inst;
+       hubp2->base.opp_id = OPP_ID_INVALID;
+       hubp2->base.mpcc_id = 0xf;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn20/dcn20_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn20/dcn20_hubp.h
new file mode 100644 (file)
index 0000000..ecc0a2f
--- /dev/null
@@ -0,0 +1,400 @@
+/*
+ * Copyright 2012-17 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_MEM_INPUT_DCN20_H__
+#define __DC_MEM_INPUT_DCN20_H__
+
+#include "../dcn10/dcn10_hubp.h"
+
+#define TO_DCN20_HUBP(hubp)\
+       container_of(hubp, struct dcn20_hubp, base)
+
+#define HUBP_REG_LIST_DCN2_COMMON(id)\
+       HUBP_REG_LIST_DCN(id),\
+       HUBP_REG_LIST_DCN_VM(id),\
+       SRI(PREFETCH_SETTINGS, HUBPREQ, id),\
+       SRI(PREFETCH_SETTINGS_C, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, HUBPREQ, id),\
+       SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, HUBPREQ, id),\
+       SRI(CURSOR_SETTINGS, HUBPREQ, id), \
+       SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR0_, id), \
+       SRI(CURSOR_SURFACE_ADDRESS, CURSOR0_, id), \
+       SRI(CURSOR_SIZE, CURSOR0_, id), \
+       SRI(CURSOR_CONTROL, CURSOR0_, id), \
+       SRI(CURSOR_POSITION, CURSOR0_, id), \
+       SRI(CURSOR_HOT_SPOT, CURSOR0_, id), \
+       SRI(CURSOR_DST_OFFSET, CURSOR0_, id), \
+       SRI(DMDATA_ADDRESS_HIGH, CURSOR0_, id), \
+       SRI(DMDATA_ADDRESS_LOW, CURSOR0_, id), \
+       SRI(DMDATA_CNTL, CURSOR0_, id), \
+       SRI(DMDATA_SW_CNTL, CURSOR0_, id), \
+       SRI(DMDATA_QOS_CNTL, CURSOR0_, id), \
+       SRI(DMDATA_SW_DATA, CURSOR0_, id), \
+       SRI(DMDATA_STATUS, CURSOR0_, id),\
+       SRI(FLIP_PARAMETERS_0, HUBPREQ, id),\
+       SRI(FLIP_PARAMETERS_1, HUBPREQ, id),\
+       SRI(FLIP_PARAMETERS_2, HUBPREQ, id),\
+       SRI(DCN_CUR1_TTU_CNTL0, HUBPREQ, id),\
+       SRI(DCN_CUR1_TTU_CNTL1, HUBPREQ, id),\
+       SRI(DCSURF_FLIP_CONTROL2, HUBPREQ, id), \
+       SRI(VMID_SETTINGS_0, HUBPREQ, id)
+
+#define HUBP_REG_LIST_DCN20(id)\
+       HUBP_REG_LIST_DCN2_COMMON(id),\
+       SR(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB),\
+       SR(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB)
+
+#define HUBP_MASK_SH_LIST_DCN2_SHARE_COMMON(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh),\
+       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh)
+
+/*DCN2.x and DCN1.x*/
+#define HUBP_MASK_SH_LIST_DCN2_COMMON(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN2_SHARE_COMMON(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MPTE_GROUP_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MPTE_GROUP_SIZE_C, mask_sh)
+
+/*DCN2.0 specific*/
+#define HUBP_MASK_SH_LIST_DCN20(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN2_COMMON(mask_sh),\
+       HUBP_SF(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
+       HUBP_SF(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
+       HUBP_SF(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh)
+
+/*DCN2.x */
+#define DCN2_HUBP_REG_COMMON_VARIABLE_LIST \
+       HUBP_COMMON_REG_VARIABLE_LIST; \
+       uint32_t DMDATA_ADDRESS_HIGH; \
+       uint32_t DMDATA_ADDRESS_LOW; \
+       uint32_t DMDATA_CNTL; \
+       uint32_t DMDATA_SW_CNTL; \
+       uint32_t DMDATA_QOS_CNTL; \
+       uint32_t DMDATA_SW_DATA; \
+       uint32_t DMDATA_STATUS;\
+       uint32_t DCSURF_FLIP_CONTROL2;\
+       uint32_t FLIP_PARAMETERS_0;\
+       uint32_t FLIP_PARAMETERS_1;\
+       uint32_t FLIP_PARAMETERS_2;\
+       uint32_t DCN_CUR1_TTU_CNTL0;\
+       uint32_t DCN_CUR1_TTU_CNTL1;\
+       uint32_t VMID_SETTINGS_0
+
+/*shared with dcn3.x*/
+#define DCN21_HUBP_REG_COMMON_VARIABLE_LIST \
+       DCN2_HUBP_REG_COMMON_VARIABLE_LIST; \
+       uint32_t FLIP_PARAMETERS_3;\
+       uint32_t FLIP_PARAMETERS_4;\
+       uint32_t FLIP_PARAMETERS_5;\
+       uint32_t FLIP_PARAMETERS_6;\
+       uint32_t VBLANK_PARAMETERS_5;\
+       uint32_t VBLANK_PARAMETERS_6
+
+#define DCN30_HUBP_REG_COMMON_VARIABLE_LIST \
+       DCN21_HUBP_REG_COMMON_VARIABLE_LIST;\
+       uint32_t DCN_DMDATA_VM_CNTL
+
+#define DCN32_HUBP_REG_COMMON_VARIABLE_LIST \
+       DCN30_HUBP_REG_COMMON_VARIABLE_LIST;\
+       uint32_t DCHUBP_MALL_CONFIG;\
+       uint32_t DCHUBP_VMPG_CONFIG;\
+       uint32_t UCLK_PSTATE_FORCE
+
+#define DCN401_HUBP_REG_COMMON_VARIABLE_LIST \
+       DCN32_HUBP_REG_COMMON_VARIABLE_LIST;\
+       uint32_t _3DLUT_FL_BIAS_SCALE;\
+       uint32_t _3DLUT_FL_CONFIG;\
+       uint32_t HUBP_3DLUT_ADDRESS_HIGH;\
+       uint32_t HUBP_3DLUT_ADDRESS_LOW;\
+       uint32_t HUBP_3DLUT_CONTROL;\
+       uint32_t HUBP_3DLUT_DLG_PARAM;\
+
+#define DCN2_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN_HUBP_REG_FIELD_BASE_LIST(type); \
+       type DMDATA_ADDRESS_HIGH;\
+       type DMDATA_MODE;\
+       type DMDATA_UPDATED;\
+       type DMDATA_REPEAT;\
+       type DMDATA_SIZE;\
+       type DMDATA_SW_UPDATED;\
+       type DMDATA_SW_REPEAT;\
+       type DMDATA_SW_SIZE;\
+       type DMDATA_QOS_MODE;\
+       type DMDATA_QOS_LEVEL;\
+       type DMDATA_DL_DELTA;\
+       type DMDATA_DONE;\
+       type DST_Y_PER_VM_FLIP;\
+       type DST_Y_PER_ROW_FLIP;\
+       type REFCYC_PER_PTE_GROUP_FLIP_L;\
+       type REFCYC_PER_META_CHUNK_FLIP_L;\
+       type HUBP_VREADY_AT_OR_AFTER_VSYNC;\
+       type HUBP_DISABLE_STOP_DATA_DURING_VM;\
+       type HUBPREQ_MASTER_UPDATE_LOCK_STATUS;\
+       type SURFACE_GSL_ENABLE;\
+       type SURFACE_TRIPLE_BUFFER_ENABLE;\
+       type VMID
+
+#define DCN21_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN2_HUBP_REG_FIELD_VARIABLE_LIST(type);\
+       type REFCYC_PER_VM_GROUP_FLIP;\
+       type REFCYC_PER_VM_REQ_FLIP;\
+       type REFCYC_PER_VM_GROUP_VBLANK;\
+       type REFCYC_PER_VM_REQ_VBLANK;\
+       type REFCYC_PER_PTE_GROUP_FLIP_C; \
+       type REFCYC_PER_META_CHUNK_FLIP_C; \
+       type VM_GROUP_SIZE
+
+#define DCN30_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN21_HUBP_REG_FIELD_VARIABLE_LIST(type);\
+       type PRIMARY_SURFACE_DCC_IND_BLK;\
+       type SECONDARY_SURFACE_DCC_IND_BLK;\
+       type PRIMARY_SURFACE_DCC_IND_BLK_C;\
+       type SECONDARY_SURFACE_DCC_IND_BLK_C;\
+       type ALPHA_PLANE_EN;\
+       type REFCYC_PER_VM_DMDATA;\
+       type DMDATA_VM_FAULT_STATUS;\
+       type DMDATA_VM_FAULT_STATUS_CLEAR; \
+       type DMDATA_VM_UNDERFLOW_STATUS;\
+       type DMDATA_VM_LATE_STATUS;\
+       type DMDATA_VM_UNDERFLOW_STATUS_CLEAR; \
+       type DMDATA_VM_DONE; \
+       type CROSSBAR_SRC_Y_G; \
+       type CROSSBAR_SRC_ALPHA; \
+       type PACK_3TO2_ELEMENT_DISABLE; \
+       type ROW_TTU_MODE; \
+       type NUM_PKRS
+
+#define DCN31_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN30_HUBP_REG_FIELD_VARIABLE_LIST(type);\
+       type HUBP_UNBOUNDED_REQ_MODE;\
+       type CURSOR_REQ_MODE;\
+       type HUBP_SOFT_RESET
+
+#define DCN32_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN31_HUBP_REG_FIELD_VARIABLE_LIST(type);\
+       type USE_MALL_SEL; \
+       type USE_MALL_FOR_CURSOR;\
+       type VMPG_SIZE; \
+       type PTE_BUFFER_MODE; \
+       type BIGK_FRAGMENT_SIZE; \
+       type FORCE_ONE_ROW_FOR_FRAME; \
+       type DATA_UCLK_PSTATE_FORCE_EN; \
+       type DATA_UCLK_PSTATE_FORCE_VALUE; \
+       type CURSOR_UCLK_PSTATE_FORCE_EN; \
+       type CURSOR_UCLK_PSTATE_FORCE_VALUE
+
+#define DCN401_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN32_HUBP_REG_FIELD_VARIABLE_LIST(type);\
+       type MALL_PREF_CMD_TYPE; \
+       type MALL_PREF_MODE; \
+       type HUBP0_3DLUT_FL_MODE; \
+       type HUBP0_3DLUT_FL_FORMAT; \
+       type HUBP0_3DLUT_FL_SCALE; \
+       type HUBP0_3DLUT_FL_BIAS; \
+       type HUBP_3DLUT_ENABLE;\
+       type HUBP_3DLUT_DONE;\
+       type HUBP_3DLUT_ADDRESSING_MODE;\
+       type HUBP_3DLUT_WIDTH;\
+       type HUBP_3DLUT_TMZ;\
+       type HUBP_3DLUT_CROSSBAR_SELECT_Y_G;\
+       type HUBP_3DLUT_CROSSBAR_SELECT_CB_B;\
+       type HUBP_3DLUT_CROSSBAR_SELECT_CR_R;\
+       type HUBP_3DLUT_ADDRESS_HIGH;\
+       type HUBP_3DLUT_ADDRESS_LOW;\
+       type REFCYC_PER_3DLUT_GROUP;\
+
+struct dcn_hubp2_registers {
+       DCN401_HUBP_REG_COMMON_VARIABLE_LIST;
+};
+
+struct dcn_hubp2_shift {
+       DCN401_HUBP_REG_FIELD_VARIABLE_LIST(uint8_t);
+};
+
+struct dcn_hubp2_mask {
+       DCN401_HUBP_REG_FIELD_VARIABLE_LIST(uint32_t);
+};
+
+struct dcn20_hubp {
+       struct hubp base;
+       struct dcn_hubp_state state;
+       const struct dcn_hubp2_registers *hubp_regs;
+       const struct dcn_hubp2_shift *hubp_shift;
+       const struct dcn_hubp2_mask *hubp_mask;
+};
+
+bool hubp2_construct(
+               struct dcn20_hubp *hubp2,
+               struct dc_context *ctx,
+               uint32_t inst,
+               const struct dcn_hubp2_registers *hubp_regs,
+               const struct dcn_hubp2_shift *hubp_shift,
+               const struct dcn_hubp2_mask *hubp_mask);
+
+void hubp2_setup_interdependent(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
+
+void hubp2_vready_at_or_After_vsync(struct hubp *hubp,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
+
+void hubp2_cursor_set_attributes(
+               struct hubp *hubp,
+               const struct dc_cursor_attributes *attr);
+
+void hubp2_set_vm_system_aperture_settings(struct hubp *hubp,
+               struct vm_system_aperture_param *apt);
+
+enum cursor_lines_per_chunk hubp2_get_lines_per_chunk(
+               unsigned int cursor_width,
+               enum dc_cursor_color_format cursor_mode);
+
+void hubp2_dmdata_set_attributes(
+               struct hubp *hubp,
+               const struct dc_dmdata_attributes *attr);
+
+void hubp2_dmdata_load(
+               struct hubp *hubp,
+               uint32_t dmdata_sw_size,
+               const uint32_t *dmdata_sw_data);
+
+bool hubp2_dmdata_status_done(struct hubp *hubp);
+
+void hubp2_enable_triplebuffer(
+               struct hubp *hubp,
+               bool enable);
+
+bool hubp2_is_triplebuffer_enabled(
+               struct hubp *hubp);
+
+void hubp2_set_flip_control_surface_gsl(struct hubp *hubp, bool enable);
+
+void hubp2_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
+
+bool hubp2_program_surface_flip_and_addr(
+       struct hubp *hubp,
+       const struct dc_plane_address *address,
+       bool flip_immediate);
+
+void hubp2_dcc_control(struct hubp *hubp, bool enable,
+               enum hubp_ind_block_size independent_64b_blks);
+
+void hubp2_program_size(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       const struct plane_size *plane_size,
+       struct dc_plane_dcc_param *dcc);
+
+void hubp2_program_rotation(
+       struct hubp *hubp,
+       enum dc_rotation_angle rotation,
+       bool horizontal_mirror);
+
+void hubp2_program_pixel_format(
+       struct hubp *hubp,
+       enum surface_pixel_format format);
+
+void hubp2_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level);
+
+bool hubp2_is_flip_pending(struct hubp *hubp);
+
+void hubp2_set_blank(struct hubp *hubp, bool blank);
+void hubp2_set_blank_regs(struct hubp *hubp, bool blank);
+
+void hubp2_cursor_set_position(
+               struct hubp *hubp,
+               const struct dc_cursor_position *pos,
+               const struct dc_cursor_mi_param *param);
+
+void hubp2_clk_cntl(struct hubp *hubp, bool enable);
+
+void hubp2_vtg_sel(struct hubp *hubp, uint32_t otg_inst);
+
+void hubp2_clear_underflow(struct hubp *hubp);
+
+void hubp2_read_state_common(struct hubp *hubp);
+
+void hubp2_read_state(struct hubp *hubp);
+
+#endif /* __DC_MEM_INPUT_DCN20_H__ */
+
+
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn201/dcn201_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn201/dcn201_hubp.c
new file mode 100644 (file)
index 0000000..cd2bfcc
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2012-17 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+#include "dcn201_hubp.h"
+
+#include "dm_services.h"
+#include "dce_calcs.h"
+#include "reg_helper.h"
+#include "basics/conversion.h"
+
+#define REG(reg)\
+       hubp201->hubp_regs->reg
+
+#define CTX \
+       hubp201->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp201->hubp_shift->field_name, hubp201->hubp_mask->field_name
+
+static void hubp201_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level)
+{
+       hubp1_dcc_control(hubp, dcc->enable, dcc->independent_64b_blks);
+       hubp1_program_tiling(hubp, tiling_info, format);
+       hubp1_program_size(hubp, format, plane_size, dcc);
+       hubp1_program_pixel_format(hubp, format);
+}
+
+static void hubp201_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       hubp1_program_deadline(hubp, dlg_attr, ttu_attr);
+}
+
+static void hubp201_program_requestor(struct hubp *hubp,
+                                     struct _vcs_dpi_display_rq_regs_st *rq_regs)
+{
+       struct dcn201_hubp *hubp201 = TO_DCN201_HUBP(hubp);
+
+       REG_UPDATE(HUBPRET_CONTROL,
+                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
+
+       REG_SET_4(DCN_EXPANSION_MODE, 0,
+                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
+                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
+                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
+                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
+
+       /* no need to program PTE */
+       REG_SET_5(DCHUBP_REQ_SIZE_CONFIG, 0,
+               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
+               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height);
+
+       REG_SET_5(DCHUBP_REQ_SIZE_CONFIG_C, 0,
+               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
+               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height);
+}
+
+static void hubp201_setup(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       /*
+        * otg is locked when this func is called. Register are double buffered.
+        * disable the requestors is not needed
+        */
+       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
+       hubp201_program_requestor(hubp, rq_regs);
+       hubp201_program_deadline(hubp, dlg_attr, ttu_attr);
+}
+
+static struct hubp_funcs dcn201_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp1_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp201_program_surface_config,
+       .hubp_is_flip_pending = hubp1_is_flip_pending,
+       .hubp_setup = hubp201_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .set_cursor_attributes  = hubp2_cursor_set_attributes,
+       .set_cursor_position    = hubp1_cursor_set_position,
+       .set_blank = hubp1_set_blank,
+       .dcc_control = hubp1_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .hubp_clk_cntl = hubp1_clk_cntl,
+       .hubp_vtg_sel = hubp1_vtg_sel,
+       .dmdata_set_attributes = hubp2_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp2_read_state,
+       .hubp_clear_underflow = hubp1_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp1_init,
+};
+
+bool dcn201_hubp_construct(
+       struct dcn201_hubp *hubp201,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn201_hubp_registers *hubp_regs,
+       const struct dcn201_hubp_shift *hubp_shift,
+       const struct dcn201_hubp_mask *hubp_mask)
+{
+       hubp201->base.funcs = &dcn201_hubp_funcs;
+       hubp201->base.ctx = ctx;
+       hubp201->hubp_regs = hubp_regs;
+       hubp201->hubp_shift = hubp_shift;
+       hubp201->hubp_mask = hubp_mask;
+       hubp201->base.inst = inst;
+       hubp201->base.opp_id = OPP_ID_INVALID;
+       hubp201->base.mpcc_id = 0xf;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn201/dcn201_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn201/dcn201_hubp.h
new file mode 100644 (file)
index 0000000..a1e3384
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2012-17 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_MEM_INPUT_DCN201_H__
+#define __DC_MEM_INPUT_DCN201_H__
+
+#include "../dcn10/dcn10_hubp.h"
+#include "../dcn20/dcn20_hubp.h"
+
+#define TO_DCN201_HUBP(hubp)\
+       container_of(hubp, struct dcn201_hubp, base)
+
+#define HUBP_REG_LIST_DCN201(id)\
+       HUBP_REG_LIST_DCN(id),\
+       SRI(PREFETCH_SETTINGS, HUBPREQ, id),\
+       SRI(PREFETCH_SETTINGS_C, HUBPREQ, id),\
+       SRI(DCSURF_FLIP_CONTROL2, HUBPREQ, id), \
+       SRI(CURSOR_SETTINGS, HUBPREQ, id), \
+       SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR0_, id), \
+       SRI(CURSOR_SURFACE_ADDRESS, CURSOR0_, id), \
+       SRI(CURSOR_SIZE, CURSOR0_, id), \
+       SRI(CURSOR_CONTROL, CURSOR0_, id), \
+       SRI(CURSOR_POSITION, CURSOR0_, id), \
+       SRI(CURSOR_HOT_SPOT, CURSOR0_, id), \
+       SRI(CURSOR_DST_OFFSET, CURSOR0_, id), \
+       SRI(DMDATA_ADDRESS_HIGH, CURSOR0_, id), \
+       SRI(DMDATA_ADDRESS_LOW, CURSOR0_, id), \
+       SRI(DMDATA_CNTL, CURSOR0_, id), \
+       SRI(DMDATA_SW_CNTL, CURSOR0_, id), \
+       SRI(DMDATA_QOS_CNTL, CURSOR0_, id), \
+       SRI(DMDATA_SW_DATA, CURSOR0_, id), \
+       SRI(DMDATA_STATUS, CURSOR0_, id),\
+       SRI(FLIP_PARAMETERS_0, HUBPREQ, id),\
+       SRI(FLIP_PARAMETERS_2, HUBPREQ, id)
+
+#define HUBP_MASK_SH_LIST_DCN201(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN(mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh)
+
+#define DCN201_HUBP_REG_VARIABLE_LIST \
+       DCN2_HUBP_REG_COMMON_VARIABLE_LIST
+
+#define DCN201_HUBP_REG_FIELD_VARIABLE_LIST(type) \
+       DCN2_HUBP_REG_FIELD_VARIABLE_LIST(type)
+
+struct dcn201_hubp_registers {
+       DCN201_HUBP_REG_VARIABLE_LIST;
+};
+
+struct dcn201_hubp_shift {
+       DCN201_HUBP_REG_FIELD_VARIABLE_LIST(uint8_t);
+};
+
+struct dcn201_hubp_mask {
+       DCN201_HUBP_REG_FIELD_VARIABLE_LIST(uint32_t);
+};
+
+struct dcn201_hubp {
+       struct hubp base;
+       struct dcn_hubp_state state;
+       const struct dcn201_hubp_registers *hubp_regs;
+       const struct dcn201_hubp_shift *hubp_shift;
+       const struct dcn201_hubp_mask *hubp_mask;
+};
+
+bool dcn201_hubp_construct(
+       struct dcn201_hubp *hubp201,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn201_hubp_registers *hubp_regs,
+       const struct dcn201_hubp_shift *hubp_shift,
+       const struct dcn201_hubp_mask *hubp_mask);
+
+#endif /* __DC_HWSS_DCN20_H__ */
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn21/dcn21_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn21/dcn21_hubp.c
new file mode 100644 (file)
index 0000000..e13d69a
--- /dev/null
@@ -0,0 +1,860 @@
+/*
+* Copyright 2018 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#include "dcn10/dcn10_hubp.h"
+#include "dcn21_hubp.h"
+
+#include "dm_services.h"
+#include "reg_helper.h"
+
+#include "dc_dmub_srv.h"
+
+#define DC_LOGGER \
+       ctx->logger
+#define DC_LOGGER_INIT(logger)
+
+#define REG(reg)\
+       hubp21->hubp_regs->reg
+
+#define CTX \
+       hubp21->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp21->hubp_shift->field_name, hubp21->hubp_mask->field_name
+
+/*
+ * In DCN2.1, the non-double buffered version of the following 4 DLG registers are used in RTL.
+ * As a result, if S/W updates any of these registers during a mode change,
+ * the current frame before the mode change will use the new value right away
+ * and can lead to generating incorrect request deadlines and incorrect TTU/QoS behavior.
+ *
+ * REFCYC_PER_VM_GROUP_FLIP[22:0]
+ * REFCYC_PER_VM_GROUP_VBLANK[22:0]
+ * REFCYC_PER_VM_REQ_FLIP[22:0]
+ * REFCYC_PER_VM_REQ_VBLANK[22:0]
+ *
+ * REFCYC_PER_VM_*_FLIP affects the deadline of the VM requests generated
+ * when flipping to a new surface
+ *
+ * REFCYC_PER_VM_*_VBLANK affects the deadline of the VM requests generated
+ * during prefetch  period of a frame. The prefetch starts at a pre-determined
+ * number of lines before the display active per frame
+ *
+ * DCN may underflow due to incorrectly programming these registers
+ * during VM stage of prefetch/iflip. First lines of display active
+ * or a sub-region of active using a new surface will be corrupted
+ * until the VM data returns at flip/mode change transitions
+ *
+ * Work around:
+ * workaround is always opt to use the more aggressive settings.
+ * On any mode switch, if the new reg values are smaller than the current values,
+ * then update the regs with the new values.
+ *
+ * Link to the ticket: http://ontrack-internal.amd.com/browse/DEDCN21-142
+ *
+ */
+void apply_DEDCN21_142_wa_for_hostvm_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+       uint32_t refcyc_per_vm_group_vblank;
+       uint32_t refcyc_per_vm_req_vblank;
+       uint32_t refcyc_per_vm_group_flip;
+       uint32_t refcyc_per_vm_req_flip;
+       const uint32_t uninitialized_hw_default = 0;
+
+       REG_GET(VBLANK_PARAMETERS_5,
+                       REFCYC_PER_VM_GROUP_VBLANK, &refcyc_per_vm_group_vblank);
+
+       if (refcyc_per_vm_group_vblank == uninitialized_hw_default ||
+                       refcyc_per_vm_group_vblank > dlg_attr->refcyc_per_vm_group_vblank)
+               REG_SET(VBLANK_PARAMETERS_5, 0,
+                               REFCYC_PER_VM_GROUP_VBLANK, dlg_attr->refcyc_per_vm_group_vblank);
+
+       REG_GET(VBLANK_PARAMETERS_6,
+                       REFCYC_PER_VM_REQ_VBLANK, &refcyc_per_vm_req_vblank);
+
+       if (refcyc_per_vm_req_vblank == uninitialized_hw_default ||
+                       refcyc_per_vm_req_vblank > dlg_attr->refcyc_per_vm_req_vblank)
+               REG_SET(VBLANK_PARAMETERS_6, 0,
+                               REFCYC_PER_VM_REQ_VBLANK, dlg_attr->refcyc_per_vm_req_vblank);
+
+       REG_GET(FLIP_PARAMETERS_3,
+                       REFCYC_PER_VM_GROUP_FLIP, &refcyc_per_vm_group_flip);
+
+       if (refcyc_per_vm_group_flip == uninitialized_hw_default ||
+                       refcyc_per_vm_group_flip > dlg_attr->refcyc_per_vm_group_flip)
+               REG_SET(FLIP_PARAMETERS_3, 0,
+                               REFCYC_PER_VM_GROUP_FLIP, dlg_attr->refcyc_per_vm_group_flip);
+
+       REG_GET(FLIP_PARAMETERS_4,
+                       REFCYC_PER_VM_REQ_FLIP, &refcyc_per_vm_req_flip);
+
+       if (refcyc_per_vm_req_flip == uninitialized_hw_default ||
+                       refcyc_per_vm_req_flip > dlg_attr->refcyc_per_vm_req_flip)
+               REG_SET(FLIP_PARAMETERS_4, 0,
+                                       REFCYC_PER_VM_REQ_FLIP, dlg_attr->refcyc_per_vm_req_flip);
+
+       REG_SET(FLIP_PARAMETERS_5, 0,
+                       REFCYC_PER_PTE_GROUP_FLIP_C, dlg_attr->refcyc_per_pte_group_flip_c);
+
+       REG_SET(FLIP_PARAMETERS_6, 0,
+                       REFCYC_PER_META_CHUNK_FLIP_C, dlg_attr->refcyc_per_meta_chunk_flip_c);
+}
+
+void hubp21_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       hubp2_program_deadline(hubp, dlg_attr, ttu_attr);
+
+       apply_DEDCN21_142_wa_for_hostvm_deadline(hubp, dlg_attr);
+}
+
+void hubp21_program_requestor(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+
+       REG_UPDATE(HUBPRET_CONTROL,
+                       DET_BUF_PLANE1_BASE_ADDRESS, rq_regs->plane1_base_address);
+       REG_SET_4(DCN_EXPANSION_MODE, 0,
+                       DRQ_EXPANSION_MODE, rq_regs->drq_expansion_mode,
+                       PRQ_EXPANSION_MODE, rq_regs->prq_expansion_mode,
+                       MRQ_EXPANSION_MODE, rq_regs->mrq_expansion_mode,
+                       CRQ_EXPANSION_MODE, rq_regs->crq_expansion_mode);
+       REG_SET_8(DCHUBP_REQ_SIZE_CONFIG, 0,
+               CHUNK_SIZE, rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, rq_regs->rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, rq_regs->rq_regs_l.dpte_group_size,
+               VM_GROUP_SIZE, rq_regs->rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, rq_regs->rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, rq_regs->rq_regs_l.pte_row_height_linear);
+       REG_SET_7(DCHUBP_REQ_SIZE_CONFIG_C, 0,
+               CHUNK_SIZE_C, rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, rq_regs->rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, rq_regs->rq_regs_c.dpte_group_size,
+               SWATH_HEIGHT_C, rq_regs->rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, rq_regs->rq_regs_c.pte_row_height_linear);
+}
+
+static void hubp21_setup(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       /* otg is locked when this func is called. Register are double buffered.
+        * disable the requestors is not needed
+        */
+
+       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
+       hubp21_program_requestor(hubp, rq_regs);
+       hubp21_program_deadline(hubp, dlg_attr, ttu_attr);
+
+}
+
+static void hubp21_set_viewport(
+       struct hubp *hubp,
+       const struct rect *viewport,
+       const struct rect *viewport_c)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+
+       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION, 0,
+                 PRI_VIEWPORT_WIDTH, viewport->width,
+                 PRI_VIEWPORT_HEIGHT, viewport->height);
+
+       REG_SET_2(DCSURF_PRI_VIEWPORT_START, 0,
+                 PRI_VIEWPORT_X_START, viewport->x,
+                 PRI_VIEWPORT_Y_START, viewport->y);
+
+       /*for stereo*/
+       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION, 0,
+                 SEC_VIEWPORT_WIDTH, viewport->width,
+                 SEC_VIEWPORT_HEIGHT, viewport->height);
+
+       REG_SET_2(DCSURF_SEC_VIEWPORT_START, 0,
+                 SEC_VIEWPORT_X_START, viewport->x,
+                 SEC_VIEWPORT_Y_START, viewport->y);
+
+       /* DC supports NV12 only at the moment */
+       REG_SET_2(DCSURF_PRI_VIEWPORT_DIMENSION_C, 0,
+                 PRI_VIEWPORT_WIDTH_C, viewport_c->width,
+                 PRI_VIEWPORT_HEIGHT_C, viewport_c->height);
+
+       REG_SET_2(DCSURF_PRI_VIEWPORT_START_C, 0,
+                 PRI_VIEWPORT_X_START_C, viewport_c->x,
+                 PRI_VIEWPORT_Y_START_C, viewport_c->y);
+
+       REG_SET_2(DCSURF_SEC_VIEWPORT_DIMENSION_C, 0,
+                 SEC_VIEWPORT_WIDTH_C, viewport_c->width,
+                 SEC_VIEWPORT_HEIGHT_C, viewport_c->height);
+
+       REG_SET_2(DCSURF_SEC_VIEWPORT_START_C, 0,
+                 SEC_VIEWPORT_X_START_C, viewport_c->x,
+                 SEC_VIEWPORT_Y_START_C, viewport_c->y);
+}
+
+static void hubp21_set_vm_system_aperture_settings(struct hubp *hubp,
+                                                  struct vm_system_aperture_param *apt)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
+
+       // The format of high/low are 48:18 of the 48 bit addr
+       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 18;
+       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 18;
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, 0,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, mc_vm_apt_low.quad_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, 0,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mc_vm_apt_high.quad_part);
+
+       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
+                       ENABLE_L1_TLB, 1,
+                       SYSTEM_ACCESS_MODE, 0x3);
+}
+
+static void hubp21_validate_dml_output(struct hubp *hubp,
+               struct dc_context *ctx,
+               struct _vcs_dpi_display_rq_regs_st *dml_rq_regs,
+               struct _vcs_dpi_display_dlg_regs_st *dml_dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *dml_ttu_attr)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+       struct _vcs_dpi_display_rq_regs_st rq_regs = {0};
+       struct _vcs_dpi_display_dlg_regs_st dlg_attr = {0};
+       struct _vcs_dpi_display_ttu_regs_st ttu_attr = {0};
+       DC_LOGGER_INIT(ctx->logger);
+       DC_LOG_DEBUG("DML Validation | Running Validation");
+
+       /* Requester - Per hubp */
+       REG_GET(HUBPRET_CONTROL,
+               DET_BUF_PLANE1_BASE_ADDRESS, &rq_regs.plane1_base_address);
+       REG_GET_4(DCN_EXPANSION_MODE,
+               DRQ_EXPANSION_MODE, &rq_regs.drq_expansion_mode,
+               PRQ_EXPANSION_MODE, &rq_regs.prq_expansion_mode,
+               MRQ_EXPANSION_MODE, &rq_regs.mrq_expansion_mode,
+               CRQ_EXPANSION_MODE, &rq_regs.crq_expansion_mode);
+       REG_GET_8(DCHUBP_REQ_SIZE_CONFIG,
+               CHUNK_SIZE, &rq_regs.rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, &rq_regs.rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, &rq_regs.rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, &rq_regs.rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, &rq_regs.rq_regs_l.dpte_group_size,
+               VM_GROUP_SIZE, &rq_regs.rq_regs_l.mpte_group_size,
+               SWATH_HEIGHT, &rq_regs.rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, &rq_regs.rq_regs_l.pte_row_height_linear);
+       REG_GET_7(DCHUBP_REQ_SIZE_CONFIG_C,
+               CHUNK_SIZE_C, &rq_regs.rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, &rq_regs.rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, &rq_regs.rq_regs_c.dpte_group_size,
+               SWATH_HEIGHT_C, &rq_regs.rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs.rq_regs_c.pte_row_height_linear);
+
+       if (rq_regs.plane1_base_address != dml_rq_regs->plane1_base_address)
+               DC_LOG_DEBUG("DML Validation | HUBPRET_CONTROL:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->plane1_base_address, rq_regs.plane1_base_address);
+       if (rq_regs.drq_expansion_mode != dml_rq_regs->drq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->drq_expansion_mode, rq_regs.drq_expansion_mode);
+       if (rq_regs.prq_expansion_mode != dml_rq_regs->prq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:MRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->prq_expansion_mode, rq_regs.prq_expansion_mode);
+       if (rq_regs.mrq_expansion_mode != dml_rq_regs->mrq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:DET_BUF_PLANE1_BASE_ADDRESS - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->mrq_expansion_mode, rq_regs.mrq_expansion_mode);
+       if (rq_regs.crq_expansion_mode != dml_rq_regs->crq_expansion_mode)
+               DC_LOG_DEBUG("DML Validation | DCN_EXPANSION_MODE:CRQ_EXPANSION_MODE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->crq_expansion_mode, rq_regs.crq_expansion_mode);
+
+       if (rq_regs.rq_regs_l.chunk_size != dml_rq_regs->rq_regs_l.chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.chunk_size, rq_regs.rq_regs_l.chunk_size);
+       if (rq_regs.rq_regs_l.min_chunk_size != dml_rq_regs->rq_regs_l.min_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.min_chunk_size, rq_regs.rq_regs_l.min_chunk_size);
+       if (rq_regs.rq_regs_l.meta_chunk_size != dml_rq_regs->rq_regs_l.meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.meta_chunk_size, rq_regs.rq_regs_l.meta_chunk_size);
+       if (rq_regs.rq_regs_l.min_meta_chunk_size != dml_rq_regs->rq_regs_l.min_meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:MIN_META_CHUNK_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.min_meta_chunk_size, rq_regs.rq_regs_l.min_meta_chunk_size);
+       if (rq_regs.rq_regs_l.dpte_group_size != dml_rq_regs->rq_regs_l.dpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:DPTE_GROUP_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.dpte_group_size, rq_regs.rq_regs_l.dpte_group_size);
+       if (rq_regs.rq_regs_l.mpte_group_size != dml_rq_regs->rq_regs_l.mpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:VM_GROUP_SIZE - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.mpte_group_size, rq_regs.rq_regs_l.mpte_group_size);
+       if (rq_regs.rq_regs_l.swath_height != dml_rq_regs->rq_regs_l.swath_height)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:SWATH_HEIGHT - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.swath_height, rq_regs.rq_regs_l.swath_height);
+       if (rq_regs.rq_regs_l.pte_row_height_linear != dml_rq_regs->rq_regs_l.pte_row_height_linear)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG_C:PTE_ROW_HEIGHT_LINEAR - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_l.pte_row_height_linear, rq_regs.rq_regs_l.pte_row_height_linear);
+
+       if (rq_regs.rq_regs_c.chunk_size != dml_rq_regs->rq_regs_c.chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.chunk_size, rq_regs.rq_regs_c.chunk_size);
+       if (rq_regs.rq_regs_c.min_chunk_size != dml_rq_regs->rq_regs_c.min_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.min_chunk_size, rq_regs.rq_regs_c.min_chunk_size);
+       if (rq_regs.rq_regs_c.meta_chunk_size != dml_rq_regs->rq_regs_c.meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.meta_chunk_size, rq_regs.rq_regs_c.meta_chunk_size);
+       if (rq_regs.rq_regs_c.min_meta_chunk_size != dml_rq_regs->rq_regs_c.min_meta_chunk_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:MIN_META_CHUNK_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.min_meta_chunk_size, rq_regs.rq_regs_c.min_meta_chunk_size);
+       if (rq_regs.rq_regs_c.dpte_group_size != dml_rq_regs->rq_regs_c.dpte_group_size)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:DPTE_GROUP_SIZE_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.dpte_group_size, rq_regs.rq_regs_c.dpte_group_size);
+       if (rq_regs.rq_regs_c.swath_height != dml_rq_regs->rq_regs_c.swath_height)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:SWATH_HEIGHT_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.swath_height, rq_regs.rq_regs_c.swath_height);
+       if (rq_regs.rq_regs_c.pte_row_height_linear != dml_rq_regs->rq_regs_c.pte_row_height_linear)
+               DC_LOG_DEBUG("DML Validation | DCHUBP_REQ_SIZE_CONFIG:PTE_ROW_HEIGHT_LINEAR_C - Expected: %u  Actual: %u\n",
+                               dml_rq_regs->rq_regs_c.pte_row_height_linear, rq_regs.rq_regs_c.pte_row_height_linear);
+
+
+       /* DLG - Per hubp */
+       REG_GET_2(BLANK_OFFSET_0,
+               REFCYC_H_BLANK_END, &dlg_attr.refcyc_h_blank_end,
+               DLG_V_BLANK_END, &dlg_attr.dlg_vblank_end);
+       REG_GET(BLANK_OFFSET_1,
+               MIN_DST_Y_NEXT_START, &dlg_attr.min_dst_y_next_start);
+       REG_GET(DST_DIMENSIONS,
+               REFCYC_PER_HTOTAL, &dlg_attr.refcyc_per_htotal);
+       REG_GET_2(DST_AFTER_SCALER,
+               REFCYC_X_AFTER_SCALER, &dlg_attr.refcyc_x_after_scaler,
+               DST_Y_AFTER_SCALER, &dlg_attr.dst_y_after_scaler);
+       REG_GET(REF_FREQ_TO_PIX_FREQ,
+               REF_FREQ_TO_PIX_FREQ, &dlg_attr.ref_freq_to_pix_freq);
+
+       if (dlg_attr.refcyc_h_blank_end != dml_dlg_attr->refcyc_h_blank_end)
+               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:REFCYC_H_BLANK_END - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_h_blank_end, dlg_attr.refcyc_h_blank_end);
+       if (dlg_attr.dlg_vblank_end != dml_dlg_attr->dlg_vblank_end)
+               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_0:DLG_V_BLANK_END - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dlg_vblank_end, dlg_attr.dlg_vblank_end);
+       if (dlg_attr.min_dst_y_next_start != dml_dlg_attr->min_dst_y_next_start)
+               DC_LOG_DEBUG("DML Validation | BLANK_OFFSET_1:MIN_DST_Y_NEXT_START - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->min_dst_y_next_start, dlg_attr.min_dst_y_next_start);
+       if (dlg_attr.refcyc_per_htotal != dml_dlg_attr->refcyc_per_htotal)
+               DC_LOG_DEBUG("DML Validation | DST_DIMENSIONS:REFCYC_PER_HTOTAL - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_htotal, dlg_attr.refcyc_per_htotal);
+       if (dlg_attr.refcyc_x_after_scaler != dml_dlg_attr->refcyc_x_after_scaler)
+               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:REFCYC_X_AFTER_SCALER - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_x_after_scaler, dlg_attr.refcyc_x_after_scaler);
+       if (dlg_attr.dst_y_after_scaler != dml_dlg_attr->dst_y_after_scaler)
+               DC_LOG_DEBUG("DML Validation | DST_AFTER_SCALER:DST_Y_AFTER_SCALER - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_after_scaler, dlg_attr.dst_y_after_scaler);
+       if (dlg_attr.ref_freq_to_pix_freq != dml_dlg_attr->ref_freq_to_pix_freq)
+               DC_LOG_DEBUG("DML Validation | REF_FREQ_TO_PIX_FREQ:REF_FREQ_TO_PIX_FREQ - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->ref_freq_to_pix_freq, dlg_attr.ref_freq_to_pix_freq);
+
+       /* DLG - Per luma/chroma */
+       REG_GET(VBLANK_PARAMETERS_1,
+               REFCYC_PER_PTE_GROUP_VBLANK_L, &dlg_attr.refcyc_per_pte_group_vblank_l);
+       if (REG(NOM_PARAMETERS_0))
+               REG_GET(NOM_PARAMETERS_0,
+                       DST_Y_PER_PTE_ROW_NOM_L, &dlg_attr.dst_y_per_pte_row_nom_l);
+       if (REG(NOM_PARAMETERS_1))
+               REG_GET(NOM_PARAMETERS_1,
+                       REFCYC_PER_PTE_GROUP_NOM_L, &dlg_attr.refcyc_per_pte_group_nom_l);
+       REG_GET(NOM_PARAMETERS_4,
+               DST_Y_PER_META_ROW_NOM_L, &dlg_attr.dst_y_per_meta_row_nom_l);
+       REG_GET(NOM_PARAMETERS_5,
+               REFCYC_PER_META_CHUNK_NOM_L, &dlg_attr.refcyc_per_meta_chunk_nom_l);
+       REG_GET_2(PER_LINE_DELIVERY,
+               REFCYC_PER_LINE_DELIVERY_L, &dlg_attr.refcyc_per_line_delivery_l,
+               REFCYC_PER_LINE_DELIVERY_C, &dlg_attr.refcyc_per_line_delivery_c);
+       REG_GET_2(PER_LINE_DELIVERY_PRE,
+               REFCYC_PER_LINE_DELIVERY_PRE_L, &dlg_attr.refcyc_per_line_delivery_pre_l,
+               REFCYC_PER_LINE_DELIVERY_PRE_C, &dlg_attr.refcyc_per_line_delivery_pre_c);
+       REG_GET(VBLANK_PARAMETERS_2,
+               REFCYC_PER_PTE_GROUP_VBLANK_C, &dlg_attr.refcyc_per_pte_group_vblank_c);
+       if (REG(NOM_PARAMETERS_2))
+               REG_GET(NOM_PARAMETERS_2,
+                       DST_Y_PER_PTE_ROW_NOM_C, &dlg_attr.dst_y_per_pte_row_nom_c);
+       if (REG(NOM_PARAMETERS_3))
+               REG_GET(NOM_PARAMETERS_3,
+                       REFCYC_PER_PTE_GROUP_NOM_C, &dlg_attr.refcyc_per_pte_group_nom_c);
+       REG_GET(NOM_PARAMETERS_6,
+               DST_Y_PER_META_ROW_NOM_C, &dlg_attr.dst_y_per_meta_row_nom_c);
+       REG_GET(NOM_PARAMETERS_7,
+               REFCYC_PER_META_CHUNK_NOM_C, &dlg_attr.refcyc_per_meta_chunk_nom_c);
+       REG_GET(VBLANK_PARAMETERS_3,
+                       REFCYC_PER_META_CHUNK_VBLANK_L, &dlg_attr.refcyc_per_meta_chunk_vblank_l);
+       REG_GET(VBLANK_PARAMETERS_4,
+                       REFCYC_PER_META_CHUNK_VBLANK_C, &dlg_attr.refcyc_per_meta_chunk_vblank_c);
+
+       if (dlg_attr.refcyc_per_pte_group_vblank_l != dml_dlg_attr->refcyc_per_pte_group_vblank_l)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_1:REFCYC_PER_PTE_GROUP_VBLANK_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_vblank_l, dlg_attr.refcyc_per_pte_group_vblank_l);
+       if (dlg_attr.dst_y_per_pte_row_nom_l != dml_dlg_attr->dst_y_per_pte_row_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_0:DST_Y_PER_PTE_ROW_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_pte_row_nom_l, dlg_attr.dst_y_per_pte_row_nom_l);
+       if (dlg_attr.refcyc_per_pte_group_nom_l != dml_dlg_attr->refcyc_per_pte_group_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_1:REFCYC_PER_PTE_GROUP_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_nom_l, dlg_attr.refcyc_per_pte_group_nom_l);
+       if (dlg_attr.dst_y_per_meta_row_nom_l != dml_dlg_attr->dst_y_per_meta_row_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_4:DST_Y_PER_META_ROW_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_meta_row_nom_l, dlg_attr.dst_y_per_meta_row_nom_l);
+       if (dlg_attr.refcyc_per_meta_chunk_nom_l != dml_dlg_attr->refcyc_per_meta_chunk_nom_l)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_5:REFCYC_PER_META_CHUNK_NOM_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_nom_l, dlg_attr.refcyc_per_meta_chunk_nom_l);
+       if (dlg_attr.refcyc_per_line_delivery_l != dml_dlg_attr->refcyc_per_line_delivery_l)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_l, dlg_attr.refcyc_per_line_delivery_l);
+       if (dlg_attr.refcyc_per_line_delivery_c != dml_dlg_attr->refcyc_per_line_delivery_c)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY:REFCYC_PER_LINE_DELIVERY_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_c, dlg_attr.refcyc_per_line_delivery_c);
+       if (dlg_attr.refcyc_per_pte_group_vblank_c != dml_dlg_attr->refcyc_per_pte_group_vblank_c)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_2:REFCYC_PER_PTE_GROUP_VBLANK_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_vblank_c, dlg_attr.refcyc_per_pte_group_vblank_c);
+       if (dlg_attr.dst_y_per_pte_row_nom_c != dml_dlg_attr->dst_y_per_pte_row_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_2:DST_Y_PER_PTE_ROW_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_pte_row_nom_c, dlg_attr.dst_y_per_pte_row_nom_c);
+       if (dlg_attr.refcyc_per_pte_group_nom_c != dml_dlg_attr->refcyc_per_pte_group_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_3:REFCYC_PER_PTE_GROUP_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_nom_c, dlg_attr.refcyc_per_pte_group_nom_c);
+       if (dlg_attr.dst_y_per_meta_row_nom_c != dml_dlg_attr->dst_y_per_meta_row_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_6:DST_Y_PER_META_ROW_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->dst_y_per_meta_row_nom_c, dlg_attr.dst_y_per_meta_row_nom_c);
+       if (dlg_attr.refcyc_per_meta_chunk_nom_c != dml_dlg_attr->refcyc_per_meta_chunk_nom_c)
+               DC_LOG_DEBUG("DML Validation | NOM_PARAMETERS_7:REFCYC_PER_META_CHUNK_NOM_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_nom_c, dlg_attr.refcyc_per_meta_chunk_nom_c);
+       if (dlg_attr.refcyc_per_line_delivery_pre_l != dml_dlg_attr->refcyc_per_line_delivery_pre_l)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_pre_l, dlg_attr.refcyc_per_line_delivery_pre_l);
+       if (dlg_attr.refcyc_per_line_delivery_pre_c != dml_dlg_attr->refcyc_per_line_delivery_pre_c)
+               DC_LOG_DEBUG("DML Validation | PER_LINE_DELIVERY_PRE:REFCYC_PER_LINE_DELIVERY_PRE_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_line_delivery_pre_c, dlg_attr.refcyc_per_line_delivery_pre_c);
+       if (dlg_attr.refcyc_per_meta_chunk_vblank_l != dml_dlg_attr->refcyc_per_meta_chunk_vblank_l)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_3:REFCYC_PER_META_CHUNK_VBLANK_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_l, dlg_attr.refcyc_per_meta_chunk_vblank_l);
+       if (dlg_attr.refcyc_per_meta_chunk_vblank_c != dml_dlg_attr->refcyc_per_meta_chunk_vblank_c)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_4:REFCYC_PER_META_CHUNK_VBLANK_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_vblank_c, dlg_attr.refcyc_per_meta_chunk_vblank_c);
+
+       /* TTU - per hubp */
+       REG_GET_2(DCN_TTU_QOS_WM,
+               QoS_LEVEL_LOW_WM, &ttu_attr.qos_level_low_wm,
+               QoS_LEVEL_HIGH_WM, &ttu_attr.qos_level_high_wm);
+
+       if (ttu_attr.qos_level_low_wm != dml_ttu_attr->qos_level_low_wm)
+               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_LOW_WM - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_low_wm, ttu_attr.qos_level_low_wm);
+       if (ttu_attr.qos_level_high_wm != dml_ttu_attr->qos_level_high_wm)
+               DC_LOG_DEBUG("DML Validation | DCN_TTU_QOS_WM:QoS_LEVEL_HIGH_WM - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_high_wm, ttu_attr.qos_level_high_wm);
+
+       /* TTU - per luma/chroma */
+       /* Assumed surf0 is luma and 1 is chroma */
+       REG_GET_3(DCN_SURF0_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_l,
+               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_l,
+               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_l);
+       REG_GET_3(DCN_SURF1_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_c,
+               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_c,
+               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_c);
+       REG_GET_3(DCN_CUR0_TTU_CNTL0,
+               REFCYC_PER_REQ_DELIVERY, &ttu_attr.refcyc_per_req_delivery_cur0,
+               QoS_LEVEL_FIXED, &ttu_attr.qos_level_fixed_cur0,
+               QoS_RAMP_DISABLE, &ttu_attr.qos_ramp_disable_cur0);
+       REG_GET(FLIP_PARAMETERS_1,
+               REFCYC_PER_PTE_GROUP_FLIP_L, &dlg_attr.refcyc_per_pte_group_flip_l);
+       REG_GET(DCN_CUR0_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur0);
+       REG_GET(DCN_CUR1_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_cur1);
+       REG_GET(DCN_SURF0_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_l);
+       REG_GET(DCN_SURF1_TTU_CNTL1,
+                       REFCYC_PER_REQ_DELIVERY_PRE, &ttu_attr.refcyc_per_req_delivery_pre_c);
+
+       if (ttu_attr.refcyc_per_req_delivery_l != dml_ttu_attr->refcyc_per_req_delivery_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_l, ttu_attr.refcyc_per_req_delivery_l);
+       if (ttu_attr.qos_level_fixed_l != dml_ttu_attr->qos_level_fixed_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_fixed_l, ttu_attr.qos_level_fixed_l);
+       if (ttu_attr.qos_ramp_disable_l != dml_ttu_attr->qos_ramp_disable_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_ramp_disable_l, ttu_attr.qos_ramp_disable_l);
+       if (ttu_attr.refcyc_per_req_delivery_c != dml_ttu_attr->refcyc_per_req_delivery_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_c, ttu_attr.refcyc_per_req_delivery_c);
+       if (ttu_attr.qos_level_fixed_c != dml_ttu_attr->qos_level_fixed_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_fixed_c, ttu_attr.qos_level_fixed_c);
+       if (ttu_attr.qos_ramp_disable_c != dml_ttu_attr->qos_ramp_disable_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_ramp_disable_c, ttu_attr.qos_ramp_disable_c);
+       if (ttu_attr.refcyc_per_req_delivery_cur0 != dml_ttu_attr->refcyc_per_req_delivery_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:REFCYC_PER_REQ_DELIVERY - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_cur0, ttu_attr.refcyc_per_req_delivery_cur0);
+       if (ttu_attr.qos_level_fixed_cur0 != dml_ttu_attr->qos_level_fixed_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_LEVEL_FIXED - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_level_fixed_cur0, ttu_attr.qos_level_fixed_cur0);
+       if (ttu_attr.qos_ramp_disable_cur0 != dml_ttu_attr->qos_ramp_disable_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL0:QoS_RAMP_DISABLE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->qos_ramp_disable_cur0, ttu_attr.qos_ramp_disable_cur0);
+       if (dlg_attr.refcyc_per_pte_group_flip_l != dml_dlg_attr->refcyc_per_pte_group_flip_l)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_1:REFCYC_PER_PTE_GROUP_FLIP_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_flip_l, dlg_attr.refcyc_per_pte_group_flip_l);
+       if (ttu_attr.refcyc_per_req_delivery_pre_cur0 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur0)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur0, ttu_attr.refcyc_per_req_delivery_pre_cur0);
+       if (ttu_attr.refcyc_per_req_delivery_pre_cur1 != dml_ttu_attr->refcyc_per_req_delivery_pre_cur1)
+               DC_LOG_DEBUG("DML Validation | DCN_CUR1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_cur1, ttu_attr.refcyc_per_req_delivery_pre_cur1);
+       if (ttu_attr.refcyc_per_req_delivery_pre_l != dml_ttu_attr->refcyc_per_req_delivery_pre_l)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF0_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_l, ttu_attr.refcyc_per_req_delivery_pre_l);
+       if (ttu_attr.refcyc_per_req_delivery_pre_c != dml_ttu_attr->refcyc_per_req_delivery_pre_c)
+               DC_LOG_DEBUG("DML Validation | DCN_SURF1_TTU_CNTL1:REFCYC_PER_REQ_DELIVERY_PRE - Expected: %u  Actual: %u\n",
+                               dml_ttu_attr->refcyc_per_req_delivery_pre_c, ttu_attr.refcyc_per_req_delivery_pre_c);
+
+       /* Host VM deadline regs */
+       REG_GET(VBLANK_PARAMETERS_5,
+               REFCYC_PER_VM_GROUP_VBLANK, &dlg_attr.refcyc_per_vm_group_vblank);
+       REG_GET(VBLANK_PARAMETERS_6,
+               REFCYC_PER_VM_REQ_VBLANK, &dlg_attr.refcyc_per_vm_req_vblank);
+       REG_GET(FLIP_PARAMETERS_3,
+               REFCYC_PER_VM_GROUP_FLIP, &dlg_attr.refcyc_per_vm_group_flip);
+       REG_GET(FLIP_PARAMETERS_4,
+               REFCYC_PER_VM_REQ_FLIP, &dlg_attr.refcyc_per_vm_req_flip);
+       REG_GET(FLIP_PARAMETERS_5,
+               REFCYC_PER_PTE_GROUP_FLIP_C, &dlg_attr.refcyc_per_pte_group_flip_c);
+       REG_GET(FLIP_PARAMETERS_6,
+               REFCYC_PER_META_CHUNK_FLIP_C, &dlg_attr.refcyc_per_meta_chunk_flip_c);
+       REG_GET(FLIP_PARAMETERS_2,
+               REFCYC_PER_META_CHUNK_FLIP_L, &dlg_attr.refcyc_per_meta_chunk_flip_l);
+
+       if (dlg_attr.refcyc_per_vm_group_vblank != dml_dlg_attr->refcyc_per_vm_group_vblank)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_5:REFCYC_PER_VM_GROUP_VBLANK - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_vm_group_vblank, dlg_attr.refcyc_per_vm_group_vblank);
+       if (dlg_attr.refcyc_per_vm_req_vblank != dml_dlg_attr->refcyc_per_vm_req_vblank)
+               DC_LOG_DEBUG("DML Validation | VBLANK_PARAMETERS_6:REFCYC_PER_VM_REQ_VBLANK - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_vm_req_vblank, dlg_attr.refcyc_per_vm_req_vblank);
+       if (dlg_attr.refcyc_per_vm_group_flip != dml_dlg_attr->refcyc_per_vm_group_flip)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_3:REFCYC_PER_VM_GROUP_FLIP - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_vm_group_flip, dlg_attr.refcyc_per_vm_group_flip);
+       if (dlg_attr.refcyc_per_vm_req_flip != dml_dlg_attr->refcyc_per_vm_req_flip)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_4:REFCYC_PER_VM_REQ_FLIP - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_vm_req_flip, dlg_attr.refcyc_per_vm_req_flip);
+       if (dlg_attr.refcyc_per_pte_group_flip_c != dml_dlg_attr->refcyc_per_pte_group_flip_c)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_5:REFCYC_PER_PTE_GROUP_FLIP_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_pte_group_flip_c, dlg_attr.refcyc_per_pte_group_flip_c);
+       if (dlg_attr.refcyc_per_meta_chunk_flip_c != dml_dlg_attr->refcyc_per_meta_chunk_flip_c)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_6:REFCYC_PER_META_CHUNK_FLIP_C - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_flip_c, dlg_attr.refcyc_per_meta_chunk_flip_c);
+       if (dlg_attr.refcyc_per_meta_chunk_flip_l != dml_dlg_attr->refcyc_per_meta_chunk_flip_l)
+               DC_LOG_DEBUG("DML Validation | FLIP_PARAMETERS_2:REFCYC_PER_META_CHUNK_FLIP_L - Expected: %u  Actual: %u\n",
+                               dml_dlg_attr->refcyc_per_meta_chunk_flip_l, dlg_attr.refcyc_per_meta_chunk_flip_l);
+}
+
+static void program_surface_flip_and_addr(struct hubp *hubp, struct surface_flip_registers *flip_regs)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+
+       REG_UPDATE_3(DCSURF_FLIP_CONTROL,
+                                       SURFACE_FLIP_TYPE, flip_regs->immediate,
+                                       SURFACE_FLIP_MODE_FOR_STEREOSYNC, flip_regs->grph_stereo,
+                                       SURFACE_FLIP_IN_STEREOSYNC, flip_regs->grph_stereo);
+
+       REG_UPDATE(VMID_SETTINGS_0,
+                               VMID, flip_regs->vmid);
+
+       REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
+                       PRIMARY_SURFACE_TMZ, flip_regs->tmz_surface,
+                       PRIMARY_SURFACE_TMZ_C, flip_regs->tmz_surface,
+                       PRIMARY_META_SURFACE_TMZ, flip_regs->tmz_surface,
+                       PRIMARY_META_SURFACE_TMZ_C, flip_regs->tmz_surface,
+                       SECONDARY_SURFACE_TMZ, flip_regs->tmz_surface,
+                       SECONDARY_SURFACE_TMZ_C, flip_regs->tmz_surface,
+                       SECONDARY_META_SURFACE_TMZ, flip_regs->tmz_surface,
+                       SECONDARY_META_SURFACE_TMZ_C, flip_regs->tmz_surface);
+
+       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
+                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C);
+
+       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
+                       PRIMARY_META_SURFACE_ADDRESS_C,
+                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS_C);
+
+       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH);
+
+       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                       PRIMARY_META_SURFACE_ADDRESS,
+                       flip_regs->DCSURF_PRIMARY_META_SURFACE_ADDRESS);
+
+       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
+                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
+                       flip_regs->DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH);
+
+       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
+                       SECONDARY_META_SURFACE_ADDRESS,
+                       flip_regs->DCSURF_SECONDARY_META_SURFACE_ADDRESS);
+
+
+       REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
+                       SECONDARY_SURFACE_ADDRESS_HIGH,
+                       flip_regs->DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH);
+
+       REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
+                       SECONDARY_SURFACE_ADDRESS,
+                       flip_regs->DCSURF_SECONDARY_SURFACE_ADDRESS);
+
+
+       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
+                       PRIMARY_SURFACE_ADDRESS_HIGH_C,
+                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C);
+
+       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
+                       PRIMARY_SURFACE_ADDRESS_C,
+                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_C);
+
+       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                       PRIMARY_SURFACE_ADDRESS_HIGH,
+                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH);
+
+       REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                       PRIMARY_SURFACE_ADDRESS,
+                       flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS);
+}
+
+static void dmcub_PLAT_54186_wa(struct hubp *hubp,
+                               struct surface_flip_registers *flip_regs)
+{
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+       union dmub_rb_cmd cmd;
+
+       memset(&cmd, 0, sizeof(cmd));
+
+       cmd.PLAT_54186_wa.header.type = DMUB_CMD__PLAT_54186_WA;
+       cmd.PLAT_54186_wa.header.payload_bytes = sizeof(cmd.PLAT_54186_wa.flip);
+       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS =
+               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS;
+       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS_C =
+               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_C;
+       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
+               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH;
+       cmd.PLAT_54186_wa.flip.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C =
+               flip_regs->DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C;
+       cmd.PLAT_54186_wa.flip.flip_params.grph_stereo = flip_regs->grph_stereo;
+       cmd.PLAT_54186_wa.flip.flip_params.hubp_inst = hubp->inst;
+       cmd.PLAT_54186_wa.flip.flip_params.immediate = flip_regs->immediate;
+       cmd.PLAT_54186_wa.flip.flip_params.tmz_surface = flip_regs->tmz_surface;
+       cmd.PLAT_54186_wa.flip.flip_params.vmid = flip_regs->vmid;
+
+       PERF_TRACE();  // TODO: remove after performance is stable.
+       dc_wake_and_execute_dmub_cmd(hubp->ctx, &cmd, DM_DMUB_WAIT_TYPE_WAIT);
+       PERF_TRACE();  // TODO: remove after performance is stable.
+}
+
+static bool hubp21_program_surface_flip_and_addr(
+               struct hubp *hubp,
+               const struct dc_plane_address *address,
+               bool flip_immediate)
+{
+       struct surface_flip_registers flip_regs = { 0 };
+
+       flip_regs.vmid = address->vmid;
+
+       switch (address->type) {
+       case PLN_ADDR_TYPE_GRAPHICS:
+               if (address->grph.addr.quad_part == 0) {
+                       BREAK_TO_DEBUGGER();
+                       break;
+               }
+
+               if (address->grph.meta_addr.quad_part != 0) {
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS =
+                                       address->grph.meta_addr.low_part;
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH =
+                                       address->grph.meta_addr.high_part;
+               }
+
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS =
+                               address->grph.addr.low_part;
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
+                               address->grph.addr.high_part;
+               break;
+       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
+               if (address->video_progressive.luma_addr.quad_part == 0
+                               || address->video_progressive.chroma_addr.quad_part == 0)
+                       break;
+
+               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS =
+                                       address->video_progressive.luma_meta_addr.low_part;
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH =
+                                       address->video_progressive.luma_meta_addr.high_part;
+
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_C =
+                                       address->video_progressive.chroma_meta_addr.low_part;
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C =
+                                       address->video_progressive.chroma_meta_addr.high_part;
+               }
+
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS =
+                               address->video_progressive.luma_addr.low_part;
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
+                               address->video_progressive.luma_addr.high_part;
+
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_C =
+                               address->video_progressive.chroma_addr.low_part;
+
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C =
+                               address->video_progressive.chroma_addr.high_part;
+
+               break;
+       case PLN_ADDR_TYPE_GRPH_STEREO:
+               if (address->grph_stereo.left_addr.quad_part == 0)
+                       break;
+               if (address->grph_stereo.right_addr.quad_part == 0)
+                       break;
+
+               flip_regs.grph_stereo = true;
+
+               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
+                       flip_regs.DCSURF_SECONDARY_META_SURFACE_ADDRESS =
+                                       address->grph_stereo.right_meta_addr.low_part;
+                       flip_regs.DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH =
+                                       address->grph_stereo.right_meta_addr.high_part;
+               }
+
+               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS =
+                                       address->grph_stereo.left_meta_addr.low_part;
+                       flip_regs.DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH =
+                                       address->grph_stereo.left_meta_addr.high_part;
+               }
+
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS =
+                               address->grph_stereo.left_addr.low_part;
+               flip_regs.DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH =
+                               address->grph_stereo.left_addr.high_part;
+
+               flip_regs.DCSURF_SECONDARY_SURFACE_ADDRESS =
+                               address->grph_stereo.right_addr.low_part;
+               flip_regs.DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH =
+                               address->grph_stereo.right_addr.high_part;
+
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       flip_regs.tmz_surface = address->tmz_surface;
+       flip_regs.immediate = flip_immediate;
+
+       if (hubp->ctx->dc->debug.enable_dmcub_surface_flip && address->type == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
+               dmcub_PLAT_54186_wa(hubp, &flip_regs);
+       else
+               program_surface_flip_and_addr(hubp, &flip_regs);
+
+       hubp->request_address = *address;
+
+       return true;
+}
+
+static void hubp21_init(struct hubp *hubp)
+{
+       // DEDCN21-133: Inconsistent row starting line for flip between DPTE and Meta
+       // This is a chicken bit to enable the ECO fix.
+
+       struct dcn21_hubp *hubp21 = TO_DCN21_HUBP(hubp);
+       //hubp[i].HUBPREQ_DEBUG.HUBPREQ_DEBUG[26] = 1;
+       REG_WRITE(HUBPREQ_DEBUG, 1 << 26);
+}
+static struct hubp_funcs dcn21_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp21_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp1_program_surface_config,
+       .hubp_is_flip_pending = hubp1_is_flip_pending,
+       .hubp_setup = hubp21_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp21_set_vm_system_aperture_settings,
+       .set_blank = hubp1_set_blank,
+       .dcc_control = hubp1_dcc_control,
+       .mem_program_viewport = hubp21_set_viewport,
+       .set_cursor_attributes  = hubp2_cursor_set_attributes,
+       .set_cursor_position    = hubp1_cursor_set_position,
+       .hubp_clk_cntl = hubp1_clk_cntl,
+       .hubp_vtg_sel = hubp1_vtg_sel,
+       .dmdata_set_attributes = hubp2_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp2_read_state,
+       .hubp_clear_underflow = hubp1_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp21_init,
+       .validate_dml_output = hubp21_validate_dml_output,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+};
+
+bool hubp21_construct(
+       struct dcn21_hubp *hubp21,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask)
+{
+       hubp21->base.funcs = &dcn21_hubp_funcs;
+       hubp21->base.ctx = ctx;
+       hubp21->hubp_regs = hubp_regs;
+       hubp21->hubp_shift = hubp_shift;
+       hubp21->hubp_mask = hubp_mask;
+       hubp21->base.inst = inst;
+       hubp21->base.opp_id = OPP_ID_INVALID;
+       hubp21->base.mpcc_id = 0xf;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn21/dcn21_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn21/dcn21_hubp.h
new file mode 100644 (file)
index 0000000..9873b6c
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+* Copyright 2018 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef DAL_DC_DCN21_DCN21_HUBP_H_
+#define DAL_DC_DCN21_DCN21_HUBP_H_
+
+#include "../dcn20/dcn20_hubp.h"
+#include "../dcn10/dcn10_hubp.h"
+
+#define TO_DCN21_HUBP(hubp)\
+       container_of(hubp, struct dcn21_hubp, base)
+
+#define HUBP_REG_LIST_DCN21(id)\
+       HUBP_REG_LIST_DCN2_COMMON(id),\
+       SRI(FLIP_PARAMETERS_3, HUBPREQ, id),\
+       SRI(FLIP_PARAMETERS_4, HUBPREQ, id),\
+       SRI(FLIP_PARAMETERS_5, HUBPREQ, id),\
+       SRI(FLIP_PARAMETERS_6, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_5, HUBPREQ, id),\
+       SRI(VBLANK_PARAMETERS_6, HUBPREQ, id)
+
+#define HUBP_MASK_SH_LIST_DCN21_COMMON(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN_SHARE_COMMON(mask_sh),\
+       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_3, REFCYC_PER_VM_GROUP_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_4, REFCYC_PER_VM_REQ_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_5, REFCYC_PER_PTE_GROUP_FLIP_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_6, REFCYC_PER_META_CHUNK_FLIP_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_5, REFCYC_PER_VM_GROUP_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_6, REFCYC_PER_VM_REQ_VBLANK, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, VM_GROUP_SIZE, mask_sh)
+
+#define HUBP_MASK_SH_LIST_DCN21(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN21_COMMON(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh)
+
+
+struct dcn21_hubp {
+       struct hubp base;
+       struct dcn_hubp_state state;
+       const struct dcn_hubp2_registers *hubp_regs;
+       const struct dcn_hubp2_shift *hubp_shift;
+       const struct dcn_hubp2_mask *hubp_mask;
+       int PLAT_54186_wa_chroma_addr_offset;
+};
+
+bool hubp21_construct(
+       struct dcn21_hubp *hubp21,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask);
+
+void apply_DEDCN21_142_wa_for_hostvm_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr);
+
+void hubp21_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr);
+
+void hubp21_program_requestor(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs);
+#endif /* DAL_DC_DCN21_DCN21_HUBP_H_ */
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn30/dcn30_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn30/dcn30_hubp.c
new file mode 100644 (file)
index 0000000..60a64d2
--- /dev/null
@@ -0,0 +1,535 @@
+/*
+ * Copyright 2020 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#include "dcn30_hubp.h"
+
+#include "dm_services.h"
+#include "dce_calcs.h"
+#include "reg_helper.h"
+#include "basics/conversion.h"
+#include "dcn20/dcn20_hubp.h"
+#include "dcn21/dcn21_hubp.h"
+
+#define REG(reg)\
+       hubp2->hubp_regs->reg
+
+#define CTX \
+       hubp2->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
+
+void hubp3_set_vm_system_aperture_settings(struct hubp *hubp,
+               struct vm_system_aperture_param *apt)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_low;
+       PHYSICAL_ADDRESS_LOC mc_vm_apt_high;
+
+       // The format of high/low are 48:18 of the 48 bit addr
+       mc_vm_apt_low.quad_part = apt->sys_low.quad_part >> 18;
+       mc_vm_apt_high.quad_part = apt->sys_high.quad_part >> 18;
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, 0,
+                       MC_VM_SYSTEM_APERTURE_LOW_ADDR, mc_vm_apt_low.quad_part);
+
+       REG_SET(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, 0,
+                       MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mc_vm_apt_high.quad_part);
+
+       REG_SET_2(DCN_VM_MX_L1_TLB_CNTL, 0,
+                       ENABLE_L1_TLB, 1,
+                       SYSTEM_ACCESS_MODE, 0x3);
+}
+
+bool hubp3_program_surface_flip_and_addr(
+       struct hubp *hubp,
+       const struct dc_plane_address *address,
+       bool flip_immediate)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       //program flip type
+       REG_UPDATE(DCSURF_FLIP_CONTROL,
+                       SURFACE_FLIP_TYPE, flip_immediate);
+
+       // Program VMID reg
+       if (flip_immediate == 0)
+               REG_UPDATE(VMID_SETTINGS_0,
+                       VMID, address->vmid);
+
+       if (address->type == PLN_ADDR_TYPE_GRPH_STEREO) {
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0);
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x1);
+
+       } else {
+               // turn off stereo if not in stereo
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, 0x0);
+               REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, 0x0);
+       }
+
+       /* HW automatically latch rest of address register on write to
+        * DCSURF_PRIMARY_SURFACE_ADDRESS if SURFACE_UPDATE_LOCK is not used
+        *
+        * program high first and then the low addr, order matters!
+        */
+       switch (address->type) {
+       case PLN_ADDR_TYPE_GRAPHICS:
+               /* DCN1.0 does not support const color
+                * TODO: program DCHUBBUB_RET_PATH_DCC_CFGx_0/1
+                * base on address->grph.dcc_const_color
+                * x = 0, 2, 4, 6 for pipe 0, 1, 2, 3 for rgb and luma
+                * x = 1, 3, 5, 7 for pipe 0, 1, 2, 3 for chroma
+                */
+
+               if (address->grph.addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_2(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface);
+
+               if (address->grph.meta_addr.quad_part != 0) {
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph.meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->grph.meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->grph.addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->grph.addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_VIDEO_PROGRESSIVE:
+               if (address->video_progressive.luma_addr.quad_part == 0
+                               || address->video_progressive.chroma_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->video_progressive.luma_meta_addr.quad_part != 0) {
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
+                                       address->video_progressive.chroma_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_C,
+                                       address->video_progressive.chroma_meta_addr.low_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->video_progressive.luma_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->video_progressive.luma_meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
+                               address->video_progressive.chroma_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_C,
+                               address->video_progressive.chroma_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->video_progressive.luma_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->video_progressive.luma_addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_GRPH_STEREO:
+               if (address->grph_stereo.left_addr.quad_part == 0)
+                       break;
+               if (address->grph_stereo.right_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_8(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface,
+                               SECONDARY_SURFACE_TMZ, address->tmz_surface,
+                               SECONDARY_SURFACE_TMZ_C, address->tmz_surface,
+                               SECONDARY_META_SURFACE_TMZ, address->tmz_surface,
+                               SECONDARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->grph_stereo.right_meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                               SECONDARY_META_SURFACE_ADDRESS_HIGH_C,
+                               address->grph_stereo.right_alpha_meta_addr.high_part);
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, 0,
+                               SECONDARY_META_SURFACE_ADDRESS_C,
+                               address->grph_stereo.right_alpha_meta_addr.low_part);
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       SECONDARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph_stereo.right_meta_addr.high_part);
+
+                       REG_SET(DCSURF_SECONDARY_META_SURFACE_ADDRESS, 0,
+                                       SECONDARY_META_SURFACE_ADDRESS,
+                                       address->grph_stereo.right_meta_addr.low_part);
+               }
+               if (address->grph_stereo.left_meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                               PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
+                               address->grph_stereo.left_alpha_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
+                               PRIMARY_META_SURFACE_ADDRESS_C,
+                               address->grph_stereo.left_alpha_meta_addr.low_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->grph_stereo.left_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->grph_stereo.left_meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, 0,
+                               SECONDARY_SURFACE_ADDRESS_HIGH_C,
+                               address->grph_stereo.right_alpha_addr.high_part);
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_C, 0,
+                               SECONDARY_SURFACE_ADDRESS_C,
+                               address->grph_stereo.right_alpha_addr.low_part);
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, 0,
+                               SECONDARY_SURFACE_ADDRESS_HIGH,
+                               address->grph_stereo.right_addr.high_part);
+
+               REG_SET(DCSURF_SECONDARY_SURFACE_ADDRESS, 0,
+                               SECONDARY_SURFACE_ADDRESS,
+                               address->grph_stereo.right_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
+                               address->grph_stereo.left_alpha_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_C,
+                               address->grph_stereo.left_alpha_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->grph_stereo.left_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->grph_stereo.left_addr.low_part);
+               break;
+       case PLN_ADDR_TYPE_RGBEA:
+               if (address->rgbea.addr.quad_part == 0
+                               || address->rgbea.alpha_addr.quad_part == 0)
+                       break;
+
+               REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                               PRIMARY_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_SURFACE_TMZ_C, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ, address->tmz_surface,
+                               PRIMARY_META_SURFACE_TMZ_C, address->tmz_surface);
+
+               if (address->rgbea.meta_addr.quad_part != 0) {
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH_C,
+                                       address->rgbea.alpha_meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_C,
+                                       address->rgbea.alpha_meta_addr.low_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS_HIGH,
+                                       address->rgbea.meta_addr.high_part);
+
+                       REG_SET(DCSURF_PRIMARY_META_SURFACE_ADDRESS, 0,
+                                       PRIMARY_META_SURFACE_ADDRESS,
+                                       address->rgbea.meta_addr.low_part);
+               }
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH_C,
+                               address->rgbea.alpha_addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_C, 0,
+                               PRIMARY_SURFACE_ADDRESS_C,
+                               address->rgbea.alpha_addr.low_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, 0,
+                               PRIMARY_SURFACE_ADDRESS_HIGH,
+                               address->rgbea.addr.high_part);
+
+               REG_SET(DCSURF_PRIMARY_SURFACE_ADDRESS, 0,
+                               PRIMARY_SURFACE_ADDRESS,
+                               address->rgbea.addr.low_part);
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       hubp->request_address = *address;
+
+       return true;
+}
+
+void hubp3_program_tiling(
+       struct dcn20_hubp *hubp2,
+       const union dc_tiling_info *info,
+       const enum surface_pixel_format pixel_format)
+{
+       REG_UPDATE_4(DCSURF_ADDR_CONFIG,
+               NUM_PIPES, log_2(info->gfx9.num_pipes),
+               PIPE_INTERLEAVE, info->gfx9.pipe_interleave,
+               MAX_COMPRESSED_FRAGS, log_2(info->gfx9.max_compressed_frags),
+               NUM_PKRS, log_2(info->gfx9.num_pkrs));
+
+       REG_UPDATE_3(DCSURF_TILING_CONFIG,
+                       SW_MODE, info->gfx9.swizzle,
+                       META_LINEAR, info->gfx9.meta_linear,
+                       PIPE_ALIGNED, info->gfx9.pipe_aligned);
+
+}
+
+void hubp3_dcc_control(struct hubp *hubp, bool enable,
+               enum hubp_ind_block_size blk_size)
+{
+       uint32_t dcc_en = enable ? 1 : 0;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE_4(DCSURF_SURFACE_CONTROL,
+                       PRIMARY_SURFACE_DCC_EN, dcc_en,
+                       PRIMARY_SURFACE_DCC_IND_BLK, blk_size,
+                       SECONDARY_SURFACE_DCC_EN, dcc_en,
+                       SECONDARY_SURFACE_DCC_IND_BLK, blk_size);
+}
+
+void hubp3_dcc_control_sienna_cichlid(struct hubp *hubp,
+               struct dc_plane_dcc_param *dcc)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE_6(DCSURF_SURFACE_CONTROL,
+               PRIMARY_SURFACE_DCC_EN, dcc->enable,
+               PRIMARY_SURFACE_DCC_IND_BLK, dcc->dcc_ind_blk,
+               PRIMARY_SURFACE_DCC_IND_BLK_C, dcc->dcc_ind_blk_c,
+               SECONDARY_SURFACE_DCC_EN, dcc->enable,
+               SECONDARY_SURFACE_DCC_IND_BLK, dcc->dcc_ind_blk,
+               SECONDARY_SURFACE_DCC_IND_BLK_C, dcc->dcc_ind_blk_c);
+}
+
+void hubp3_dmdata_set_attributes(
+               struct hubp *hubp,
+               const struct dc_dmdata_attributes *attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       /*always HW mode */
+       REG_UPDATE(DMDATA_CNTL,
+                       DMDATA_MODE, 1);
+
+       /* for DMDATA flip, need to use SURFACE_UPDATE_LOCK */
+       REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 1);
+
+       /* toggle DMDATA_UPDATED and set repeat and size */
+       REG_UPDATE(DMDATA_CNTL,
+                       DMDATA_UPDATED, 0);
+       REG_UPDATE_3(DMDATA_CNTL,
+                       DMDATA_UPDATED, 1,
+                       DMDATA_REPEAT, attr->dmdata_repeat,
+                       DMDATA_SIZE, attr->dmdata_size);
+
+       /* set DMDATA address */
+       REG_WRITE(DMDATA_ADDRESS_LOW, attr->address.low_part);
+       REG_UPDATE(DMDATA_ADDRESS_HIGH,
+                       DMDATA_ADDRESS_HIGH, attr->address.high_part);
+
+       REG_UPDATE(DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, 0);
+
+}
+
+
+void hubp3_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       hubp3_dcc_control_sienna_cichlid(hubp, dcc);
+       hubp3_program_tiling(hubp2, tiling_info, format);
+       hubp2_program_size(hubp, format, plane_size, dcc);
+       hubp2_program_rotation(hubp, rotation, horizontal_mirror);
+       hubp2_program_pixel_format(hubp, format);
+}
+
+static void hubp3_program_deadline(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       hubp2_program_deadline(hubp, dlg_attr, ttu_attr);
+       REG_UPDATE(DCN_DMDATA_VM_CNTL,
+                       REFCYC_PER_VM_DMDATA, dlg_attr->refcyc_per_vm_dmdata);
+}
+
+void hubp3_read_state(struct hubp *hubp)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       struct dcn_hubp_state *s = &hubp2->state;
+       struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
+
+       hubp2_read_state_common(hubp);
+
+       REG_GET_7(DCHUBP_REQ_SIZE_CONFIG,
+               CHUNK_SIZE, &rq_regs->rq_regs_l.chunk_size,
+               MIN_CHUNK_SIZE, &rq_regs->rq_regs_l.min_chunk_size,
+               META_CHUNK_SIZE, &rq_regs->rq_regs_l.meta_chunk_size,
+               MIN_META_CHUNK_SIZE, &rq_regs->rq_regs_l.min_meta_chunk_size,
+               DPTE_GROUP_SIZE, &rq_regs->rq_regs_l.dpte_group_size,
+               SWATH_HEIGHT, &rq_regs->rq_regs_l.swath_height,
+               PTE_ROW_HEIGHT_LINEAR, &rq_regs->rq_regs_l.pte_row_height_linear);
+
+       REG_GET_7(DCHUBP_REQ_SIZE_CONFIG_C,
+               CHUNK_SIZE_C, &rq_regs->rq_regs_c.chunk_size,
+               MIN_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_chunk_size,
+               META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.meta_chunk_size,
+               MIN_META_CHUNK_SIZE_C, &rq_regs->rq_regs_c.min_meta_chunk_size,
+               DPTE_GROUP_SIZE_C, &rq_regs->rq_regs_c.dpte_group_size,
+               SWATH_HEIGHT_C, &rq_regs->rq_regs_c.swath_height,
+               PTE_ROW_HEIGHT_LINEAR_C, &rq_regs->rq_regs_c.pte_row_height_linear);
+
+       if (REG(UCLK_PSTATE_FORCE))
+               s->uclk_pstate_force = REG_READ(UCLK_PSTATE_FORCE);
+
+       if (REG(DCHUBP_CNTL))
+               s->hubp_cntl = REG_READ(DCHUBP_CNTL);
+
+       if (REG(DCSURF_FLIP_CONTROL))
+               s->flip_control = REG_READ(DCSURF_FLIP_CONTROL);
+
+}
+
+void hubp3_setup(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest)
+{
+       /* otg is locked when this func is called. Register are double buffered.
+        * disable the requestors is not needed
+        */
+       hubp2_vready_at_or_After_vsync(hubp, pipe_dest);
+       hubp21_program_requestor(hubp, rq_regs);
+       hubp3_program_deadline(hubp, dlg_attr, ttu_attr);
+}
+
+void hubp3_init(struct hubp *hubp)
+{
+       // DEDCN21-133: Inconsistent row starting line for flip between DPTE and Meta
+       // This is a chicken bit to enable the ECO fix.
+
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       //hubp[i].HUBPREQ_DEBUG.HUBPREQ_DEBUG[26] = 1;
+       REG_WRITE(HUBPREQ_DEBUG, 1 << 26);
+}
+
+static struct hubp_funcs dcn30_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp3_program_surface_config,
+       .hubp_is_flip_pending = hubp2_is_flip_pending,
+       .hubp_setup = hubp3_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
+       .set_blank = hubp2_set_blank,
+       .set_blank_regs = hubp2_set_blank_regs,
+       .dcc_control = hubp3_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .set_cursor_attributes  = hubp2_cursor_set_attributes,
+       .set_cursor_position    = hubp2_cursor_set_position,
+       .hubp_clk_cntl = hubp2_clk_cntl,
+       .hubp_vtg_sel = hubp2_vtg_sel,
+       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp3_read_state,
+       .hubp_clear_underflow = hubp2_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp3_init,
+       .hubp_in_blank = hubp1_in_blank,
+       .hubp_soft_reset = hubp1_soft_reset,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+};
+
+bool hubp3_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask)
+{
+       hubp2->base.funcs = &dcn30_hubp_funcs;
+       hubp2->base.ctx = ctx;
+       hubp2->hubp_regs = hubp_regs;
+       hubp2->hubp_shift = hubp_shift;
+       hubp2->hubp_mask = hubp_mask;
+       hubp2->base.inst = inst;
+       hubp2->base.opp_id = OPP_ID_INVALID;
+       hubp2->base.mpcc_id = 0xf;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn30/dcn30_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn30/dcn30_hubp.h
new file mode 100644 (file)
index 0000000..b010531
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright 2020 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_HUBP_DCN30_H__
+#define __DC_HUBP_DCN30_H__
+
+#include "dcn20/dcn20_hubp.h"
+#include "dcn21/dcn21_hubp.h"
+
+#define HUBP_REG_LIST_DCN30(id)\
+       HUBP_REG_LIST_DCN21(id),\
+       SRI(DCN_DMDATA_VM_CNTL, HUBPREQ, id)
+
+
+#define HUBP_MASK_SH_LIST_DCN30_BASE(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN21_COMMON(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ALPHA_PLANE_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, REFCYC_PER_VM_DMDATA, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS_CLEAR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_LATE_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS_CLEAR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_DONE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PKRS, mask_sh)
+
+
+#define HUBP_MASK_SH_LIST_DCN30(mask_sh)\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, REFCYC_PER_VM_DMDATA, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS_CLEAR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_LATE_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS_CLEAR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_DONE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_IN_BLANK, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PKRS, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_WIDTH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_X_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_Y_START_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, SECONDARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_C, SECONDARY_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, SECONDARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, SECONDARY_META_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_Y_G, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_ALPHA, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, PACK_3TO2_ELEMENT_DISABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, ROW_TTU_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
+       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh),\
+       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ALPHA_PLANE_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_3, REFCYC_PER_VM_GROUP_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_4, REFCYC_PER_VM_REQ_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_5, REFCYC_PER_PTE_GROUP_FLIP_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_6, REFCYC_PER_META_CHUNK_FLIP_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_5, REFCYC_PER_VM_GROUP_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_6, REFCYC_PER_VM_REQ_VBLANK, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, VM_GROUP_SIZE, mask_sh)
+
+bool hubp3_construct(
+               struct dcn20_hubp *hubp2,
+               struct dc_context *ctx,
+               uint32_t inst,
+               const struct dcn_hubp2_registers *hubp_regs,
+               const struct dcn_hubp2_shift *hubp_shift,
+               const struct dcn_hubp2_mask *hubp_mask);
+
+void hubp3_set_vm_system_aperture_settings(struct hubp *hubp,
+       struct vm_system_aperture_param *apt);
+
+bool hubp3_program_surface_flip_and_addr(
+       struct hubp *hubp,
+       const struct dc_plane_address *address,
+       bool flip_immediate);
+
+void hubp3_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level);
+
+void hubp3_setup(
+               struct hubp *hubp,
+               struct _vcs_dpi_display_dlg_regs_st *dlg_attr,
+               struct _vcs_dpi_display_ttu_regs_st *ttu_attr,
+               struct _vcs_dpi_display_rq_regs_st *rq_regs,
+               struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
+
+void hubp3_program_tiling(
+               struct dcn20_hubp *hubp2,
+               const union dc_tiling_info *info,
+               const enum surface_pixel_format pixel_format);
+
+void hubp3_dcc_control(struct hubp *hubp, bool enable,
+               enum hubp_ind_block_size blk_size);
+
+void hubp3_dcc_control_sienna_cichlid(struct hubp *hubp,
+               struct dc_plane_dcc_param *dcc);
+
+void hubp3_dmdata_set_attributes(
+               struct hubp *hubp,
+               const struct dc_dmdata_attributes *attr);
+
+void hubp3_read_state(struct hubp *hubp);
+
+void hubp3_init(struct hubp *hubp);
+
+#endif /* __DC_HUBP_DCN30_H__ */
+
+
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn31/dcn31_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn31/dcn31_hubp.c
new file mode 100644 (file)
index 0000000..8394e8c
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2012-20 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#include "dm_services.h"
+#include "dce_calcs.h"
+#include "reg_helper.h"
+#include "basics/conversion.h"
+#include "dcn31_hubp.h"
+
+#define REG(reg)\
+       hubp2->hubp_regs->reg
+
+#define CTX \
+       hubp2->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
+
+void hubp31_set_unbounded_requesting(struct hubp *hubp, bool enable)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_UNBOUNDED_REQ_MODE, enable);
+       REG_UPDATE(CURSOR_CONTROL, CURSOR_REQ_MODE, enable);
+}
+
+void hubp31_soft_reset(struct hubp *hubp, bool reset)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(DCHUBP_CNTL, HUBP_SOFT_RESET, reset);
+}
+
+static void hubp31_program_extended_blank(struct hubp *hubp,
+                                         unsigned int min_dst_y_next_start_optimized)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, min_dst_y_next_start_optimized);
+}
+
+void hubp31_program_extended_blank_value(
+       struct hubp *hubp, unsigned int min_dst_y_next_start_optimized)
+{
+       hubp31_program_extended_blank(hubp, min_dst_y_next_start_optimized);
+}
+
+static struct hubp_funcs dcn31_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp3_program_surface_config,
+       .hubp_is_flip_pending = hubp2_is_flip_pending,
+       .hubp_setup = hubp3_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
+       .set_blank = hubp2_set_blank,
+       .dcc_control = hubp3_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .set_cursor_attributes  = hubp2_cursor_set_attributes,
+       .set_cursor_position    = hubp2_cursor_set_position,
+       .hubp_clk_cntl = hubp2_clk_cntl,
+       .hubp_vtg_sel = hubp2_vtg_sel,
+       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp3_read_state,
+       .hubp_clear_underflow = hubp2_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp3_init,
+       .set_unbounded_requesting = hubp31_set_unbounded_requesting,
+       .hubp_soft_reset = hubp31_soft_reset,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+       .hubp_in_blank = hubp1_in_blank,
+       .program_extended_blank = hubp31_program_extended_blank,
+};
+
+bool hubp31_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask)
+{
+       hubp2->base.funcs = &dcn31_hubp_funcs;
+       hubp2->base.ctx = ctx;
+       hubp2->hubp_regs = hubp_regs;
+       hubp2->hubp_shift = hubp_shift;
+       hubp2->hubp_mask = hubp_mask;
+       hubp2->base.inst = inst;
+       hubp2->base.opp_id = OPP_ID_INVALID;
+       hubp2->base.mpcc_id = 0xf;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn31/dcn31_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn31/dcn31_hubp.h
new file mode 100644 (file)
index 0000000..d688db7
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2012-20 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_HUBP_DCN31_H__
+#define __DC_HUBP_DCN31_H__
+
+#include "dcn20/dcn20_hubp.h"
+#include "dcn21/dcn21_hubp.h"
+#include "dcn30/dcn30_hubp.h"
+
+#define HUBP_MASK_SH_LIST_DCN31(mask_sh)\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, REFCYC_PER_VM_DMDATA, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_FAULT_STATUS_CLEAR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_LATE_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_UNDERFLOW_STATUS_CLEAR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_DMDATA_VM_CNTL, DMDATA_VM_DONE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_STATUS, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNDERFLOW_CLEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_NO_OUTSTANDING_REQ, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VTG_SEL, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_UNBOUNDED_REQ_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_IN_BLANK, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_SOFT_RESET, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PKRS, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_MODE_FOR_STEREOSYNC, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_IN_STEREOSYNC, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_LOCK, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_WIDTH, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION, PRI_VIEWPORT_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_X_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START, PRI_VIEWPORT_Y_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_WIDTH, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION, SEC_VIEWPORT_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_X_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START, SEC_VIEWPORT_Y_START, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_WIDTH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_DIMENSION_C, PRI_VIEWPORT_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_X_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_PRI_VIEWPORT_START_C, PRI_VIEWPORT_Y_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_WIDTH_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_DIMENSION_C, SEC_VIEWPORT_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_X_START_C, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SEC_VIEWPORT_START_C, SEC_VIEWPORT_Y_START_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH_C, SECONDARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_C, SECONDARY_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH_C, SECONDARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_C, SECONDARY_META_SURFACE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE, SURFACE_INUSE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH, SURFACE_INUSE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_C, SURFACE_INUSE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_INUSE_HIGH_C, SURFACE_INUSE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE, SURFACE_EARLIEST_INUSE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_C, SURFACE_EARLIEST_INUSE_ADDRESS_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_EARLIEST_INUSE_HIGH_C, SURFACE_EARLIEST_INUSE_ADDRESS_HIGH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_META_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_META_SURFACE_TMZ_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, SECONDARY_SURFACE_DCC_IND_BLK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_Y_G, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_ALPHA, mask_sh),\
+       HUBP_SF(HUBPRET0_HUBPRET_CONTROL, PACK_3TO2_ELEMENT_DISABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\
+       HUBP_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\
+       HUBP_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, ROW_TTU_MODE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
+       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_CLOCK_ENABLE, mask_sh),\
+       HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\
+       HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ALPHA_PLANE_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, DST_Y_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS, VRATIO_PREFETCH, mask_sh),\
+       HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
+       HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_REQ_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
+       HUBP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_ADDRESS_HIGH, DMDATA_ADDRESS_HIGH, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_CNTL, DMDATA_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_UPDATED, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_REPEAT, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_SW_CNTL, DMDATA_SW_SIZE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_MODE, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_QOS_LEVEL, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_QOS_CNTL, DMDATA_DL_DELTA, mask_sh), \
+       HUBP_SF(CURSOR0_0_DMDATA_STATUS, DMDATA_DONE, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_VM_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_0, DST_Y_PER_ROW_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_1, REFCYC_PER_PTE_GROUP_FLIP_L, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_2, REFCYC_PER_META_CHUNK_FLIP_L, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_VREADY_AT_OR_AFTER_VSYNC, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_CNTL, HUBP_DISABLE_STOP_DATA_DURING_VM, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, HUBPREQ_MASTER_UPDATE_LOCK_STATUS, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL2, SURFACE_TRIPLE_BUFFER_ENABLE, mask_sh),\
+       HUBP_SF(HUBPREQ0_VMID_SETTINGS_0, VMID, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_3, REFCYC_PER_VM_GROUP_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_4, REFCYC_PER_VM_REQ_FLIP, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_5, REFCYC_PER_PTE_GROUP_FLIP_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_FLIP_PARAMETERS_6, REFCYC_PER_META_CHUNK_FLIP_C, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_5, REFCYC_PER_VM_GROUP_VBLANK, mask_sh),\
+       HUBP_SF(HUBPREQ0_VBLANK_PARAMETERS_6, REFCYC_PER_VM_REQ_VBLANK, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, VM_GROUP_SIZE, mask_sh)
+
+
+bool hubp31_construct(
+               struct dcn20_hubp *hubp2,
+               struct dc_context *ctx,
+               uint32_t inst,
+               const struct dcn_hubp2_registers *hubp_regs,
+               const struct dcn_hubp2_shift *hubp_shift,
+               const struct dcn_hubp2_mask *hubp_mask);
+
+void hubp31_soft_reset(struct hubp *hubp, bool reset);
+
+void hubp31_set_unbounded_requesting(struct hubp *hubp, bool enable);
+
+void hubp31_program_extended_blank_value(
+       struct hubp *hubp, unsigned int min_dst_y_next_start_optimized);
+
+#endif /* __DC_HUBP_DCN31_H__ */
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn32/dcn32_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn32/dcn32_hubp.c
new file mode 100644 (file)
index 0000000..ca5b4b2
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2012-20 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#include "dm_services.h"
+#include "dce_calcs.h"
+#include "reg_helper.h"
+#include "basics/conversion.h"
+#include "dcn32_hubp.h"
+
+#define REG(reg)\
+       hubp2->hubp_regs->reg
+
+#define CTX \
+       hubp2->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name) \
+       hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
+
+void hubp32_update_force_pstate_disallow(struct hubp *hubp, bool pstate_disallow)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       REG_UPDATE_2(UCLK_PSTATE_FORCE,
+                       DATA_UCLK_PSTATE_FORCE_EN, pstate_disallow,
+                       DATA_UCLK_PSTATE_FORCE_VALUE, 0);
+}
+
+void hubp32_update_force_cursor_pstate_disallow(struct hubp *hubp, bool pstate_disallow)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE_2(UCLK_PSTATE_FORCE,
+                       CURSOR_UCLK_PSTATE_FORCE_EN, pstate_disallow,
+                       CURSOR_UCLK_PSTATE_FORCE_VALUE, 0);
+}
+
+void hubp32_update_mall_sel(struct hubp *hubp, uint32_t mall_sel, bool c_cursor)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       // Also cache cursor in MALL if using MALL for SS
+       REG_UPDATE_2(DCHUBP_MALL_CONFIG, USE_MALL_SEL, mall_sel,
+                       USE_MALL_FOR_CURSOR, c_cursor);
+}
+
+void hubp32_prepare_subvp_buffering(struct hubp *hubp, bool enable)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       REG_UPDATE(DCHUBP_VMPG_CONFIG, FORCE_ONE_ROW_FOR_FRAME, enable);
+
+       /* Programming guide suggests CURSOR_REQ_MODE = 1 for SubVP:
+        * For Pstate change using the MALL with sub-viewport buffering,
+        * the cursor does not use the MALL (USE_MALL_FOR_CURSOR is ignored)
+        * and sub-viewport positioning by Display FW has to avoid the cursor
+        * requests to DRAM (set CURSOR_REQ_MODE = 1 to minimize this exclusion).
+        *
+        * CURSOR_REQ_MODE = 1 begins fetching cursor data at the beginning of display prefetch.
+        * Setting this should allow the sub-viewport position to always avoid the cursor because
+        * we do not allow the sub-viewport region to overlap with display prefetch (i.e. during blank).
+        */
+       REG_UPDATE(CURSOR_CONTROL, CURSOR_REQ_MODE, enable);
+}
+
+void hubp32_phantom_hubp_post_enable(struct hubp *hubp)
+{
+       uint32_t reg_val;
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       /* For phantom pipe enable, disable GSL */
+       REG_UPDATE(DCSURF_FLIP_CONTROL2, SURFACE_GSL_ENABLE, 0);
+       REG_UPDATE(DCHUBP_CNTL, HUBP_BLANK_EN, 1);
+       reg_val = REG_READ(DCHUBP_CNTL);
+       if (reg_val) {
+               /* init sequence workaround: in case HUBP is
+                * power gated, this wait would timeout.
+                *
+                * we just wrote reg_val to non-0, if it stay 0
+                * it means HUBP is gated
+                */
+               REG_WAIT(DCHUBP_CNTL,
+                               HUBP_NO_OUTSTANDING_REQ, 1,
+                               1, 200);
+       }
+}
+
+void hubp32_cursor_set_attributes(
+               struct hubp *hubp,
+               const struct dc_cursor_attributes *attr)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       enum cursor_pitch hw_pitch = hubp1_get_cursor_pitch(attr->pitch);
+       enum cursor_lines_per_chunk lpc = hubp2_get_lines_per_chunk(
+                       attr->width, attr->color_format);
+
+       //Round cursor width up to next multiple of 64
+       uint32_t cursor_width = ((attr->width + 63) / 64) * 64;
+       uint32_t cursor_height = attr->height;
+       uint32_t cursor_size = cursor_width * cursor_height;
+
+       hubp->curs_attr = *attr;
+
+       REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
+                       CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
+       REG_UPDATE(CURSOR_SURFACE_ADDRESS,
+                       CURSOR_SURFACE_ADDRESS, attr->address.low_part);
+
+       REG_UPDATE_2(CURSOR_SIZE,
+                       CURSOR_WIDTH, attr->width,
+                       CURSOR_HEIGHT, attr->height);
+
+       REG_UPDATE_4(CURSOR_CONTROL,
+                       CURSOR_MODE, attr->color_format,
+                       CURSOR_2X_MAGNIFY, attr->attribute_flags.bits.ENABLE_MAGNIFICATION,
+                       CURSOR_PITCH, hw_pitch,
+                       CURSOR_LINES_PER_CHUNK, lpc);
+
+       REG_SET_2(CURSOR_SETTINGS, 0,
+                       /* no shift of the cursor HDL schedule */
+                       CURSOR0_DST_Y_OFFSET, 0,
+                        /* used to shift the cursor chunk request deadline */
+                       CURSOR0_CHUNK_HDL_ADJUST, 3);
+
+       switch (attr->color_format) {
+       case CURSOR_MODE_MONO:
+               cursor_size /= 2;
+               break;
+       case CURSOR_MODE_COLOR_1BIT_AND:
+       case CURSOR_MODE_COLOR_PRE_MULTIPLIED_ALPHA:
+       case CURSOR_MODE_COLOR_UN_PRE_MULTIPLIED_ALPHA:
+               cursor_size *= 4;
+               break;
+
+       case CURSOR_MODE_COLOR_64BIT_FP_PRE_MULTIPLIED:
+       case CURSOR_MODE_COLOR_64BIT_FP_UN_PRE_MULTIPLIED:
+       default:
+               cursor_size *= 8;
+               break;
+       }
+
+       if (cursor_size > 16384)
+               REG_UPDATE(DCHUBP_MALL_CONFIG, USE_MALL_FOR_CURSOR, true);
+       else
+               REG_UPDATE(DCHUBP_MALL_CONFIG, USE_MALL_FOR_CURSOR, false);
+}
+void hubp32_init(struct hubp *hubp)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       REG_WRITE(HUBPREQ_DEBUG_DB, 1 << 8);
+}
+static struct hubp_funcs dcn32_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp3_program_surface_config,
+       .hubp_is_flip_pending = hubp2_is_flip_pending,
+       .hubp_setup = hubp3_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
+       .set_blank = hubp2_set_blank,
+       .set_blank_regs = hubp2_set_blank_regs,
+       .dcc_control = hubp3_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .set_cursor_attributes  = hubp32_cursor_set_attributes,
+       .set_cursor_position    = hubp2_cursor_set_position,
+       .hubp_clk_cntl = hubp2_clk_cntl,
+       .hubp_vtg_sel = hubp2_vtg_sel,
+       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp3_read_state,
+       .hubp_clear_underflow = hubp2_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp3_init,
+       .set_unbounded_requesting = hubp31_set_unbounded_requesting,
+       .hubp_soft_reset = hubp31_soft_reset,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+       .hubp_in_blank = hubp1_in_blank,
+       .hubp_update_force_pstate_disallow = hubp32_update_force_pstate_disallow,
+       .hubp_update_force_cursor_pstate_disallow = hubp32_update_force_cursor_pstate_disallow,
+       .phantom_hubp_post_enable = hubp32_phantom_hubp_post_enable,
+       .hubp_update_mall_sel = hubp32_update_mall_sel,
+       .hubp_prepare_subvp_buffering = hubp32_prepare_subvp_buffering
+};
+
+bool hubp32_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask)
+{
+       hubp2->base.funcs = &dcn32_hubp_funcs;
+       hubp2->base.ctx = ctx;
+       hubp2->hubp_regs = hubp_regs;
+       hubp2->hubp_shift = hubp_shift;
+       hubp2->hubp_mask = hubp_mask;
+       hubp2->base.inst = inst;
+       hubp2->base.opp_id = OPP_ID_INVALID;
+       hubp2->base.mpcc_id = 0xf;
+
+       return true;
+}
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn32/dcn32_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn32/dcn32_hubp.h
new file mode 100644 (file)
index 0000000..d2acbc1
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2012-20 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_HUBP_DCN32_H__
+#define __DC_HUBP_DCN32_H__
+
+#include "dcn20/dcn20_hubp.h"
+#include "dcn21/dcn21_hubp.h"
+#include "dcn30/dcn30_hubp.h"
+#include "dcn31/dcn31_hubp.h"
+
+#define HUBP_MASK_SH_LIST_DCN32(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN31(mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_MALL_CONFIG, USE_MALL_SEL, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_MALL_CONFIG, USE_MALL_FOR_CURSOR, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, VMPG_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, PTE_BUFFER_MODE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, BIGK_FRAGMENT_SIZE, mask_sh),\
+       HUBP_SF(HUBP0_DCHUBP_VMPG_CONFIG, FORCE_ONE_ROW_FOR_FRAME, mask_sh),\
+       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, DATA_UCLK_PSTATE_FORCE_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, DATA_UCLK_PSTATE_FORCE_VALUE, mask_sh),\
+       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, CURSOR_UCLK_PSTATE_FORCE_EN, mask_sh),\
+       HUBP_SF(HUBPREQ0_UCLK_PSTATE_FORCE, CURSOR_UCLK_PSTATE_FORCE_VALUE, mask_sh)
+
+void hubp32_update_force_pstate_disallow(struct hubp *hubp, bool pstate_disallow);
+
+void hubp32_update_force_cursor_pstate_disallow(struct hubp *hubp, bool pstate_disallow);
+
+void hubp32_update_mall_sel(struct hubp *hubp, uint32_t mall_sel, bool c_cursor);
+
+void hubp32_prepare_subvp_buffering(struct hubp *hubp, bool enable);
+
+void hubp32_phantom_hubp_post_enable(struct hubp *hubp);
+
+void hubp32_cursor_set_attributes(struct hubp *hubp,
+               const struct dc_cursor_attributes *attr);
+
+void hubp32_init(struct hubp *hubp);
+
+bool hubp32_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn_hubp2_shift *hubp_shift,
+       const struct dcn_hubp2_mask *hubp_mask);
+
+#endif /* __DC_HUBP_DCN32_H__ */
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn35/dcn35_hubp.c b/drivers/gpu/drm/amd/display/dc/hubp/dcn35/dcn35_hubp.c
new file mode 100644 (file)
index 0000000..771fcd0
--- /dev/null
@@ -0,0 +1,241 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright 2023 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#include "dcn35_hubp.h"
+#include "reg_helper.h"
+
+#define REG(reg)\
+       hubp2->hubp_regs->reg
+
+#define CTX \
+       hubp2->base.ctx
+
+#undef FN
+#define FN(reg_name, field_name)                                           \
+       ((const struct dcn35_hubp2_shift *)hubp2->hubp_shift)->field_name, \
+               ((const struct dcn35_hubp2_mask *)hubp2->hubp_mask)->field_name
+
+void hubp35_set_fgcg(struct hubp *hubp, bool enable)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       REG_UPDATE(HUBP_CLK_CNTL, HUBP_FGCG_REP_DIS, !enable);
+}
+
+static void hubp35_init(struct hubp *hubp)
+{
+       hubp3_init(hubp);
+
+       hubp35_set_fgcg(hubp, hubp->ctx->dc->debug.enable_fine_grain_clock_gating.bits.dchub);
+
+       /*do nothing for now for dcn3.5 or later*/
+}
+
+void hubp35_program_pixel_format(
+       struct hubp *hubp,
+       enum surface_pixel_format format)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+       uint32_t green_bar = 1;
+       uint32_t red_bar = 3;
+       uint32_t blue_bar = 2;
+
+       /* swap for ABGR format */
+       if (format == SURFACE_PIXEL_FORMAT_GRPH_ABGR8888
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616
+                       || format == SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F) {
+               red_bar = 2;
+               blue_bar = 3;
+       }
+
+       REG_UPDATE_3(HUBPRET_CONTROL,
+                       CROSSBAR_SRC_Y_G, green_bar,
+                       CROSSBAR_SRC_CB_B, blue_bar,
+                       CROSSBAR_SRC_CR_R, red_bar);
+
+       /* Mapping is same as ipp programming (cnvc) */
+
+       switch (format) {
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB1555:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 1);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB565:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 3);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB8888:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR8888:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 8);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB2101010:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR2101010_XR_BIAS:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 10);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616: /* we use crossbar already */
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 26); /* ARGB16161616_UNORM */
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616F:
+       case SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616F:/*we use crossbar already*/
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 24);
+               break;
+
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCbCr:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 65);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_YCrCb:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 64);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCbCr:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 67);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_420_10bpc_YCrCb:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 66);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_AYCrCb8888:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 12);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FIX:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 112);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FIX:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 113);
+               break;
+       case SURFACE_PIXEL_FORMAT_VIDEO_ACrYCb2101010:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 114);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGB111110_FLOAT:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 118);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_BGR101111_FLOAT:
+               REG_UPDATE(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 119);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGBE:
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 116,
+                               ALPHA_PLANE_EN, 0);
+               break;
+       case SURFACE_PIXEL_FORMAT_GRPH_RGBE_ALPHA:
+               REG_UPDATE_2(DCSURF_SURFACE_CONFIG,
+                               SURFACE_PIXEL_FORMAT, 116,
+                               ALPHA_PLANE_EN, 1);
+               break;
+       default:
+               BREAK_TO_DEBUGGER();
+               break;
+       }
+
+       /* don't see the need of program the xbar in DCN 1.0 */
+}
+
+void hubp35_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level)
+{
+       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
+
+       hubp3_dcc_control_sienna_cichlid(hubp, dcc);
+       hubp3_program_tiling(hubp2, tiling_info, format);
+       hubp2_program_size(hubp, format, plane_size, dcc);
+       hubp2_program_rotation(hubp, rotation, horizontal_mirror);
+       hubp35_program_pixel_format(hubp, format);
+}
+
+struct hubp_funcs dcn35_hubp_funcs = {
+       .hubp_enable_tripleBuffer = hubp2_enable_triplebuffer,
+       .hubp_is_triplebuffer_enabled = hubp2_is_triplebuffer_enabled,
+       .hubp_program_surface_flip_and_addr = hubp3_program_surface_flip_and_addr,
+       .hubp_program_surface_config = hubp35_program_surface_config,
+       .hubp_is_flip_pending = hubp2_is_flip_pending,
+       .hubp_setup = hubp3_setup,
+       .hubp_setup_interdependent = hubp2_setup_interdependent,
+       .hubp_set_vm_system_aperture_settings = hubp3_set_vm_system_aperture_settings,
+       .set_blank = hubp2_set_blank,
+       .dcc_control = hubp3_dcc_control,
+       .mem_program_viewport = min_set_viewport,
+       .set_cursor_attributes  = hubp2_cursor_set_attributes,
+       .set_cursor_position    = hubp2_cursor_set_position,
+       .hubp_clk_cntl = hubp2_clk_cntl,
+       .hubp_vtg_sel = hubp2_vtg_sel,
+       .dmdata_set_attributes = hubp3_dmdata_set_attributes,
+       .dmdata_load = hubp2_dmdata_load,
+       .dmdata_status_done = hubp2_dmdata_status_done,
+       .hubp_read_state = hubp3_read_state,
+       .hubp_clear_underflow = hubp2_clear_underflow,
+       .hubp_set_flip_control_surface_gsl = hubp2_set_flip_control_surface_gsl,
+       .hubp_init = hubp35_init,
+       .set_unbounded_requesting = hubp31_set_unbounded_requesting,
+       .hubp_soft_reset = hubp31_soft_reset,
+       .hubp_set_flip_int = hubp1_set_flip_int,
+       .hubp_in_blank = hubp1_in_blank,
+       .program_extended_blank = hubp31_program_extended_blank_value,
+};
+
+bool hubp35_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn35_hubp2_shift *hubp_shift,
+       const struct dcn35_hubp2_mask *hubp_mask)
+{
+       hubp2->base.funcs = &dcn35_hubp_funcs;
+       hubp2->base.ctx = ctx;
+       hubp2->hubp_regs = hubp_regs;
+       hubp2->hubp_shift = (const struct dcn_hubp2_shift *)hubp_shift;
+       hubp2->hubp_mask = (const struct dcn_hubp2_mask *)hubp_mask;
+       hubp2->base.inst = inst;
+       hubp2->base.opp_id = OPP_ID_INVALID;
+       hubp2->base.mpcc_id = 0xf;
+
+       return true;
+}
+
+
diff --git a/drivers/gpu/drm/amd/display/dc/hubp/dcn35/dcn35_hubp.h b/drivers/gpu/drm/amd/display/dc/hubp/dcn35/dcn35_hubp.h
new file mode 100644 (file)
index 0000000..586b43a
--- /dev/null
@@ -0,0 +1,75 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright 2023 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DC_HUBP_DCN35_H__
+#define __DC_HUBP_DCN35_H__
+
+#include "dcn31/dcn31_hubp.h"
+#include "dcn32/dcn32_hubp.h"
+#define HUBP_MASK_SH_LIST_DCN35(mask_sh)\
+       HUBP_MASK_SH_LIST_DCN32(mask_sh),\
+       HUBP_SF(HUBP0_HUBP_CLK_CNTL, HUBP_FGCG_REP_DIS, mask_sh)
+
+#define DCN35_HUBP_REG_FIELD_VARIABLE_LIST(type)          \
+       struct {                                          \
+               DCN32_HUBP_REG_FIELD_VARIABLE_LIST(type); \
+               type HUBP_FGCG_REP_DIS;                   \
+       }
+
+struct dcn35_hubp2_shift {
+       DCN35_HUBP_REG_FIELD_VARIABLE_LIST(uint8_t);
+};
+
+struct dcn35_hubp2_mask {
+       DCN35_HUBP_REG_FIELD_VARIABLE_LIST(uint32_t);
+};
+
+
+bool hubp35_construct(
+       struct dcn20_hubp *hubp2,
+       struct dc_context *ctx,
+       uint32_t inst,
+       const struct dcn_hubp2_registers *hubp_regs,
+       const struct dcn35_hubp2_shift *hubp_shift,
+       const struct dcn35_hubp2_mask *hubp_mask);
+
+void hubp35_set_fgcg(struct hubp *hubp, bool enable);
+
+void hubp35_program_pixel_format(
+       struct hubp *hubp,
+       enum surface_pixel_format format);
+
+void hubp35_program_surface_config(
+       struct hubp *hubp,
+       enum surface_pixel_format format,
+       union dc_tiling_info *tiling_info,
+       struct plane_size *plane_size,
+       enum dc_rotation_angle rotation,
+       struct dc_plane_dcc_param *dcc,
+       bool horizontal_mirror,
+       unsigned int compat_level);
+
+#endif /* __DC_HUBP_DCN35_H__ */