0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #ifndef __DCE_MEM_INPUT_H__
0026 #define __DCE_MEM_INPUT_H__
0027
0028 #include "dc_hw_types.h"
0029 #include "mem_input.h"
0030
0031 #define TO_DCE_MEM_INPUT(mem_input)\
0032 container_of(mem_input, struct dce_mem_input, base)
0033
0034 #define MI_DCE_BASE_REG_LIST(id)\
0035 SRI(GRPH_ENABLE, DCP, id),\
0036 SRI(GRPH_CONTROL, DCP, id),\
0037 SRI(GRPH_X_START, DCP, id),\
0038 SRI(GRPH_Y_START, DCP, id),\
0039 SRI(GRPH_X_END, DCP, id),\
0040 SRI(GRPH_Y_END, DCP, id),\
0041 SRI(GRPH_PITCH, DCP, id),\
0042 SRI(HW_ROTATION, DCP, id),\
0043 SRI(GRPH_SWAP_CNTL, DCP, id),\
0044 SRI(PRESCALE_GRPH_CONTROL, DCP, id),\
0045 SRI(GRPH_UPDATE, DCP, id),\
0046 SRI(GRPH_FLIP_CONTROL, DCP, id),\
0047 SRI(GRPH_PRIMARY_SURFACE_ADDRESS, DCP, id),\
0048 SRI(GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, DCP, id),\
0049 SRI(GRPH_SECONDARY_SURFACE_ADDRESS, DCP, id),\
0050 SRI(GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, DCP, id),\
0051 SRI(DPG_PIPE_ARBITRATION_CONTROL1, DMIF_PG, id),\
0052 SRI(DPG_WATERMARK_MASK_CONTROL, DMIF_PG, id),\
0053 SRI(DPG_PIPE_URGENCY_CONTROL, DMIF_PG, id),\
0054 SRI(DPG_PIPE_STUTTER_CONTROL, DMIF_PG, id),\
0055 SRI(DMIF_BUFFER_CONTROL, PIPE, id)
0056
0057 #define MI_DCE_PTE_REG_LIST(id)\
0058 SRI(DVMM_PTE_CONTROL, DCP, id),\
0059 SRI(DVMM_PTE_ARB_CONTROL, DCP, id)
0060
0061 #if defined(CONFIG_DRM_AMD_DC_SI)
0062 #define MI_DCE6_REG_LIST(id)\
0063 SRI(GRPH_ENABLE, DCP, id),\
0064 SRI(GRPH_CONTROL, DCP, id),\
0065 SRI(GRPH_X_START, DCP, id),\
0066 SRI(GRPH_Y_START, DCP, id),\
0067 SRI(GRPH_X_END, DCP, id),\
0068 SRI(GRPH_Y_END, DCP, id),\
0069 SRI(GRPH_PITCH, DCP, id),\
0070 SRI(GRPH_SWAP_CNTL, DCP, id),\
0071 SRI(PRESCALE_GRPH_CONTROL, DCP, id),\
0072 SRI(GRPH_UPDATE, DCP, id),\
0073 SRI(GRPH_FLIP_CONTROL, DCP, id),\
0074 SRI(GRPH_PRIMARY_SURFACE_ADDRESS, DCP, id),\
0075 SRI(GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, DCP, id),\
0076 SRI(GRPH_SECONDARY_SURFACE_ADDRESS, DCP, id),\
0077 SRI(GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, DCP, id),\
0078 SRI(DPG_PIPE_ARBITRATION_CONTROL1, DMIF_PG, id),\
0079 SRI(DPG_PIPE_ARBITRATION_CONTROL3, DMIF_PG, id),\
0080 SRI(DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, DMIF_PG, id),\
0081 SRI(DPG_PIPE_URGENCY_CONTROL, DMIF_PG, id),\
0082 SRI(DPG_PIPE_STUTTER_CONTROL, DMIF_PG, id),\
0083 SRI(DMIF_BUFFER_CONTROL, PIPE, id)
0084 #endif
0085
0086 #define MI_DCE8_REG_LIST(id)\
0087 MI_DCE_BASE_REG_LIST(id),\
0088 SRI(DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, DMIF_PG, id)
0089
0090 #define MI_DCE11_2_REG_LIST(id)\
0091 MI_DCE8_REG_LIST(id),\
0092 SRI(GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, DCP, id)
0093
0094 #define MI_DCE11_REG_LIST(id)\
0095 MI_DCE11_2_REG_LIST(id),\
0096 MI_DCE_PTE_REG_LIST(id)
0097
0098 #define MI_DCE12_REG_LIST(id)\
0099 MI_DCE_BASE_REG_LIST(id),\
0100 MI_DCE_PTE_REG_LIST(id),\
0101 SRI(GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, DCP, id),\
0102 SRI(DPG_PIPE_STUTTER_CONTROL2, DMIF_PG, id),\
0103 SRI(DPG_PIPE_LOW_POWER_CONTROL, DMIF_PG, id),\
0104 SR(DCHUB_FB_LOCATION),\
0105 SR(DCHUB_AGP_BASE),\
0106 SR(DCHUB_AGP_BOT),\
0107 SR(DCHUB_AGP_TOP)
0108
0109 struct dce_mem_input_registers {
0110
0111 uint32_t GRPH_ENABLE;
0112 uint32_t GRPH_CONTROL;
0113 uint32_t GRPH_X_START;
0114 uint32_t GRPH_Y_START;
0115 uint32_t GRPH_X_END;
0116 uint32_t GRPH_Y_END;
0117 uint32_t GRPH_PITCH;
0118 uint32_t HW_ROTATION;
0119 uint32_t GRPH_SWAP_CNTL;
0120 uint32_t PRESCALE_GRPH_CONTROL;
0121 uint32_t GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT;
0122 uint32_t DVMM_PTE_CONTROL;
0123 uint32_t DVMM_PTE_ARB_CONTROL;
0124 uint32_t GRPH_UPDATE;
0125 uint32_t GRPH_FLIP_CONTROL;
0126 uint32_t GRPH_PRIMARY_SURFACE_ADDRESS;
0127 uint32_t GRPH_PRIMARY_SURFACE_ADDRESS_HIGH;
0128 uint32_t GRPH_SECONDARY_SURFACE_ADDRESS;
0129 uint32_t GRPH_SECONDARY_SURFACE_ADDRESS_HIGH;
0130
0131 uint32_t DPG_PIPE_ARBITRATION_CONTROL1;
0132 #if defined(CONFIG_DRM_AMD_DC_SI)
0133 uint32_t DPG_PIPE_ARBITRATION_CONTROL3;
0134 #endif
0135 uint32_t DPG_WATERMARK_MASK_CONTROL;
0136 uint32_t DPG_PIPE_URGENCY_CONTROL;
0137 uint32_t DPG_PIPE_URGENT_LEVEL_CONTROL;
0138 uint32_t DPG_PIPE_NB_PSTATE_CHANGE_CONTROL;
0139 uint32_t DPG_PIPE_LOW_POWER_CONTROL;
0140 uint32_t DPG_PIPE_STUTTER_CONTROL;
0141 uint32_t DPG_PIPE_STUTTER_CONTROL2;
0142
0143 uint32_t DMIF_BUFFER_CONTROL;
0144
0145 uint32_t MC_HUB_RDREQ_DMIF_LIMIT;
0146
0147 uint32_t DCHUB_FB_LOCATION;
0148 uint32_t DCHUB_AGP_BASE;
0149 uint32_t DCHUB_AGP_BOT;
0150 uint32_t DCHUB_AGP_TOP;
0151 };
0152
0153
0154 #define SFB(blk_name, reg_name, field_name, post_fix)\
0155 .field_name = blk_name ## reg_name ## __ ## field_name ## post_fix
0156
0157 #if defined(CONFIG_DRM_AMD_DC_SI)
0158 #define MI_GFX6_TILE_MASK_SH_LIST(mask_sh, blk)\
0159 SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
0160 SFB(blk, GRPH_CONTROL, GRPH_BANK_WIDTH, mask_sh),\
0161 SFB(blk, GRPH_CONTROL, GRPH_BANK_HEIGHT, mask_sh),\
0162 SFB(blk, GRPH_CONTROL, GRPH_MACRO_TILE_ASPECT, mask_sh),\
0163 SFB(blk, GRPH_CONTROL, GRPH_TILE_SPLIT, mask_sh),\
0164 SFB(blk, GRPH_CONTROL, GRPH_PIPE_CONFIG, mask_sh),\
0165 SFB(blk, GRPH_CONTROL, GRPH_ARRAY_MODE, mask_sh),\
0166 SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
0167 #endif
0168
0169 #define MI_GFX8_TILE_MASK_SH_LIST(mask_sh, blk)\
0170 SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
0171 SFB(blk, GRPH_CONTROL, GRPH_BANK_WIDTH, mask_sh),\
0172 SFB(blk, GRPH_CONTROL, GRPH_BANK_HEIGHT, mask_sh),\
0173 SFB(blk, GRPH_CONTROL, GRPH_MACRO_TILE_ASPECT, mask_sh),\
0174 SFB(blk, GRPH_CONTROL, GRPH_TILE_SPLIT, mask_sh),\
0175 SFB(blk, GRPH_CONTROL, GRPH_MICRO_TILE_MODE, mask_sh),\
0176 SFB(blk, GRPH_CONTROL, GRPH_PIPE_CONFIG, mask_sh),\
0177 SFB(blk, GRPH_CONTROL, GRPH_ARRAY_MODE, mask_sh),\
0178 SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
0179
0180 #define MI_DCP_MASK_SH_LIST(mask_sh, blk)\
0181 SFB(blk, GRPH_ENABLE, GRPH_ENABLE, mask_sh),\
0182 SFB(blk, GRPH_CONTROL, GRPH_DEPTH, mask_sh),\
0183 SFB(blk, GRPH_CONTROL, GRPH_FORMAT, mask_sh),\
0184 SFB(blk, GRPH_X_START, GRPH_X_START, mask_sh),\
0185 SFB(blk, GRPH_Y_START, GRPH_Y_START, mask_sh),\
0186 SFB(blk, GRPH_X_END, GRPH_X_END, mask_sh),\
0187 SFB(blk, GRPH_Y_END, GRPH_Y_END, mask_sh),\
0188 SFB(blk, GRPH_PITCH, GRPH_PITCH, mask_sh),\
0189 SFB(blk, HW_ROTATION, GRPH_ROTATION_ANGLE, mask_sh),\
0190 SFB(blk, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, mask_sh),\
0191 SFB(blk, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, mask_sh),\
0192 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_SELECT, mask_sh),\
0193 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_R_SIGN, mask_sh),\
0194 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_G_SIGN, mask_sh),\
0195 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_B_SIGN, mask_sh),\
0196 SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
0197 SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_SURFACE_ADDRESS, mask_sh),\
0198 SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
0199 SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS, GRPH_PRIMARY_SURFACE_ADDRESS, mask_sh),\
0200 SFB(blk, GRPH_UPDATE, GRPH_SURFACE_UPDATE_PENDING, mask_sh),\
0201 SFB(blk, GRPH_UPDATE, GRPH_UPDATE_LOCK, mask_sh),\
0202 SFB(blk, GRPH_FLIP_CONTROL, GRPH_SURFACE_UPDATE_H_RETRACE_EN, mask_sh)
0203
0204 #if defined(CONFIG_DRM_AMD_DC_SI)
0205 #define MI_DCP_MASK_SH_LIST_DCE6(mask_sh, blk)\
0206 SFB(blk, GRPH_ENABLE, GRPH_ENABLE, mask_sh),\
0207 SFB(blk, GRPH_CONTROL, GRPH_DEPTH, mask_sh),\
0208 SFB(blk, GRPH_CONTROL, GRPH_FORMAT, mask_sh),\
0209 SFB(blk, GRPH_X_START, GRPH_X_START, mask_sh),\
0210 SFB(blk, GRPH_Y_START, GRPH_Y_START, mask_sh),\
0211 SFB(blk, GRPH_X_END, GRPH_X_END, mask_sh),\
0212 SFB(blk, GRPH_Y_END, GRPH_Y_END, mask_sh),\
0213 SFB(blk, GRPH_PITCH, GRPH_PITCH, mask_sh),\
0214 SFB(blk, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, mask_sh),\
0215 SFB(blk, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, mask_sh),\
0216 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_SELECT, mask_sh),\
0217 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_R_SIGN, mask_sh),\
0218 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_G_SIGN, mask_sh),\
0219 SFB(blk, PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_B_SIGN, mask_sh),\
0220 SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\
0221 SFB(blk, GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_SURFACE_ADDRESS, mask_sh),\
0222 SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\
0223 SFB(blk, GRPH_PRIMARY_SURFACE_ADDRESS, GRPH_PRIMARY_SURFACE_ADDRESS, mask_sh),\
0224 SFB(blk, GRPH_UPDATE, GRPH_SURFACE_UPDATE_PENDING, mask_sh),\
0225 SFB(blk, GRPH_UPDATE, GRPH_UPDATE_LOCK, mask_sh),\
0226 SFB(blk, GRPH_FLIP_CONTROL, GRPH_SURFACE_UPDATE_H_RETRACE_EN, mask_sh)
0227 #endif
0228
0229 #define MI_DCP_DCE11_MASK_SH_LIST(mask_sh, blk)\
0230 SFB(blk, GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT, mask_sh)
0231
0232 #define MI_DCP_PTE_MASK_SH_LIST(mask_sh, blk)\
0233 SFB(blk, DVMM_PTE_CONTROL, DVMM_PAGE_WIDTH, mask_sh),\
0234 SFB(blk, DVMM_PTE_CONTROL, DVMM_PAGE_HEIGHT, mask_sh),\
0235 SFB(blk, DVMM_PTE_CONTROL, DVMM_MIN_PTE_BEFORE_FLIP, mask_sh),\
0236 SFB(blk, DVMM_PTE_ARB_CONTROL, DVMM_PTE_REQ_PER_CHUNK, mask_sh),\
0237 SFB(blk, DVMM_PTE_ARB_CONTROL, DVMM_MAX_PTE_REQ_OUTSTANDING, mask_sh)
0238
0239 #if defined(CONFIG_DRM_AMD_DC_SI)
0240 #define MI_DMIF_PG_MASK_SH_LIST_DCE6(mask_sh, blk)\
0241 SFB(blk, DPG_PIPE_ARBITRATION_CONTROL1, PIXEL_DURATION, mask_sh),\
0242 SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
0243 SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
0244 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_ENABLE, mask_sh),\
0245 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_IGNORE_FBC, mask_sh),\
0246 SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATED, mask_sh),\
0247 SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATION_COMPLETED, mask_sh)
0248
0249 #define MI_DMIF_PG_MASK_SH_DCE6(mask_sh, blk)\
0250 SFB(blk, DPG_PIPE_ARBITRATION_CONTROL3, URGENCY_WATERMARK_MASK, mask_sh),\
0251 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, mask_sh),\
0252 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
0253 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
0254 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_ENABLE, mask_sh),\
0255 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
0256 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
0257 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK, mask_sh)
0258
0259 #define MI_DCE6_MASK_SH_LIST(mask_sh)\
0260 MI_DCP_MASK_SH_LIST_DCE6(mask_sh, ),\
0261 MI_DMIF_PG_MASK_SH_LIST_DCE6(mask_sh, ),\
0262 MI_DMIF_PG_MASK_SH_DCE6(mask_sh, ),\
0263 MI_GFX6_TILE_MASK_SH_LIST(mask_sh, )
0264 #endif
0265
0266 #define MI_DMIF_PG_MASK_SH_LIST(mask_sh, blk)\
0267 SFB(blk, DPG_PIPE_ARBITRATION_CONTROL1, PIXEL_DURATION, mask_sh),\
0268 SFB(blk, DPG_WATERMARK_MASK_CONTROL, URGENCY_WATERMARK_MASK, mask_sh),\
0269 SFB(blk, DPG_WATERMARK_MASK_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, mask_sh),\
0270 SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
0271 SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
0272 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_ENABLE, mask_sh),\
0273 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_IGNORE_FBC, mask_sh),\
0274 SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATED, mask_sh),\
0275 SF(PIPE0_DMIF_BUFFER_CONTROL, DMIF_BUFFERS_ALLOCATION_COMPLETED, mask_sh)
0276
0277 #define MI_DMIF_PG_MASK_SH_DCE(mask_sh, blk)\
0278 SFB(blk, DPG_PIPE_STUTTER_CONTROL, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
0279 SFB(blk, DPG_WATERMARK_MASK_CONTROL, NB_PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
0280 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_ENABLE, mask_sh),\
0281 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
0282 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
0283 SFB(blk, DPG_PIPE_NB_PSTATE_CHANGE_CONTROL, NB_PSTATE_CHANGE_WATERMARK, mask_sh)
0284
0285 #define MI_DCE8_MASK_SH_LIST(mask_sh)\
0286 MI_DCP_MASK_SH_LIST(mask_sh, ),\
0287 MI_DMIF_PG_MASK_SH_LIST(mask_sh, ),\
0288 MI_DMIF_PG_MASK_SH_DCE(mask_sh, ),\
0289 MI_GFX8_TILE_MASK_SH_LIST(mask_sh, )
0290
0291 #define MI_DCE11_2_MASK_SH_LIST(mask_sh)\
0292 MI_DCE8_MASK_SH_LIST(mask_sh),\
0293 MI_DCP_DCE11_MASK_SH_LIST(mask_sh, )
0294
0295 #define MI_DCE11_MASK_SH_LIST(mask_sh)\
0296 MI_DCE11_2_MASK_SH_LIST(mask_sh),\
0297 MI_DCP_PTE_MASK_SH_LIST(mask_sh, )
0298
0299 #define MI_GFX9_TILE_MASK_SH_LIST(mask_sh, blk)\
0300 SFB(blk, GRPH_CONTROL, GRPH_NUM_BANKS, mask_sh),\
0301 SFB(blk, GRPH_CONTROL, GRPH_SW_MODE, mask_sh),\
0302 SFB(blk, GRPH_CONTROL, GRPH_SE_ENABLE, mask_sh),\
0303 SFB(blk, GRPH_CONTROL, GRPH_NUM_SHADER_ENGINES, mask_sh),\
0304 SFB(blk, GRPH_CONTROL, GRPH_NUM_PIPES, mask_sh),\
0305 SFB(blk, GRPH_CONTROL, GRPH_COLOR_EXPANSION_MODE, mask_sh)
0306
0307 #define MI_DCE12_DMIF_PG_MASK_SH_LIST(mask_sh, blk)\
0308 SFB(blk, DPG_PIPE_STUTTER_CONTROL2, STUTTER_EXIT_SELF_REFRESH_WATERMARK, mask_sh),\
0309 SFB(blk, DPG_PIPE_STUTTER_CONTROL2, STUTTER_ENTER_SELF_REFRESH_WATERMARK, mask_sh),\
0310 SFB(blk, DPG_PIPE_URGENT_LEVEL_CONTROL, URGENT_LEVEL_LOW_WATERMARK, mask_sh),\
0311 SFB(blk, DPG_PIPE_URGENT_LEVEL_CONTROL, URGENT_LEVEL_HIGH_WATERMARK, mask_sh),\
0312 SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_LOW_WATERMARK, mask_sh),\
0313 SFB(blk, DPG_PIPE_URGENCY_CONTROL, URGENCY_HIGH_WATERMARK, mask_sh),\
0314 SFB(blk, DPG_WATERMARK_MASK_CONTROL, PSTATE_CHANGE_WATERMARK_MASK, mask_sh),\
0315 SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_ENABLE, mask_sh),\
0316 SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_URGENT_DURING_REQUEST, mask_sh),\
0317 SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST, mask_sh),\
0318 SFB(blk, DPG_PIPE_LOW_POWER_CONTROL, PSTATE_CHANGE_WATERMARK, mask_sh)
0319
0320 #define MI_GFX9_DCHUB_MASK_SH_LIST(mask_sh)\
0321 SF(DCHUB_FB_LOCATION, FB_TOP, mask_sh),\
0322 SF(DCHUB_FB_LOCATION, FB_BASE, mask_sh),\
0323 SF(DCHUB_AGP_BASE, AGP_BASE, mask_sh),\
0324 SF(DCHUB_AGP_BOT, AGP_BOT, mask_sh),\
0325 SF(DCHUB_AGP_TOP, AGP_TOP, mask_sh)
0326
0327 #define MI_DCE12_MASK_SH_LIST(mask_sh)\
0328 MI_DCP_MASK_SH_LIST(mask_sh, DCP0_),\
0329 SF(DCP0_GRPH_SECONDARY_SURFACE_ADDRESS, GRPH_SECONDARY_DFQ_ENABLE, mask_sh),\
0330 MI_DCP_DCE11_MASK_SH_LIST(mask_sh, DCP0_),\
0331 MI_DCP_PTE_MASK_SH_LIST(mask_sh, DCP0_),\
0332 MI_DMIF_PG_MASK_SH_LIST(mask_sh, DMIF_PG0_),\
0333 MI_DCE12_DMIF_PG_MASK_SH_LIST(mask_sh, DMIF_PG0_),\
0334 MI_GFX9_TILE_MASK_SH_LIST(mask_sh, DCP0_),\
0335 MI_GFX9_DCHUB_MASK_SH_LIST(mask_sh)
0336
0337 #define MI_REG_FIELD_LIST(type) \
0338 type GRPH_ENABLE; \
0339 type GRPH_X_START; \
0340 type GRPH_Y_START; \
0341 type GRPH_X_END; \
0342 type GRPH_Y_END; \
0343 type GRPH_PITCH; \
0344 type GRPH_ROTATION_ANGLE; \
0345 type GRPH_RED_CROSSBAR; \
0346 type GRPH_BLUE_CROSSBAR; \
0347 type GRPH_PRESCALE_SELECT; \
0348 type GRPH_PRESCALE_R_SIGN; \
0349 type GRPH_PRESCALE_G_SIGN; \
0350 type GRPH_PRESCALE_B_SIGN; \
0351 type GRPH_PIPE_OUTSTANDING_REQUEST_LIMIT; \
0352 type DVMM_PAGE_WIDTH; \
0353 type DVMM_PAGE_HEIGHT; \
0354 type DVMM_MIN_PTE_BEFORE_FLIP; \
0355 type DVMM_PTE_REQ_PER_CHUNK; \
0356 type DVMM_MAX_PTE_REQ_OUTSTANDING; \
0357 type GRPH_DEPTH; \
0358 type GRPH_FORMAT; \
0359 type GRPH_NUM_BANKS; \
0360 type GRPH_BANK_WIDTH;\
0361 type GRPH_BANK_HEIGHT;\
0362 type GRPH_MACRO_TILE_ASPECT;\
0363 type GRPH_TILE_SPLIT;\
0364 type GRPH_MICRO_TILE_MODE;\
0365 type GRPH_PIPE_CONFIG;\
0366 type GRPH_ARRAY_MODE;\
0367 type GRPH_COLOR_EXPANSION_MODE;\
0368 type GRPH_SW_MODE; \
0369 type GRPH_SE_ENABLE; \
0370 type GRPH_NUM_SHADER_ENGINES; \
0371 type GRPH_NUM_PIPES; \
0372 type GRPH_SECONDARY_SURFACE_ADDRESS_HIGH; \
0373 type GRPH_SECONDARY_SURFACE_ADDRESS; \
0374 type GRPH_SECONDARY_DFQ_ENABLE; \
0375 type GRPH_PRIMARY_SURFACE_ADDRESS_HIGH; \
0376 type GRPH_PRIMARY_SURFACE_ADDRESS; \
0377 type GRPH_SURFACE_UPDATE_PENDING; \
0378 type GRPH_SURFACE_UPDATE_H_RETRACE_EN; \
0379 type GRPH_UPDATE_LOCK; \
0380 type PIXEL_DURATION; \
0381 type URGENCY_WATERMARK_MASK; \
0382 type PSTATE_CHANGE_WATERMARK_MASK; \
0383 type NB_PSTATE_CHANGE_WATERMARK_MASK; \
0384 type STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK; \
0385 type URGENCY_LOW_WATERMARK; \
0386 type URGENCY_HIGH_WATERMARK; \
0387 type URGENT_LEVEL_LOW_WATERMARK;\
0388 type URGENT_LEVEL_HIGH_WATERMARK;\
0389 type NB_PSTATE_CHANGE_ENABLE; \
0390 type NB_PSTATE_CHANGE_URGENT_DURING_REQUEST; \
0391 type NB_PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST; \
0392 type NB_PSTATE_CHANGE_WATERMARK; \
0393 type PSTATE_CHANGE_ENABLE; \
0394 type PSTATE_CHANGE_URGENT_DURING_REQUEST; \
0395 type PSTATE_CHANGE_NOT_SELF_REFRESH_DURING_REQUEST; \
0396 type PSTATE_CHANGE_WATERMARK; \
0397 type STUTTER_ENABLE; \
0398 type STUTTER_IGNORE_FBC; \
0399 type STUTTER_EXIT_SELF_REFRESH_WATERMARK; \
0400 type STUTTER_ENTER_SELF_REFRESH_WATERMARK; \
0401 type DMIF_BUFFERS_ALLOCATED; \
0402 type DMIF_BUFFERS_ALLOCATION_COMPLETED; \
0403 type ENABLE; \
0404 type FB_BASE; \
0405 type FB_TOP; \
0406 type AGP_BASE; \
0407 type AGP_TOP; \
0408 type AGP_BOT; \
0409
0410 struct dce_mem_input_shift {
0411 MI_REG_FIELD_LIST(uint8_t)
0412 };
0413
0414 struct dce_mem_input_mask {
0415 MI_REG_FIELD_LIST(uint32_t)
0416 };
0417
0418 struct dce_mem_input_wa {
0419 uint8_t single_head_rdreq_dmif_limit;
0420 };
0421
0422 struct dce_mem_input {
0423 struct mem_input base;
0424
0425 const struct dce_mem_input_registers *regs;
0426 const struct dce_mem_input_shift *shifts;
0427 const struct dce_mem_input_mask *masks;
0428
0429 struct dce_mem_input_wa wa;
0430 };
0431
0432 void dce_mem_input_construct(
0433 struct dce_mem_input *dce_mi,
0434 struct dc_context *ctx,
0435 int inst,
0436 const struct dce_mem_input_registers *regs,
0437 const struct dce_mem_input_shift *mi_shift,
0438 const struct dce_mem_input_mask *mi_mask);
0439
0440 #if defined(CONFIG_DRM_AMD_DC_SI)
0441 void dce60_mem_input_construct(
0442 struct dce_mem_input *dce_mi,
0443 struct dc_context *ctx,
0444 int inst,
0445 const struct dce_mem_input_registers *regs,
0446 const struct dce_mem_input_shift *mi_shift,
0447 const struct dce_mem_input_mask *mi_mask);
0448 #endif
0449
0450 void dce112_mem_input_construct(
0451 struct dce_mem_input *dce_mi,
0452 struct dc_context *ctx,
0453 int inst,
0454 const struct dce_mem_input_registers *regs,
0455 const struct dce_mem_input_shift *mi_shift,
0456 const struct dce_mem_input_mask *mi_mask);
0457
0458 void dce120_mem_input_construct(
0459 struct dce_mem_input *dce_mi,
0460 struct dc_context *ctx,
0461 int inst,
0462 const struct dce_mem_input_registers *regs,
0463 const struct dce_mem_input_shift *mi_shift,
0464 const struct dce_mem_input_mask *mi_mask);
0465
0466 #endif