diff options
author | Zeyu Fan <Zeyu.Fan@amd.com> | 2017-07-23 18:30:15 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-26 18:15:34 -0400 |
commit | 08b1688620426ad3e09fc7a98aabc28dda30cde6 (patch) | |
tree | 921ed437878fc27907316489736a05a76a1ad917 | |
parent | c8d7bd8bd0c08aa9115589d264e274ed7fdf4c2e (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>
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 | ||
413 | struct dce_hwseq_shift { | 521 | struct 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 | ||
420 | struct dce_hwseq_mask { | 526 | struct 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 | ||
659 | static 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 | |||
710 | static struct mem_input_funcs dce_mi_funcs = { | 659 | static 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 | |||
40 | struct dce120_hw_seq_reg_offsets { | 50 | struct 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 | ||
197 | static 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 | |||
187 | bool dce120_hw_sequencer_construct(struct core_dc *dc) | 250 | bool 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 | ||
600 | static const struct dce_hwseq_registers hwseq_reg = { | 600 | static const struct dce_hwseq_registers hwseq_reg = { |
601 | HWSEQ_DCE112_REG_LIST() | 601 | HWSEQ_DCE120_REG_LIST() |
602 | }; | 602 | }; |
603 | 603 | ||
604 | static const struct dce_hwseq_shift hwseq_shift = { | 604 | static 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 | ||
221 | static 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 | |||
236 | static 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 | |||
465 | static 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 | |||
221 | static void hubp_pg_control( | 521 | static 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 | ||
577 | static 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 | |||
592 | static 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 | |||
821 | static void min10_program_display_marks( | 577 | static 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 | ||
858 | static 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 | |||
915 | struct vm_system_aperture_param { | 614 | struct 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 | ||
164 | struct dcn_mi_registers { | 136 | struct 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 | ||
76 | struct mem_input_funcs { | 76 | struct 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 | ||