aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZeyu Fan <Zeyu.Fan@amd.com>2017-07-23 18:30:15 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:15:34 -0400
commit08b1688620426ad3e09fc7a98aabc28dda30cde6 (patch)
tree921ed437878fc27907316489736a05a76a1ad917
parentc8d7bd8bd0c08aa9115589d264e274ed7fdf4c2e (diff)
drm/amd/display: Move DCHUBBUB block from MemInput to HW sequencer.
Signed-off-by: Zeyu Fan <Zeyu.Fan@amd.com> Reviewed-by: Zeyu Fan <Zeyu.Fan@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc.c6
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h122
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c54
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c1
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce120/dce120_hw_sequencer.c64
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c2
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c304
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.c303
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.h76
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h7
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h4
11 files changed, 492 insertions, 451 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 9ef671735125..e89a2e5c8902 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -2042,10 +2042,10 @@ bool dc_init_dchub(struct dc *dc, struct dchub_init_data *dh_data)
2042 return false; 2042 return false;
2043 } 2043 }
2044 2044
2045 if (mi->funcs->mem_input_update_dchub) 2045 if (core_dc->hwss.update_dchub)
2046 mi->funcs->mem_input_update_dchub(mi, dh_data); 2046 core_dc->hwss.update_dchub(core_dc->hwseq, dh_data);
2047 else 2047 else
2048 ASSERT(mi->funcs->mem_input_update_dchub); 2048 ASSERT(core_dc->hwss.update_dchub);
2049 2049
2050 2050
2051 return true; 2051 return true;
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
index 7feb1ca9b8c0..d62fc526783f 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
@@ -116,6 +116,15 @@
116 .BLND_V_UPDATE_LOCK[3] = mmBLNDV_V_UPDATE_LOCK, \ 116 .BLND_V_UPDATE_LOCK[3] = mmBLNDV_V_UPDATE_LOCK, \
117 .BLND_CONTROL[3] = mmBLNDV_CONTROL 117 .BLND_CONTROL[3] = mmBLNDV_CONTROL
118 118
119#define HWSEQ_DCE120_REG_LIST() \
120 HWSEQ_DCE10_REG_LIST(), \
121 HWSEQ_PIXEL_RATE_REG_LIST(CRTC), \
122 HWSEQ_PHYPLL_REG_LIST(CRTC), \
123 SR(DCHUB_FB_LOCATION),\
124 SR(DCHUB_AGP_BASE),\
125 SR(DCHUB_AGP_BOT),\
126 SR(DCHUB_AGP_TOP)
127
119#define HWSEQ_DCE112_REG_LIST() \ 128#define HWSEQ_DCE112_REG_LIST() \
120 HWSEQ_DCE10_REG_LIST(), \ 129 HWSEQ_DCE10_REG_LIST(), \
121 HWSEQ_PIXEL_RATE_REG_LIST(CRTC), \ 130 HWSEQ_PIXEL_RATE_REG_LIST(CRTC), \
@@ -146,8 +155,31 @@
146 SRII(OPP_PIPE_CONTROL, OPP_PIPE, 2), \ 155 SRII(OPP_PIPE_CONTROL, OPP_PIPE, 2), \
147 SRII(OPP_PIPE_CONTROL, OPP_PIPE, 3), \ 156 SRII(OPP_PIPE_CONTROL, OPP_PIPE, 3), \
148 SR(REFCLK_CNTL), \ 157 SR(REFCLK_CNTL), \
158 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A),\
159 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A),\
160 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A),\
161 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A),\
162 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A),\
163 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B),\
164 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B),\
165 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B),\
166 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B),\
167 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B),\
168 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C),\
169 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C),\
170 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C),\
171 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C),\
172 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C),\
173 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D),\
174 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D),\
175 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D),\
176 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D),\
177 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D),\
178 SR(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL),\
179 SR(DCHUBBUB_ARB_DRAM_STATE_CNTL),\
180 SR(DCHUBBUB_ARB_SAT_LEVEL),\
181 SR(DCHUBBUB_ARB_DF_REQ_OUTSTAND),\
149 SR(DCHUBBUB_GLOBAL_TIMER_CNTL), \ 182 SR(DCHUBBUB_GLOBAL_TIMER_CNTL), \
150 SR(DCHUBBUB_ARB_DRAM_STATE_CNTL), \
151 SR(DCHUBBUB_TEST_DEBUG_INDEX), \ 183 SR(DCHUBBUB_TEST_DEBUG_INDEX), \
152 SR(DCHUBBUB_TEST_DEBUG_DATA), \ 184 SR(DCHUBBUB_TEST_DEBUG_DATA), \
153 SR(DC_IP_REQUEST_CNTL), \ 185 SR(DC_IP_REQUEST_CNTL), \
@@ -180,7 +212,13 @@
180 212
181#if defined(CONFIG_DRM_AMD_DC_DCN1_0) 213#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
182#define HWSEQ_DCN1_REG_LIST()\ 214#define HWSEQ_DCN1_REG_LIST()\
183 HWSEQ_DCN_REG_LIST() 215 HWSEQ_DCN_REG_LIST(), \
216 SR(DCHUBBUB_SDPIF_FB_TOP),\
217 SR(DCHUBBUB_SDPIF_FB_BASE),\
218 SR(DCHUBBUB_SDPIF_FB_OFFSET),\
219 SR(DCHUBBUB_SDPIF_AGP_BASE),\
220 SR(DCHUBBUB_SDPIF_AGP_BOT),\
221 SR(DCHUBBUB_SDPIF_AGP_TOP)
184#endif 222#endif
185 223
186 224
@@ -194,6 +232,11 @@ struct dce_hwseq_registers {
194 uint32_t CRTC_H_BLANK_START_END[6]; 232 uint32_t CRTC_H_BLANK_START_END[6];
195 uint32_t PIXEL_RATE_CNTL[6]; 233 uint32_t PIXEL_RATE_CNTL[6];
196 uint32_t PHYPLL_PIXEL_RATE_CNTL[6]; 234 uint32_t PHYPLL_PIXEL_RATE_CNTL[6];
235 /*DCHUB*/
236 uint32_t DCHUB_FB_LOCATION;
237 uint32_t DCHUB_AGP_BASE;
238 uint32_t DCHUB_AGP_BOT;
239 uint32_t DCHUB_AGP_TOP;
197 240
198#if defined(CONFIG_DRM_AMD_DC_DCN1_0) 241#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
199 uint32_t OTG_GLOBAL_SYNC_STATUS[4]; 242 uint32_t OTG_GLOBAL_SYNC_STATUS[4];
@@ -202,10 +245,39 @@ struct dce_hwseq_registers {
202 uint32_t DPP_CONTROL[4]; 245 uint32_t DPP_CONTROL[4];
203 uint32_t OPP_PIPE_CONTROL[4]; 246 uint32_t OPP_PIPE_CONTROL[4];
204 uint32_t REFCLK_CNTL; 247 uint32_t REFCLK_CNTL;
248 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A;
249 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A;
250 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A;
251 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A;
252 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;
253 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B;
254 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B;
255 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B;
256 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B;
257 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;
258 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C;
259 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C;
260 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C;
261 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C;
262 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;
263 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D;
264 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D;
265 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D;
266 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D;
267 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;
268 uint32_t DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL;
269 uint32_t DCHUBBUB_ARB_SAT_LEVEL;
270 uint32_t DCHUBBUB_ARB_DF_REQ_OUTSTAND;
205 uint32_t DCHUBBUB_GLOBAL_TIMER_CNTL; 271 uint32_t DCHUBBUB_GLOBAL_TIMER_CNTL;
206 uint32_t DCHUBBUB_ARB_DRAM_STATE_CNTL; 272 uint32_t DCHUBBUB_ARB_DRAM_STATE_CNTL;
207 uint32_t DCHUBBUB_TEST_DEBUG_INDEX; 273 uint32_t DCHUBBUB_TEST_DEBUG_INDEX;
208 uint32_t DCHUBBUB_TEST_DEBUG_DATA; 274 uint32_t DCHUBBUB_TEST_DEBUG_DATA;
275 uint32_t DCHUBBUB_SDPIF_FB_TOP;
276 uint32_t DCHUBBUB_SDPIF_FB_BASE;
277 uint32_t DCHUBBUB_SDPIF_FB_OFFSET;
278 uint32_t DCHUBBUB_SDPIF_AGP_BASE;
279 uint32_t DCHUBBUB_SDPIF_AGP_BOT;
280 uint32_t DCHUBBUB_SDPIF_AGP_TOP;
209 uint32_t DC_IP_REQUEST_CNTL; 281 uint32_t DC_IP_REQUEST_CNTL;
210 uint32_t DOMAIN0_PG_CONFIG; 282 uint32_t DOMAIN0_PG_CONFIG;
211 uint32_t DOMAIN1_PG_CONFIG; 283 uint32_t DOMAIN1_PG_CONFIG;
@@ -300,11 +372,19 @@ struct dce_hwseq_registers {
300 HWSEQ_DCE10_MASK_SH_LIST(mask_sh),\ 372 HWSEQ_DCE10_MASK_SH_LIST(mask_sh),\
301 HWSEQ_PHYPLL_MASK_SH_LIST(mask_sh, CRTC0_) 373 HWSEQ_PHYPLL_MASK_SH_LIST(mask_sh, CRTC0_)
302 374
375#define HWSEQ_GFX9_DCHUB_MASK_SH_LIST(mask_sh)\
376 SF(DCHUB_FB_LOCATION, FB_TOP, mask_sh),\
377 SF(DCHUB_FB_LOCATION, FB_BASE, mask_sh),\
378 SF(DCHUB_AGP_BASE, AGP_BASE, mask_sh),\
379 SF(DCHUB_AGP_BOT, AGP_BOT, mask_sh),\
380 SF(DCHUB_AGP_TOP, AGP_TOP, mask_sh)
381
303#define HWSEQ_DCE12_MASK_SH_LIST(mask_sh)\ 382#define HWSEQ_DCE12_MASK_SH_LIST(mask_sh)\
304 HWSEQ_DCEF_MASK_SH_LIST(mask_sh, DCFE0_DCFE_),\ 383 HWSEQ_DCEF_MASK_SH_LIST(mask_sh, DCFE0_DCFE_),\
305 HWSEQ_BLND_MASK_SH_LIST(mask_sh, BLND0_BLND_),\ 384 HWSEQ_BLND_MASK_SH_LIST(mask_sh, BLND0_BLND_),\
306 HWSEQ_PIXEL_RATE_MASK_SH_LIST(mask_sh, CRTC0_),\ 385 HWSEQ_PIXEL_RATE_MASK_SH_LIST(mask_sh, CRTC0_),\
307 HWSEQ_PHYPLL_MASK_SH_LIST(mask_sh, CRTC0_) 386 HWSEQ_PHYPLL_MASK_SH_LIST(mask_sh, CRTC0_),\
387 HWSEQ_GFX9_DCHUB_MASK_SH_LIST(mask_sh)
308 388
309#if defined(CONFIG_DRM_AMD_DC_DCN1_0) 389#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
310#define HWSEQ_DCN_MASK_SH_LIST(mask_sh)\ 390#define HWSEQ_DCN_MASK_SH_LIST(mask_sh)\
@@ -342,6 +422,12 @@ struct dce_hwseq_registers {
342 HWS_SF(, DOMAIN5_PG_STATUS, DOMAIN5_PGFSM_PWR_STATUS, mask_sh), \ 422 HWS_SF(, DOMAIN5_PG_STATUS, DOMAIN5_PGFSM_PWR_STATUS, mask_sh), \
343 HWS_SF(, DOMAIN6_PG_STATUS, DOMAIN6_PGFSM_PWR_STATUS, mask_sh), \ 423 HWS_SF(, DOMAIN6_PG_STATUS, DOMAIN6_PGFSM_PWR_STATUS, mask_sh), \
344 HWS_SF(, DOMAIN7_PG_STATUS, DOMAIN7_PGFSM_PWR_STATUS, mask_sh), \ 424 HWS_SF(, DOMAIN7_PG_STATUS, DOMAIN7_PGFSM_PWR_STATUS, mask_sh), \
425 HWS_SF(, DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, mask_sh), \
426 HWS_SF(, DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, mask_sh), \
427 HWS_SF(, DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE, mask_sh), \
428 HWS_SF(, DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE, mask_sh), \
429 HWS_SF(, DCHUBBUB_ARB_SAT_LEVEL, DCHUBBUB_ARB_SAT_LEVEL, mask_sh), \
430 HWS_SF(, DCHUBBUB_ARB_DF_REQ_OUTSTAND, DCHUBBUB_ARB_MIN_REQ_OUTSTAND, mask_sh), \
345 HWS_SF(, DCFCLK_CNTL, DCFCLK_GATE_DIS, mask_sh) 431 HWS_SF(, DCFCLK_CNTL, DCFCLK_GATE_DIS, mask_sh)
346#endif 432#endif
347 433
@@ -349,6 +435,12 @@ struct dce_hwseq_registers {
349#define HWSEQ_DCN1_MASK_SH_LIST(mask_sh)\ 435#define HWSEQ_DCN1_MASK_SH_LIST(mask_sh)\
350 HWSEQ_DCN_MASK_SH_LIST(mask_sh), \ 436 HWSEQ_DCN_MASK_SH_LIST(mask_sh), \
351 HWS_SF1(OTG0_, PHYPLL_PIXEL_RATE_CNTL, PIXEL_RATE_PLL_SOURCE, mask_sh), \ 437 HWS_SF1(OTG0_, PHYPLL_PIXEL_RATE_CNTL, PIXEL_RATE_PLL_SOURCE, mask_sh), \
438 HWS_SF(, DCHUBBUB_SDPIF_FB_TOP, SDPIF_FB_TOP, mask_sh), \
439 HWS_SF(, DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh), \
440 HWS_SF(, DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh), \
441 HWS_SF(, DCHUBBUB_SDPIF_AGP_BASE, SDPIF_AGP_BASE, mask_sh), \
442 HWS_SF(, DCHUBBUB_SDPIF_AGP_BOT, SDPIF_AGP_BOT, mask_sh), \
443 HWS_SF(, DCHUBBUB_SDPIF_AGP_TOP, SDPIF_AGP_TOP, mask_sh), \
352 HWS_SF(DPP_TOP0_, DPP_CONTROL, DPPCLK_RATE_CONTROL, mask_sh) 444 HWS_SF(DPP_TOP0_, DPP_CONTROL, DPPCLK_RATE_CONTROL, mask_sh)
353#endif 445#endif
354 446
@@ -370,7 +462,6 @@ struct dce_hwseq_registers {
370 type PHYPLL_PIXEL_RATE_SOURCE; \ 462 type PHYPLL_PIXEL_RATE_SOURCE; \
371 type PIXEL_RATE_PLL_SOURCE; \ 463 type PIXEL_RATE_PLL_SOURCE; \
372 464
373#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
374#define HWSEQ_DCN_REG_FIELD_LIST(type) \ 465#define HWSEQ_DCN_REG_FIELD_LIST(type) \
375 type VUPDATE_NO_LOCK_EVENT_CLEAR; \ 466 type VUPDATE_NO_LOCK_EVENT_CLEAR; \
376 type VUPDATE_NO_LOCK_EVENT_OCCURRED; \ 467 type VUPDATE_NO_LOCK_EVENT_OCCURRED; \
@@ -378,7 +469,25 @@ struct dce_hwseq_registers {
378 type HUBP_CLOCK_ENABLE; \ 469 type HUBP_CLOCK_ENABLE; \
379 type DPP_CLOCK_ENABLE; \ 470 type DPP_CLOCK_ENABLE; \
380 type DPPCLK_RATE_CONTROL; \ 471 type DPPCLK_RATE_CONTROL; \
472 type SDPIF_FB_TOP;\
473 type SDPIF_FB_BASE;\
474 type SDPIF_FB_OFFSET;\
475 type SDPIF_AGP_BASE;\
476 type SDPIF_AGP_BOT;\
477 type SDPIF_AGP_TOP;\
478 type FB_TOP;\
479 type FB_BASE;\
480 type FB_OFFSET;\
481 type AGP_BASE;\
482 type AGP_BOT;\
483 type AGP_TOP;\
381 type DCHUBBUB_GLOBAL_TIMER_ENABLE; \ 484 type DCHUBBUB_GLOBAL_TIMER_ENABLE; \
485 type DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST;\
486 type DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE;\
487 type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE;\
488 type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE;\
489 type DCHUBBUB_ARB_SAT_LEVEL;\
490 type DCHUBBUB_ARB_MIN_REQ_OUTSTAND;\
382 type OPP_PIPE_CLOCK_EN;\ 491 type OPP_PIPE_CLOCK_EN;\
383 type IP_REQUEST_EN; \ 492 type IP_REQUEST_EN; \
384 type DOMAIN0_POWER_FORCEON; \ 493 type DOMAIN0_POWER_FORCEON; \
@@ -408,20 +517,15 @@ struct dce_hwseq_registers {
408 type DCFCLK_GATE_DIS; \ 517 type DCFCLK_GATE_DIS; \
409 type DCHUBBUB_GLOBAL_TIMER_REFDIV; \ 518 type DCHUBBUB_GLOBAL_TIMER_REFDIV; \
410 type DENTIST_DPPCLK_WDIVIDER; 519 type DENTIST_DPPCLK_WDIVIDER;
411#endif
412 520
413struct dce_hwseq_shift { 521struct dce_hwseq_shift {
414 HWSEQ_REG_FIELD_LIST(uint8_t) 522 HWSEQ_REG_FIELD_LIST(uint8_t)
415#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
416 HWSEQ_DCN_REG_FIELD_LIST(uint8_t) 523 HWSEQ_DCN_REG_FIELD_LIST(uint8_t)
417#endif
418}; 524};
419 525
420struct dce_hwseq_mask { 526struct dce_hwseq_mask {
421 HWSEQ_REG_FIELD_LIST(uint32_t) 527 HWSEQ_REG_FIELD_LIST(uint32_t)
422#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
423 HWSEQ_DCN_REG_FIELD_LIST(uint32_t) 528 HWSEQ_DCN_REG_FIELD_LIST(uint32_t)
424#endif
425}; 529};
426 530
427 531
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c b/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c
index 157f4e1680e3..627669749740 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c
@@ -656,57 +656,6 @@ static bool dce_mi_program_surface_flip_and_addr(
656 return true; 656 return true;
657} 657}
658 658
659static void dce_mi_update_dchub(struct mem_input *mi,
660 struct dchub_init_data *dh_data)
661{
662 struct dce_mem_input *dce_mi = TO_DCE_MEM_INPUT(mi);
663 /* TODO: port code from dal2 */
664 switch (dh_data->fb_mode) {
665 case FRAME_BUFFER_MODE_ZFB_ONLY:
666 /*For ZFB case need to put DCHUB FB BASE and TOP upside down to indicate ZFB mode*/
667 REG_UPDATE_2(DCHUB_FB_LOCATION,
668 FB_TOP, 0,
669 FB_BASE, 0x0FFFF);
670
671 REG_UPDATE(DCHUB_AGP_BASE,
672 AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
673
674 REG_UPDATE(DCHUB_AGP_BOT,
675 AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
676
677 REG_UPDATE(DCHUB_AGP_TOP,
678 AGP_TOP, (dh_data->zfb_mc_base_addr + dh_data->zfb_size_in_byte - 1) >> 22);
679 break;
680 case FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL:
681 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
682 REG_UPDATE(DCHUB_AGP_BASE,
683 AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
684
685 REG_UPDATE(DCHUB_AGP_BOT,
686 AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
687
688 REG_UPDATE(DCHUB_AGP_TOP,
689 AGP_TOP, (dh_data->zfb_mc_base_addr + dh_data->zfb_size_in_byte - 1) >> 22);
690 break;
691 case FRAME_BUFFER_MODE_LOCAL_ONLY:
692 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
693 REG_UPDATE(DCHUB_AGP_BASE,
694 AGP_BASE, 0);
695
696 REG_UPDATE(DCHUB_AGP_BOT,
697 AGP_BOT, 0x03FFFF);
698
699 REG_UPDATE(DCHUB_AGP_TOP,
700 AGP_TOP, 0);
701 break;
702 default:
703 break;
704 }
705
706 dh_data->dchub_initialzied = true;
707 dh_data->dchub_info_valid = false;
708}
709
710static struct mem_input_funcs dce_mi_funcs = { 659static struct mem_input_funcs dce_mi_funcs = {
711 .mem_input_program_display_marks = dce_mi_program_display_marks, 660 .mem_input_program_display_marks = dce_mi_program_display_marks,
712 .allocate_mem_input = dce_mi_allocate_dmif, 661 .allocate_mem_input = dce_mi_allocate_dmif,
@@ -716,8 +665,7 @@ static struct mem_input_funcs dce_mi_funcs = {
716 .mem_input_program_pte_vm = dce_mi_program_pte_vm, 665 .mem_input_program_pte_vm = dce_mi_program_pte_vm,
717 .mem_input_program_surface_config = 666 .mem_input_program_surface_config =
718 dce_mi_program_surface_config, 667 dce_mi_program_surface_config,
719 .mem_input_is_flip_pending = dce_mi_is_flip_pending, 668 .mem_input_is_flip_pending = dce_mi_is_flip_pending
720 .mem_input_update_dchub = dce_mi_update_dchub
721}; 669};
722 670
723 671
diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
index 6ab9712ed808..efba8d7964eb 100644
--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
@@ -49,6 +49,7 @@
49#include "abm.h" 49#include "abm.h"
50#include "audio.h" 50#include "audio.h"
51#include "dce/dce_hwseq.h" 51#include "dce/dce_hwseq.h"
52#include "reg_helper.h"
52 53
53/* include DCE11 register header files */ 54/* include DCE11 register header files */
54#include "dce/dce_11_0_d.h" 55#include "dce/dce_11_0_d.h"
diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_hw_sequencer.c
index f5ffd8f6ed3b..91301b412aa0 100644
--- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_hw_sequencer.c
@@ -28,6 +28,7 @@
28#include "core_dc.h" 28#include "core_dc.h"
29#include "core_types.h" 29#include "core_types.h"
30#include "dce120_hw_sequencer.h" 30#include "dce120_hw_sequencer.h"
31#include "dce/dce_hwseq.h"
31 32
32#include "dce110/dce110_hw_sequencer.h" 33#include "dce110/dce110_hw_sequencer.h"
33 34
@@ -37,6 +38,15 @@
37#include "vega10/soc15ip.h" 38#include "vega10/soc15ip.h"
38#include "reg_helper.h" 39#include "reg_helper.h"
39 40
41#define CTX \
42 hws->ctx
43#define REG(reg)\
44 hws->regs->reg
45
46#undef FN
47#define FN(reg_name, field_name) \
48 hws->shifts->field_name, hws->masks->field_name
49
40struct dce120_hw_seq_reg_offsets { 50struct dce120_hw_seq_reg_offsets {
41 uint32_t crtc; 51 uint32_t crtc;
42}; 52};
@@ -184,6 +194,59 @@ static bool dce120_enable_display_power_gating(
184 return false; 194 return false;
185} 195}
186 196
197static void dce120_update_dchub(
198 struct dce_hwseq *hws,
199 struct dchub_init_data *dh_data)
200{
201 /* TODO: port code from dal2 */
202 switch (dh_data->fb_mode) {
203 case FRAME_BUFFER_MODE_ZFB_ONLY:
204 /*For ZFB case need to put DCHUB FB BASE and TOP upside down to indicate ZFB mode*/
205 REG_UPDATE_2(DCHUB_FB_LOCATION,
206 FB_TOP, 0,
207 FB_BASE, 0x0FFFF);
208
209 REG_UPDATE(DCHUB_AGP_BASE,
210 AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
211
212 REG_UPDATE(DCHUB_AGP_BOT,
213 AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
214
215 REG_UPDATE(DCHUB_AGP_TOP,
216 AGP_TOP, (dh_data->zfb_mc_base_addr + dh_data->zfb_size_in_byte - 1) >> 22);
217 break;
218 case FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL:
219 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
220 REG_UPDATE(DCHUB_AGP_BASE,
221 AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
222
223 REG_UPDATE(DCHUB_AGP_BOT,
224 AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
225
226 REG_UPDATE(DCHUB_AGP_TOP,
227 AGP_TOP, (dh_data->zfb_mc_base_addr + dh_data->zfb_size_in_byte - 1) >> 22);
228 break;
229 case FRAME_BUFFER_MODE_LOCAL_ONLY:
230 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
231 REG_UPDATE(DCHUB_AGP_BASE,
232 AGP_BASE, 0);
233
234 REG_UPDATE(DCHUB_AGP_BOT,
235 AGP_BOT, 0x03FFFF);
236
237 REG_UPDATE(DCHUB_AGP_TOP,
238 AGP_TOP, 0);
239 break;
240 default:
241 break;
242 }
243
244 dh_data->dchub_initialzied = true;
245 dh_data->dchub_info_valid = false;
246}
247
248
249
187bool dce120_hw_sequencer_construct(struct core_dc *dc) 250bool dce120_hw_sequencer_construct(struct core_dc *dc)
188{ 251{
189 /* All registers used by dce11.2 match those in dce11 in offset and 252 /* All registers used by dce11.2 match those in dce11 in offset and
@@ -191,6 +254,7 @@ bool dce120_hw_sequencer_construct(struct core_dc *dc)
191 */ 254 */
192 dce110_hw_sequencer_construct(dc); 255 dce110_hw_sequencer_construct(dc);
193 dc->hwss.enable_display_power_gating = dce120_enable_display_power_gating; 256 dc->hwss.enable_display_power_gating = dce120_enable_display_power_gating;
257 dc->hwss.update_dchub = dce120_update_dchub;
194 258
195 return true; 259 return true;
196} 260}
diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
index 82481247a812..f829b6e58bcb 100644
--- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
@@ -598,7 +598,7 @@ static struct stream_encoder *dce120_stream_encoder_create(
598 mm ## block ## id ## _ ## reg_name 598 mm ## block ## id ## _ ## reg_name
599 599
600static const struct dce_hwseq_registers hwseq_reg = { 600static const struct dce_hwseq_registers hwseq_reg = {
601 HWSEQ_DCE112_REG_LIST() 601 HWSEQ_DCE120_REG_LIST()
602}; 602};
603 603
604static const struct dce_hwseq_shift hwseq_shift = { 604static const struct dce_hwseq_shift hwseq_shift = {
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
index d61b63df16b8..b7940876c761 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -218,6 +218,306 @@ static void dpp_pg_control(
218 } 218 }
219} 219}
220 220
221static uint32_t convert_and_clamp(
222 uint32_t wm_ns,
223 uint32_t refclk_mhz,
224 uint32_t clamp_value)
225{
226 uint32_t ret_val = 0;
227 ret_val = wm_ns * refclk_mhz;
228 ret_val /= 1000;
229
230 if (ret_val > clamp_value)
231 ret_val = clamp_value;
232
233 return ret_val;
234}
235
236static void program_watermarks(
237 struct dce_hwseq *hws,
238 struct dcn_watermark_set *watermarks,
239 unsigned int refclk_mhz)
240{
241 uint32_t force_en = hws->ctx->dc->debug.disable_stutter ? 1 : 0;
242 /*
243 * Need to clamp to max of the register values (i.e. no wrap)
244 * for dcn1, all wm registers are 21-bit wide
245 */
246 uint32_t prog_wm_value;
247
248 /* Repeat for water mark set A, B, C and D. */
249 /* clock state A */
250 prog_wm_value = convert_and_clamp(watermarks->a.urgent_ns,
251 refclk_mhz, 0x1fffff);
252 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A, prog_wm_value);
253
254 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
255 "URGENCY_WATERMARK_A calculated =%d\n"
256 "HW register value = 0x%x\n",
257 watermarks->a.urgent_ns, prog_wm_value);
258
259 prog_wm_value = convert_and_clamp(watermarks->a.pte_meta_urgent_ns,
260 refclk_mhz, 0x1fffff);
261 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A, prog_wm_value);
262 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
263 "PTE_META_URGENCY_WATERMARK_A calculated =%d\n"
264 "HW register value = 0x%x\n",
265 watermarks->a.pte_meta_urgent_ns, prog_wm_value);
266
267
268 prog_wm_value = convert_and_clamp(
269 watermarks->a.cstate_pstate.cstate_enter_plus_exit_ns,
270 refclk_mhz, 0x1fffff);
271
272 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A, prog_wm_value);
273 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
274 "SR_ENTER_EXIT_WATERMARK_A calculated =%d\n"
275 "HW register value = 0x%x\n",
276 watermarks->a.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
277
278
279 prog_wm_value = convert_and_clamp(
280 watermarks->a.cstate_pstate.cstate_exit_ns,
281 refclk_mhz, 0x1fffff);
282 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A, prog_wm_value);
283 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
284 "SR_EXIT_WATERMARK_A calculated =%d\n"
285 "HW register value = 0x%x\n",
286 watermarks->a.cstate_pstate.cstate_exit_ns, prog_wm_value);
287
288
289 prog_wm_value = convert_and_clamp(
290 watermarks->a.cstate_pstate.pstate_change_ns,
291 refclk_mhz, 0x1fffff);
292 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A, prog_wm_value);
293 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
294 "DRAM_CLK_CHANGE_WATERMARK_A calculated =%d\n"
295 "HW register value = 0x%x\n\n",
296 watermarks->a.cstate_pstate.pstate_change_ns, prog_wm_value);
297
298
299 /* clock state B */
300 prog_wm_value = convert_and_clamp(
301 watermarks->b.urgent_ns, refclk_mhz, 0x1fffff);
302 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B, prog_wm_value);
303 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
304 "URGENCY_WATERMARK_B calculated =%d\n"
305 "HW register value = 0x%x\n",
306 watermarks->b.urgent_ns, prog_wm_value);
307
308
309 prog_wm_value = convert_and_clamp(
310 watermarks->b.pte_meta_urgent_ns,
311 refclk_mhz, 0x1fffff);
312 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B, prog_wm_value);
313 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
314 "PTE_META_URGENCY_WATERMARK_B calculated =%d\n"
315 "HW register value = 0x%x\n",
316 watermarks->b.pte_meta_urgent_ns, prog_wm_value);
317
318
319 prog_wm_value = convert_and_clamp(
320 watermarks->b.cstate_pstate.cstate_enter_plus_exit_ns,
321 refclk_mhz, 0x1fffff);
322 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B, prog_wm_value);
323 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
324 "SR_ENTER_WATERMARK_B calculated =%d\n"
325 "HW register value = 0x%x\n",
326 watermarks->b.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
327
328
329 prog_wm_value = convert_and_clamp(
330 watermarks->b.cstate_pstate.cstate_exit_ns,
331 refclk_mhz, 0x1fffff);
332 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B, prog_wm_value);
333 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
334 "SR_EXIT_WATERMARK_B calculated =%d\n"
335 "HW register value = 0x%x\n",
336 watermarks->b.cstate_pstate.cstate_exit_ns, prog_wm_value);
337
338 prog_wm_value = convert_and_clamp(
339 watermarks->b.cstate_pstate.pstate_change_ns,
340 refclk_mhz, 0x1fffff);
341 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B, prog_wm_value);
342 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
343 "DRAM_CLK_CHANGE_WATERMARK_B calculated =%d\n\n"
344 "HW register value = 0x%x\n",
345 watermarks->b.cstate_pstate.pstate_change_ns, prog_wm_value);
346
347 /* clock state C */
348 prog_wm_value = convert_and_clamp(
349 watermarks->c.urgent_ns, refclk_mhz, 0x1fffff);
350 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C, prog_wm_value);
351 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
352 "URGENCY_WATERMARK_C calculated =%d\n"
353 "HW register value = 0x%x\n",
354 watermarks->c.urgent_ns, prog_wm_value);
355
356
357 prog_wm_value = convert_and_clamp(
358 watermarks->c.pte_meta_urgent_ns,
359 refclk_mhz, 0x1fffff);
360 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C, prog_wm_value);
361 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
362 "PTE_META_URGENCY_WATERMARK_C calculated =%d\n"
363 "HW register value = 0x%x\n",
364 watermarks->c.pte_meta_urgent_ns, prog_wm_value);
365
366
367 prog_wm_value = convert_and_clamp(
368 watermarks->c.cstate_pstate.cstate_enter_plus_exit_ns,
369 refclk_mhz, 0x1fffff);
370 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C, prog_wm_value);
371 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
372 "SR_ENTER_WATERMARK_C calculated =%d\n"
373 "HW register value = 0x%x\n",
374 watermarks->c.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
375
376
377 prog_wm_value = convert_and_clamp(
378 watermarks->c.cstate_pstate.cstate_exit_ns,
379 refclk_mhz, 0x1fffff);
380 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C, prog_wm_value);
381 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
382 "SR_EXIT_WATERMARK_C calculated =%d\n"
383 "HW register value = 0x%x\n",
384 watermarks->c.cstate_pstate.cstate_exit_ns, prog_wm_value);
385
386
387 prog_wm_value = convert_and_clamp(
388 watermarks->c.cstate_pstate.pstate_change_ns,
389 refclk_mhz, 0x1fffff);
390 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C, prog_wm_value);
391 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
392 "DRAM_CLK_CHANGE_WATERMARK_C calculated =%d\n\n"
393 "HW register value = 0x%x\n",
394 watermarks->c.cstate_pstate.pstate_change_ns, prog_wm_value);
395
396 /* clock state D */
397 prog_wm_value = convert_and_clamp(
398 watermarks->d.urgent_ns, refclk_mhz, 0x1fffff);
399 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D, prog_wm_value);
400 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
401 "URGENCY_WATERMARK_D calculated =%d\n"
402 "HW register value = 0x%x\n",
403 watermarks->d.urgent_ns, prog_wm_value);
404
405 prog_wm_value = convert_and_clamp(
406 watermarks->d.pte_meta_urgent_ns,
407 refclk_mhz, 0x1fffff);
408 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D, prog_wm_value);
409 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
410 "PTE_META_URGENCY_WATERMARK_D calculated =%d\n"
411 "HW register value = 0x%x\n",
412 watermarks->d.pte_meta_urgent_ns, prog_wm_value);
413
414
415 prog_wm_value = convert_and_clamp(
416 watermarks->d.cstate_pstate.cstate_enter_plus_exit_ns,
417 refclk_mhz, 0x1fffff);
418 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D, prog_wm_value);
419 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
420 "SR_ENTER_WATERMARK_D calculated =%d\n"
421 "HW register value = 0x%x\n",
422 watermarks->d.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
423
424
425 prog_wm_value = convert_and_clamp(
426 watermarks->d.cstate_pstate.cstate_exit_ns,
427 refclk_mhz, 0x1fffff);
428 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D, prog_wm_value);
429 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
430 "SR_EXIT_WATERMARK_D calculated =%d\n"
431 "HW register value = 0x%x\n",
432 watermarks->d.cstate_pstate.cstate_exit_ns, prog_wm_value);
433
434
435 prog_wm_value = convert_and_clamp(
436 watermarks->d.cstate_pstate.pstate_change_ns,
437 refclk_mhz, 0x1fffff);
438 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D, prog_wm_value);
439 dm_logger_write(hws->ctx->logger, LOG_HW_MARKS,
440 "DRAM_CLK_CHANGE_WATERMARK_D calculated =%d\n"
441 "HW register value = 0x%x\n\n",
442 watermarks->d.cstate_pstate.pstate_change_ns, prog_wm_value);
443
444 REG_UPDATE(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL,
445 DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, 1);
446 REG_UPDATE(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL,
447 DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, 0);
448 REG_UPDATE(DCHUBBUB_ARB_SAT_LEVEL,
449 DCHUBBUB_ARB_SAT_LEVEL, 60 * refclk_mhz);
450 REG_UPDATE(DCHUBBUB_ARB_DF_REQ_OUTSTAND,
451 DCHUBBUB_ARB_MIN_REQ_OUTSTAND, 68);
452
453 REG_UPDATE_2(DCHUBBUB_ARB_DRAM_STATE_CNTL,
454 DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE, 0,
455 DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE, force_en);
456
457#if 0
458 REG_UPDATE_2(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL,
459 DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, 1,
460 DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, 1);
461#endif
462}
463
464
465static void dcn10_update_dchub(
466 struct dce_hwseq *hws,
467 struct dchub_init_data *dh_data)
468{
469 /* TODO: port code from dal2 */
470 switch (dh_data->fb_mode) {
471 case FRAME_BUFFER_MODE_ZFB_ONLY:
472 /*For ZFB case need to put DCHUB FB BASE and TOP upside down to indicate ZFB mode*/
473 REG_UPDATE(DCHUBBUB_SDPIF_FB_TOP,
474 SDPIF_FB_TOP, 0);
475
476 REG_UPDATE(DCHUBBUB_SDPIF_FB_BASE,
477 SDPIF_FB_BASE, 0x0FFFF);
478
479 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
480 SDPIF_AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
481
482 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
483 SDPIF_AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
484
485 REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
486 SDPIF_AGP_TOP, (dh_data->zfb_mc_base_addr +
487 dh_data->zfb_size_in_byte - 1) >> 22);
488 break;
489 case FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL:
490 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
491
492 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
493 SDPIF_AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
494
495 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
496 SDPIF_AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
497
498 REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
499 SDPIF_AGP_TOP, (dh_data->zfb_mc_base_addr +
500 dh_data->zfb_size_in_byte - 1) >> 22);
501 break;
502 case FRAME_BUFFER_MODE_LOCAL_ONLY:
503 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
504 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
505 SDPIF_AGP_BASE, 0);
506
507 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
508 SDPIF_AGP_BOT, 0X03FFFF);
509
510 REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
511 SDPIF_AGP_TOP, 0);
512 break;
513 default:
514 break;
515 }
516
517 dh_data->dchub_initialzied = true;
518 dh_data->dchub_info_valid = false;
519}
520
221static void hubp_pg_control( 521static void hubp_pg_control(
222 struct dce_hwseq *hws, 522 struct dce_hwseq *hws,
223 unsigned int hubp_inst, 523 unsigned int hubp_inst,
@@ -1615,8 +1915,7 @@ static void program_all_pipe_in_tree(
1615 * this OTG. this is done only one time. 1915 * this OTG. this is done only one time.
1616 */ 1916 */
1617 /* watermark is for all pipes */ 1917 /* watermark is for all pipes */
1618 pipe_ctx->mi->funcs->program_watermarks( 1918 program_watermarks(dc->hwseq, &context->bw.dcn.watermarks, ref_clk_mhz);
1619 pipe_ctx->mi, &context->bw.dcn.watermarks, ref_clk_mhz);
1620 1919
1621 if (dc->public.debug.sanity_checks) { 1920 if (dc->public.debug.sanity_checks) {
1622 /* pstate stuck check after watermark update */ 1921 /* pstate stuck check after watermark update */
@@ -2078,6 +2377,7 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
2078 .apply_ctx_for_surface = dcn10_apply_ctx_for_surface, 2377 .apply_ctx_for_surface = dcn10_apply_ctx_for_surface,
2079 .set_plane_config = set_plane_config, 2378 .set_plane_config = set_plane_config,
2080 .update_plane_addr = update_plane_addr, 2379 .update_plane_addr = update_plane_addr,
2380 .update_dchub = dcn10_update_dchub,
2081 .update_pending_status = dcn10_update_pending_status, 2381 .update_pending_status = dcn10_update_pending_status,
2082 .set_input_transfer_func = dcn10_set_input_transfer_func, 2382 .set_input_transfer_func = dcn10_set_input_transfer_func,
2083 .set_output_transfer_func = dcn10_set_output_transfer_func, 2383 .set_output_transfer_func = dcn10_set_output_transfer_func,
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.c
index 1f86295d6db6..c56a69b5a4d7 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.c
@@ -574,250 +574,6 @@ static void min10_setup(
574 min10_vready_workaround(mem_input, pipe_dest); 574 min10_vready_workaround(mem_input, pipe_dest);
575} 575}
576 576
577static uint32_t convert_and_clamp(
578 uint32_t wm_ns,
579 uint32_t refclk_mhz,
580 uint32_t clamp_value)
581{
582 uint32_t ret_val = 0;
583 ret_val = wm_ns * refclk_mhz;
584 ret_val /= 1000;
585
586 if (ret_val > clamp_value)
587 ret_val = clamp_value;
588
589 return ret_val;
590}
591
592static void min10_program_watermarks(
593 struct mem_input *mem_input,
594 struct dcn_watermark_set *watermarks,
595 unsigned int refclk_mhz)
596{
597 struct dcn10_mem_input *mi = TO_DCN10_MEM_INPUT(mem_input);
598 uint32_t force_en = mem_input->ctx->dc->debug.disable_stutter ? 1 : 0;
599 /*
600 * Need to clamp to max of the register values (i.e. no wrap)
601 * for dcn1, all wm registers are 21-bit wide
602 */
603 uint32_t prog_wm_value;
604
605 /* Repeat for water mark set A, B, C and D. */
606 /* clock state A */
607 prog_wm_value = convert_and_clamp(watermarks->a.urgent_ns,
608 refclk_mhz, 0x1fffff);
609 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A, prog_wm_value);
610
611 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
612 "URGENCY_WATERMARK_A calculated =%d\n"
613 "HW register value = 0x%x\n",
614 watermarks->a.urgent_ns, prog_wm_value);
615
616 prog_wm_value = convert_and_clamp(watermarks->a.pte_meta_urgent_ns,
617 refclk_mhz, 0x1fffff);
618 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A, prog_wm_value);
619 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
620 "PTE_META_URGENCY_WATERMARK_A calculated =%d\n"
621 "HW register value = 0x%x\n",
622 watermarks->a.pte_meta_urgent_ns, prog_wm_value);
623
624
625 prog_wm_value = convert_and_clamp(
626 watermarks->a.cstate_pstate.cstate_enter_plus_exit_ns,
627 refclk_mhz, 0x1fffff);
628
629 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A, prog_wm_value);
630 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
631 "SR_ENTER_EXIT_WATERMARK_A calculated =%d\n"
632 "HW register value = 0x%x\n",
633 watermarks->a.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
634
635
636 prog_wm_value = convert_and_clamp(
637 watermarks->a.cstate_pstate.cstate_exit_ns,
638 refclk_mhz, 0x1fffff);
639 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A, prog_wm_value);
640 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
641 "SR_EXIT_WATERMARK_A calculated =%d\n"
642 "HW register value = 0x%x\n",
643 watermarks->a.cstate_pstate.cstate_exit_ns, prog_wm_value);
644
645
646 prog_wm_value = convert_and_clamp(
647 watermarks->a.cstate_pstate.pstate_change_ns,
648 refclk_mhz, 0x1fffff);
649 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A, prog_wm_value);
650 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
651 "DRAM_CLK_CHANGE_WATERMARK_A calculated =%d\n"
652 "HW register value = 0x%x\n\n",
653 watermarks->a.cstate_pstate.pstate_change_ns, prog_wm_value);
654
655
656 /* clock state B */
657 prog_wm_value = convert_and_clamp(
658 watermarks->b.urgent_ns, refclk_mhz, 0x1fffff);
659 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B, prog_wm_value);
660 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
661 "URGENCY_WATERMARK_B calculated =%d\n"
662 "HW register value = 0x%x\n",
663 watermarks->b.urgent_ns, prog_wm_value);
664
665
666 prog_wm_value = convert_and_clamp(
667 watermarks->b.pte_meta_urgent_ns,
668 refclk_mhz, 0x1fffff);
669 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B, prog_wm_value);
670 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
671 "PTE_META_URGENCY_WATERMARK_B calculated =%d\n"
672 "HW register value = 0x%x\n",
673 watermarks->b.pte_meta_urgent_ns, prog_wm_value);
674
675
676 prog_wm_value = convert_and_clamp(
677 watermarks->b.cstate_pstate.cstate_enter_plus_exit_ns,
678 refclk_mhz, 0x1fffff);
679 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B, prog_wm_value);
680 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
681 "SR_ENTER_WATERMARK_B calculated =%d\n"
682 "HW register value = 0x%x\n",
683 watermarks->b.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
684
685
686 prog_wm_value = convert_and_clamp(
687 watermarks->b.cstate_pstate.cstate_exit_ns,
688 refclk_mhz, 0x1fffff);
689 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B, prog_wm_value);
690 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
691 "SR_EXIT_WATERMARK_B calculated =%d\n"
692 "HW register value = 0x%x\n",
693 watermarks->b.cstate_pstate.cstate_exit_ns, prog_wm_value);
694
695 prog_wm_value = convert_and_clamp(
696 watermarks->b.cstate_pstate.pstate_change_ns,
697 refclk_mhz, 0x1fffff);
698 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B, prog_wm_value);
699 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
700 "DRAM_CLK_CHANGE_WATERMARK_B calculated =%d\n\n"
701 "HW register value = 0x%x\n",
702 watermarks->b.cstate_pstate.pstate_change_ns, prog_wm_value);
703
704 /* clock state C */
705 prog_wm_value = convert_and_clamp(
706 watermarks->c.urgent_ns, refclk_mhz, 0x1fffff);
707 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C, prog_wm_value);
708 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
709 "URGENCY_WATERMARK_C calculated =%d\n"
710 "HW register value = 0x%x\n",
711 watermarks->c.urgent_ns, prog_wm_value);
712
713
714 prog_wm_value = convert_and_clamp(
715 watermarks->c.pte_meta_urgent_ns,
716 refclk_mhz, 0x1fffff);
717 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C, prog_wm_value);
718 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
719 "PTE_META_URGENCY_WATERMARK_C calculated =%d\n"
720 "HW register value = 0x%x\n",
721 watermarks->c.pte_meta_urgent_ns, prog_wm_value);
722
723
724 prog_wm_value = convert_and_clamp(
725 watermarks->c.cstate_pstate.cstate_enter_plus_exit_ns,
726 refclk_mhz, 0x1fffff);
727 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C, prog_wm_value);
728 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
729 "SR_ENTER_WATERMARK_C calculated =%d\n"
730 "HW register value = 0x%x\n",
731 watermarks->c.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
732
733
734 prog_wm_value = convert_and_clamp(
735 watermarks->c.cstate_pstate.cstate_exit_ns,
736 refclk_mhz, 0x1fffff);
737 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C, prog_wm_value);
738 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
739 "SR_EXIT_WATERMARK_C calculated =%d\n"
740 "HW register value = 0x%x\n",
741 watermarks->c.cstate_pstate.cstate_exit_ns, prog_wm_value);
742
743
744 prog_wm_value = convert_and_clamp(
745 watermarks->c.cstate_pstate.pstate_change_ns,
746 refclk_mhz, 0x1fffff);
747 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C, prog_wm_value);
748 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
749 "DRAM_CLK_CHANGE_WATERMARK_C calculated =%d\n\n"
750 "HW register value = 0x%x\n",
751 watermarks->c.cstate_pstate.pstate_change_ns, prog_wm_value);
752
753 /* clock state D */
754 prog_wm_value = convert_and_clamp(
755 watermarks->d.urgent_ns, refclk_mhz, 0x1fffff);
756 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D, prog_wm_value);
757 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
758 "URGENCY_WATERMARK_D calculated =%d\n"
759 "HW register value = 0x%x\n",
760 watermarks->d.urgent_ns, prog_wm_value);
761
762 prog_wm_value = convert_and_clamp(
763 watermarks->d.pte_meta_urgent_ns,
764 refclk_mhz, 0x1fffff);
765 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D, prog_wm_value);
766 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
767 "PTE_META_URGENCY_WATERMARK_D calculated =%d\n"
768 "HW register value = 0x%x\n",
769 watermarks->d.pte_meta_urgent_ns, prog_wm_value);
770
771
772 prog_wm_value = convert_and_clamp(
773 watermarks->d.cstate_pstate.cstate_enter_plus_exit_ns,
774 refclk_mhz, 0x1fffff);
775 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D, prog_wm_value);
776 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
777 "SR_ENTER_WATERMARK_D calculated =%d\n"
778 "HW register value = 0x%x\n",
779 watermarks->d.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value);
780
781
782 prog_wm_value = convert_and_clamp(
783 watermarks->d.cstate_pstate.cstate_exit_ns,
784 refclk_mhz, 0x1fffff);
785 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D, prog_wm_value);
786 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
787 "SR_EXIT_WATERMARK_D calculated =%d\n"
788 "HW register value = 0x%x\n",
789 watermarks->d.cstate_pstate.cstate_exit_ns, prog_wm_value);
790
791
792 prog_wm_value = convert_and_clamp(
793 watermarks->d.cstate_pstate.pstate_change_ns,
794 refclk_mhz, 0x1fffff);
795 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D, prog_wm_value);
796 dm_logger_write(mem_input->ctx->logger, LOG_HW_MARKS,
797 "DRAM_CLK_CHANGE_WATERMARK_D calculated =%d\n"
798 "HW register value = 0x%x\n\n",
799 watermarks->d.cstate_pstate.pstate_change_ns, prog_wm_value);
800
801 REG_UPDATE(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL,
802 DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, 1);
803 REG_UPDATE(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL,
804 DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, 0);
805 REG_UPDATE(DCHUBBUB_ARB_SAT_LEVEL,
806 DCHUBBUB_ARB_SAT_LEVEL, 60 * refclk_mhz);
807 REG_UPDATE(DCHUBBUB_ARB_DF_REQ_OUTSTAND,
808 DCHUBBUB_ARB_MIN_REQ_OUTSTAND, 68);
809
810 REG_UPDATE_2(DCHUBBUB_ARB_DRAM_STATE_CNTL,
811 DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE, 0,
812 DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE, force_en);
813
814#if 0
815 REG_UPDATE_2(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL,
816 DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, 1,
817 DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, 1);
818#endif
819}
820
821static void min10_program_display_marks( 577static void min10_program_display_marks(
822 struct mem_input *mem_input, 578 struct mem_input *mem_input,
823 struct dce_watermarks nbp, 579 struct dce_watermarks nbp,
@@ -855,63 +611,6 @@ static bool min10_is_flip_pending(struct mem_input *mem_input)
855 return false; 611 return false;
856} 612}
857 613
858static void min10_update_dchub(
859 struct mem_input *mem_input,
860 struct dchub_init_data *dh_data)
861{
862 struct dcn10_mem_input *mi = TO_DCN10_MEM_INPUT(mem_input);
863 /* TODO: port code from dal2 */
864 switch (dh_data->fb_mode) {
865 case FRAME_BUFFER_MODE_ZFB_ONLY:
866 /*For ZFB case need to put DCHUB FB BASE and TOP upside down to indicate ZFB mode*/
867 REG_UPDATE(DCHUBBUB_SDPIF_FB_TOP,
868 SDPIF_FB_TOP, 0);
869
870 REG_UPDATE(DCHUBBUB_SDPIF_FB_BASE,
871 SDPIF_FB_BASE, 0x0FFFF);
872
873 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
874 SDPIF_AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
875
876 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
877 SDPIF_AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
878
879 REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
880 SDPIF_AGP_TOP, (dh_data->zfb_mc_base_addr +
881 dh_data->zfb_size_in_byte - 1) >> 22);
882 break;
883 case FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL:
884 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
885
886 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
887 SDPIF_AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
888
889 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
890 SDPIF_AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
891
892 REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
893 SDPIF_AGP_TOP, (dh_data->zfb_mc_base_addr +
894 dh_data->zfb_size_in_byte - 1) >> 22);
895 break;
896 case FRAME_BUFFER_MODE_LOCAL_ONLY:
897 /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
898 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
899 SDPIF_AGP_BASE, 0);
900
901 REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
902 SDPIF_AGP_BOT, 0X03FFFF);
903
904 REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
905 SDPIF_AGP_TOP, 0);
906 break;
907 default:
908 break;
909 }
910
911 dh_data->dchub_initialzied = true;
912 dh_data->dchub_info_valid = false;
913}
914
915struct vm_system_aperture_param { 614struct vm_system_aperture_param {
916 PHYSICAL_ADDRESS_LOC sys_default; 615 PHYSICAL_ADDRESS_LOC sys_default;
917 PHYSICAL_ADDRESS_LOC sys_low; 616 PHYSICAL_ADDRESS_LOC sys_low;
@@ -1114,8 +813,6 @@ static struct mem_input_funcs dcn10_mem_input_funcs = {
1114 min10_program_surface_config, 813 min10_program_surface_config,
1115 .mem_input_is_flip_pending = min10_is_flip_pending, 814 .mem_input_is_flip_pending = min10_is_flip_pending,
1116 .mem_input_setup = min10_setup, 815 .mem_input_setup = min10_setup,
1117 .program_watermarks = min10_program_watermarks,
1118 .mem_input_update_dchub = min10_update_dchub,
1119 .mem_input_program_pte_vm = min10_program_pte_vm, 816 .mem_input_program_pte_vm = min10_program_pte_vm,
1120 .set_blank = min10_set_blank, 817 .set_blank = min10_set_blank,
1121 .dcc_control = min10_dcc_control, 818 .dcc_control = min10_dcc_control,
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.h
index 0f4d247c4237..9130f5e0ab03 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.h
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mem_input.h
@@ -98,30 +98,6 @@
98 SRI(DCN_SURF1_TTU_CNTL0, HUBPREQ, id),\ 98 SRI(DCN_SURF1_TTU_CNTL0, HUBPREQ, id),\
99 SRI(DCN_SURF1_TTU_CNTL1, HUBPREQ, id),\ 99 SRI(DCN_SURF1_TTU_CNTL1, HUBPREQ, id),\
100 SRI(DCN_VM_MX_L1_TLB_CNTL, HUBPREQ, id),\ 100 SRI(DCN_VM_MX_L1_TLB_CNTL, HUBPREQ, id),\
101 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A),\
102 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A),\
103 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A),\
104 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A),\
105 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A),\
106 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B),\
107 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B),\
108 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B),\
109 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B),\
110 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B),\
111 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C),\
112 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C),\
113 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C),\
114 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C),\
115 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C),\
116 SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D),\
117 SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D),\
118 SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D),\
119 SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D),\
120 SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D),\
121 SR(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL),\
122 SR(DCHUBBUB_ARB_DRAM_STATE_CNTL),\
123 SR(DCHUBBUB_ARB_SAT_LEVEL),\
124 SR(DCHUBBUB_ARB_DF_REQ_OUTSTAND),\
125 /* todo: get these from GVM instead of reading registers ourselves */\ 101 /* todo: get these from GVM instead of reading registers ourselves */\
126 MMHUB_SR(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32),\ 102 MMHUB_SR(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32),\
127 MMHUB_SR(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32),\ 103 MMHUB_SR(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32),\
@@ -154,12 +130,8 @@
154 SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\ 130 SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\
155 SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\ 131 SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\
156 SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\ 132 SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\
157 SR(DCHUBBUB_SDPIF_FB_TOP),\
158 SR(DCHUBBUB_SDPIF_FB_BASE),\ 133 SR(DCHUBBUB_SDPIF_FB_BASE),\
159 SR(DCHUBBUB_SDPIF_FB_OFFSET),\ 134 SR(DCHUBBUB_SDPIF_FB_OFFSET)
160 SR(DCHUBBUB_SDPIF_AGP_BASE),\
161 SR(DCHUBBUB_SDPIF_AGP_BOT),\
162 SR(DCHUBBUB_SDPIF_AGP_TOP)
163 135
164struct dcn_mi_registers { 136struct dcn_mi_registers {
165 uint32_t DCHUBP_CNTL; 137 uint32_t DCHUBP_CNTL;
@@ -248,42 +220,14 @@ struct dcn_mi_registers {
248 uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB; 220 uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;
249 uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR; 221 uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR;
250 uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR; 222 uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR;
251 uint32_t DCHUBBUB_SDPIF_FB_TOP;
252 uint32_t DCHUBBUB_SDPIF_FB_BASE; 223 uint32_t DCHUBBUB_SDPIF_FB_BASE;
253 uint32_t DCHUBBUB_SDPIF_FB_OFFSET; 224 uint32_t DCHUBBUB_SDPIF_FB_OFFSET;
254 uint32_t DCHUBBUB_SDPIF_AGP_BASE;
255 uint32_t DCHUBBUB_SDPIF_AGP_BOT;
256 uint32_t DCHUBBUB_SDPIF_AGP_TOP;
257 uint32_t DCN_VM_FB_LOCATION_TOP; 225 uint32_t DCN_VM_FB_LOCATION_TOP;
258 uint32_t DCN_VM_FB_LOCATION_BASE; 226 uint32_t DCN_VM_FB_LOCATION_BASE;
259 uint32_t DCN_VM_FB_OFFSET; 227 uint32_t DCN_VM_FB_OFFSET;
260 uint32_t DCN_VM_AGP_BASE; 228 uint32_t DCN_VM_AGP_BASE;
261 uint32_t DCN_VM_AGP_BOT; 229 uint32_t DCN_VM_AGP_BOT;
262 uint32_t DCN_VM_AGP_TOP; 230 uint32_t DCN_VM_AGP_TOP;
263 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A;
264 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A;
265 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A;
266 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A;
267 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;
268 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B;
269 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B;
270 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B;
271 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B;
272 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;
273 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C;
274 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C;
275 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C;
276 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C;
277 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;
278 uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D;
279 uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D;
280 uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D;
281 uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D;
282 uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;
283 uint32_t DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL;
284 uint32_t DCHUBBUB_ARB_DRAM_STATE_CNTL;
285 uint32_t DCHUBBUB_ARB_SAT_LEVEL;
286 uint32_t DCHUBBUB_ARB_DF_REQ_OUTSTAND;
287 231
288 /* GC registers. read only. temporary hack */ 232 /* GC registers. read only. temporary hack */
289 uint32_t VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32; 233 uint32_t VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32;
@@ -418,13 +362,7 @@ struct dcn_mi_registers {
418 MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\ 362 MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\
419 MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\ 363 MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\
420 MI_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, mask_sh),\ 364 MI_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, mask_sh),\
421 MI_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, mask_sh),\ 365 MI_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, mask_sh)
422 MI_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, mask_sh),\
423 MI_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, mask_sh),\
424 MI_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE, mask_sh),\
425 MI_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE, mask_sh),\
426 MI_SF(DCHUBBUB_ARB_SAT_LEVEL, DCHUBBUB_ARB_SAT_LEVEL, mask_sh),\
427 MI_SF(DCHUBBUB_ARB_DF_REQ_OUTSTAND, DCHUBBUB_ARB_MIN_REQ_OUTSTAND, mask_sh)
428 366
429#define MI_MASK_SH_LIST_DCN10(mask_sh)\ 367#define MI_MASK_SH_LIST_DCN10(mask_sh)\
430 MI_MASK_SH_LIST_DCN(mask_sh),\ 368 MI_MASK_SH_LIST_DCN(mask_sh),\
@@ -443,12 +381,8 @@ struct dcn_mi_registers {
443 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\ 381 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\
444 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\ 382 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\
445 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\ 383 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\
446 MI_SF(DCHUBBUB_SDPIF_FB_TOP, SDPIF_FB_TOP, mask_sh),\
447 MI_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh),\ 384 MI_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh),\
448 MI_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh),\ 385 MI_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh),\
449 MI_SF(DCHUBBUB_SDPIF_AGP_BASE, SDPIF_AGP_BASE, mask_sh),\
450 MI_SF(DCHUBBUB_SDPIF_AGP_BOT, SDPIF_AGP_BOT, mask_sh),\
451 MI_SF(DCHUBBUB_SDPIF_AGP_TOP, SDPIF_AGP_TOP, mask_sh),\
452 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\ 386 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
453 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\ 387 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
454 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\ 388 MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\
@@ -611,12 +545,6 @@ struct dcn_mi_registers {
611 type AGP_BASE;\ 545 type AGP_BASE;\
612 type AGP_BOT;\ 546 type AGP_BOT;\
613 type AGP_TOP;\ 547 type AGP_TOP;\
614 type DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST;\
615 type DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE;\
616 type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE;\
617 type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE;\
618 type DCHUBBUB_ARB_SAT_LEVEL;\
619 type DCHUBBUB_ARB_MIN_REQ_OUTSTAND;\
620 /* todo: get these from GVM instead of reading registers ourselves */\ 548 /* todo: get these from GVM instead of reading registers ourselves */\
621 type PAGE_DIRECTORY_ENTRY_HI32;\ 549 type PAGE_DIRECTORY_ENTRY_HI32;\
622 type PAGE_DIRECTORY_ENTRY_LO32;\ 550 type PAGE_DIRECTORY_ENTRY_LO32;\
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h b/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h
index 1b7d151a66f8..fd3ce742af2c 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h
@@ -75,11 +75,6 @@ struct mem_input {
75 75
76struct mem_input_funcs { 76struct mem_input_funcs {
77#if defined(CONFIG_DRM_AMD_DC_DCN1_0) 77#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
78 void (*program_watermarks)(
79 struct mem_input *mem_input,
80 struct dcn_watermark_set *watermarks,
81 unsigned int refclk_period_ns);
82
83 void (*mem_input_setup)( 78 void (*mem_input_setup)(
84 struct mem_input *mem_input, 79 struct mem_input *mem_input,
85 struct _vcs_dpi_display_dlg_regs_st *dlg_regs, 80 struct _vcs_dpi_display_dlg_regs_st *dlg_regs,
@@ -143,7 +138,7 @@ struct mem_input_funcs {
143 bool (*mem_input_is_flip_pending)(struct mem_input *mem_input); 138 bool (*mem_input_is_flip_pending)(struct mem_input *mem_input);
144 139
145 void (*mem_input_update_dchub)(struct mem_input *mem_input, 140 void (*mem_input_update_dchub)(struct mem_input *mem_input,
146 struct dchub_init_data *dh_data); 141 struct dchub_init_data *dh_data);
147 142
148 void (*set_blank)(struct mem_input *mi, bool blank); 143 void (*set_blank)(struct mem_input *mi, bool blank);
149}; 144};
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
index 22aca5a375ae..d865df802c88 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw_sequencer.h
@@ -79,6 +79,10 @@ struct hw_sequencer_funcs {
79 const struct core_dc *dc, 79 const struct core_dc *dc,
80 struct pipe_ctx *pipe_ctx); 80 struct pipe_ctx *pipe_ctx);
81 81
82 void (*update_dchub)(
83 struct dce_hwseq *hws,
84 struct dchub_init_data *dh_data);
85
82 void (*update_pending_status)( 86 void (*update_pending_status)(
83 struct pipe_ctx *pipe_ctx); 87 struct pipe_ctx *pipe_ctx);
84 88