Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: Clean FPGA code in dc

[Why]
Drop dead code for Linux.

[How]
Remove all IS_FPGA_MAXIMUS_DC and IS_DIAG_DC

Reviewed-by: Ariel Bernstein <eric.bernstein@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Qingqing Zhuo and committed by
Alex Deucher
25879d7b 7e60ab4e

+811 -1333
+8 -12
drivers/gpu/drm/amd/display/dc/clk_mgr/dce112/dce112_clk_mgr.c
··· 111 111 112 112 bp->funcs->set_dce_clock(bp, &dce_clk_params); 113 113 114 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 115 - if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 116 - if (clk_mgr_dce->dfs_bypass_disp_clk != actual_clock) 117 - dmcu->funcs->set_psr_wait_loop(dmcu, 118 - actual_clock / 1000 / 7); 119 - } 114 + if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 115 + if (clk_mgr_dce->dfs_bypass_disp_clk != actual_clock) 116 + dmcu->funcs->set_psr_wait_loop(dmcu, 117 + actual_clock / 1000 / 7); 120 118 } 121 119 122 120 clk_mgr_dce->dfs_bypass_disp_clk = actual_clock; ··· 151 153 clk_mgr->cur_min_clks_state = DM_PP_CLOCKS_STATE_NOMINAL; 152 154 153 155 154 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 155 - if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 156 - if (clk_mgr->dfs_bypass_disp_clk != actual_clock) 157 - dmcu->funcs->set_psr_wait_loop(dmcu, 158 - actual_clock / 1000 / 7); 159 - } 156 + if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 157 + if (clk_mgr->dfs_bypass_disp_clk != actual_clock) 158 + dmcu->funcs->set_psr_wait_loop(dmcu, 159 + actual_clock / 1000 / 7); 160 160 } 161 161 162 162 clk_mgr->dfs_bypass_disp_clk = actual_clock;
+4 -6
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn10/rv1_clk_mgr_vbios_smu.c
··· 135 135 VBIOSSMC_MSG_SetDispclkFreq, 136 136 khz_to_mhz_ceil(requested_dispclk_khz)); 137 137 138 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 139 - if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 140 - if (clk_mgr->dfs_bypass_disp_clk != actual_dispclk_set_mhz) 141 - dmcu->funcs->set_psr_wait_loop(dmcu, 142 - actual_dispclk_set_mhz / 7); 143 - } 138 + if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 139 + if (clk_mgr->dfs_bypass_disp_clk != actual_dispclk_set_mhz) 140 + dmcu->funcs->set_psr_wait_loop(dmcu, 141 + actual_dispclk_set_mhz / 7); 144 142 } 145 143 146 144 return actual_dispclk_set_mhz * 1000;
+31 -35
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn20/dcn20_clk_mgr.c
··· 531 531 struct pp_smu_funcs *pp_smu, 532 532 struct dccg *dccg) 533 533 { 534 + int dprefclk_did; 535 + int target_div; 536 + uint32_t pll_req_reg; 537 + struct fixed31_32 pll_req; 538 + 534 539 clk_mgr->base.ctx = ctx; 535 540 clk_mgr->pp_smu = pp_smu; 536 541 clk_mgr->base.funcs = &dcn2_funcs; ··· 552 547 553 548 clk_mgr->base.dprefclk_khz = 700000; // 700 MHz planned if VCO is 3.85 GHz, will be retrieved 554 549 555 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 556 - dcn2_funcs.update_clocks = dcn2_update_clocks_fpga; 550 + /* DFS Slice 2 should be used for DPREFCLK */ 551 + dprefclk_did = REG_READ(CLK3_CLK2_DFS_CNTL); 552 + /* Convert DPREFCLK DFS Slice DID to actual divider */ 553 + target_div = dentist_get_divider_from_did(dprefclk_did); 554 + /* get FbMult value */ 555 + pll_req_reg = REG_READ(CLK3_CLK_PLL_REQ); 556 + 557 + /* set up a fixed-point number 558 + * this works because the int part is on the right edge of the register 559 + * and the frac part is on the left edge 560 + */ 561 + 562 + pll_req = dc_fixpt_from_int(pll_req_reg & clk_mgr->clk_mgr_mask->FbMult_int); 563 + pll_req.value |= pll_req_reg & clk_mgr->clk_mgr_mask->FbMult_frac; 564 + 565 + /* multiply by REFCLK period */ 566 + pll_req = dc_fixpt_mul_int(pll_req, 100000); 567 + 568 + /* integer part is now VCO frequency in kHz */ 569 + clk_mgr->base.dentist_vco_freq_khz = dc_fixpt_floor(pll_req); 570 + 571 + /* in case we don't get a value from the register, use default */ 572 + if (clk_mgr->base.dentist_vco_freq_khz == 0) 557 573 clk_mgr->base.dentist_vco_freq_khz = 3850000; 558 574 559 - } else { 560 - /* DFS Slice 2 should be used for DPREFCLK */ 561 - int dprefclk_did = REG_READ(CLK3_CLK2_DFS_CNTL); 562 - /* Convert DPREFCLK DFS Slice DID to actual divider*/ 563 - int target_div = dentist_get_divider_from_did(dprefclk_did); 564 - 565 - /* get FbMult value */ 566 - uint32_t pll_req_reg = REG_READ(CLK3_CLK_PLL_REQ); 567 - struct fixed31_32 pll_req; 568 - 569 - /* set up a fixed-point number 570 - * this works because the int part is on the right edge of the register 571 - * and the frac part is on the left edge 572 - */ 573 - 574 - pll_req = dc_fixpt_from_int(pll_req_reg & clk_mgr->clk_mgr_mask->FbMult_int); 575 - pll_req.value |= pll_req_reg & clk_mgr->clk_mgr_mask->FbMult_frac; 576 - 577 - /* multiply by REFCLK period */ 578 - pll_req = dc_fixpt_mul_int(pll_req, 100000); 579 - 580 - /* integer part is now VCO frequency in kHz */ 581 - clk_mgr->base.dentist_vco_freq_khz = dc_fixpt_floor(pll_req); 582 - 583 - /* in case we don't get a value from the register, use default */ 584 - if (clk_mgr->base.dentist_vco_freq_khz == 0) 585 - clk_mgr->base.dentist_vco_freq_khz = 3850000; 586 - 587 - /* Calculate the DPREFCLK in kHz.*/ 588 - clk_mgr->base.dprefclk_khz = (DENTIST_DIVIDER_RANGE_SCALE_FACTOR 589 - * clk_mgr->base.dentist_vco_freq_khz) / target_div; 590 - } 575 + /* Calculate the DPREFCLK in kHz.*/ 576 + clk_mgr->base.dprefclk_khz = (DENTIST_DIVIDER_RANGE_SCALE_FACTOR 577 + * clk_mgr->base.dentist_vco_freq_khz) / target_div; 591 578 //Integrated_info table does not exist on dGPU projects so should not be referenced 592 579 //anywhere in code for dGPUs. 593 580 //Also there is no plan for now that DFS BYPASS will be used on NV10/12/14. ··· 587 590 588 591 dce_clock_read_ss_info(clk_mgr); 589 592 } 590 -
+9 -15
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn201/dcn201_clk_mgr.c
··· 190 190 clk_mgr->dprefclk_ss_divider = 1000; 191 191 clk_mgr->ss_on_dprefclk = false; 192 192 193 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 194 - dcn201_funcs.update_clocks = dcn2_update_clocks_fpga; 193 + clk_mgr->base.dprefclk_khz = REG_READ(CLK4_CLK2_CURRENT_CNT); 194 + clk_mgr->base.dprefclk_khz *= 100; 195 + 196 + if (clk_mgr->base.dprefclk_khz == 0) 195 197 clk_mgr->base.dprefclk_khz = 600000; 198 + 199 + REG_GET(CLK4_CLK_PLL_REQ, FbMult_int, &clk_mgr->base.dentist_vco_freq_khz); 200 + clk_mgr->base.dentist_vco_freq_khz *= 100000; 201 + 202 + if (clk_mgr->base.dentist_vco_freq_khz == 0) 196 203 clk_mgr->base.dentist_vco_freq_khz = 3000000; 197 - } else { 198 - clk_mgr->base.dprefclk_khz = REG_READ(CLK4_CLK2_CURRENT_CNT); 199 - clk_mgr->base.dprefclk_khz *= 100; 200 - 201 - if (clk_mgr->base.dprefclk_khz == 0) 202 - clk_mgr->base.dprefclk_khz = 600000; 203 - 204 - REG_GET(CLK4_CLK_PLL_REQ, FbMult_int, &clk_mgr->base.dentist_vco_freq_khz); 205 - clk_mgr->base.dentist_vco_freq_khz *= 100000; 206 - 207 - if (clk_mgr->base.dentist_vco_freq_khz == 0) 208 - clk_mgr->base.dentist_vco_freq_khz = 3000000; 209 - } 210 204 211 205 if (!debug->disable_dfs_bypass && bp->integrated_info) 212 206 if (bp->integrated_info->gpu_cap_info & DFS_BYPASS_ENABLE)
+32 -39
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
··· 705 705 struct dpm_clocks clock_table = { 0 }; 706 706 enum pp_smu_status status = 0; 707 707 int is_green_sardine = 0; 708 + struct clk_log_info log_info = {0}; 708 709 709 710 #if defined(CONFIG_DRM_AMD_DC_FP) 710 711 is_green_sardine = ASICREV_IS_GREEN_SARDINE(ctx->asic_id.hw_internal_rev); ··· 726 725 727 726 clk_mgr->smu_ver = rn_vbios_smu_get_smu_version(clk_mgr); 728 727 729 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 730 - dcn21_funcs.update_clocks = dcn2_update_clocks_fpga; 728 + clk_mgr->periodic_retraining_disabled = rn_vbios_smu_is_periodic_retraining_disabled(clk_mgr); 729 + 730 + /* SMU Version 55.51.0 and up no longer have an issue 731 + * that needs to limit minimum dispclk */ 732 + if (clk_mgr->smu_ver >= SMU_VER_55_51_0) 733 + debug->min_disp_clk_khz = 0; 734 + 735 + /* TODO: Check we get what we expect during bringup */ 736 + clk_mgr->base.dentist_vco_freq_khz = get_vco_frequency_from_reg(clk_mgr); 737 + 738 + /* in case we don't get a value from the register, use default */ 739 + if (clk_mgr->base.dentist_vco_freq_khz == 0) 731 740 clk_mgr->base.dentist_vco_freq_khz = 3600000; 732 - } else { 733 - struct clk_log_info log_info = {0}; 734 741 735 - clk_mgr->periodic_retraining_disabled = rn_vbios_smu_is_periodic_retraining_disabled(clk_mgr); 736 - 737 - /* SMU Version 55.51.0 and up no longer have an issue 738 - * that needs to limit minimum dispclk */ 739 - if (clk_mgr->smu_ver >= SMU_VER_55_51_0) 740 - debug->min_disp_clk_khz = 0; 741 - 742 - /* TODO: Check we get what we expect during bringup */ 743 - clk_mgr->base.dentist_vco_freq_khz = get_vco_frequency_from_reg(clk_mgr); 744 - 745 - /* in case we don't get a value from the register, use default */ 746 - if (clk_mgr->base.dentist_vco_freq_khz == 0) 747 - clk_mgr->base.dentist_vco_freq_khz = 3600000; 748 - 749 - if (ctx->dc_bios->integrated_info->memory_type == LpDdr4MemType) { 750 - if (clk_mgr->periodic_retraining_disabled) { 751 - rn_bw_params.wm_table = lpddr4_wm_table_with_disabled_ppt; 752 - } else { 753 - if (is_green_sardine) 754 - rn_bw_params.wm_table = lpddr4_wm_table_gs; 755 - else 756 - rn_bw_params.wm_table = lpddr4_wm_table_rn; 757 - } 742 + if (ctx->dc_bios->integrated_info->memory_type == LpDdr4MemType) { 743 + if (clk_mgr->periodic_retraining_disabled) { 744 + rn_bw_params.wm_table = lpddr4_wm_table_with_disabled_ppt; 758 745 } else { 759 746 if (is_green_sardine) 760 - rn_bw_params.wm_table = ddr4_wm_table_gs; 761 - else { 762 - if (ctx->dc->config.is_single_rank_dimm) 763 - rn_bw_params.wm_table = ddr4_1R_wm_table_rn; 764 - else 765 - rn_bw_params.wm_table = ddr4_wm_table_rn; 766 - } 747 + rn_bw_params.wm_table = lpddr4_wm_table_gs; 748 + else 749 + rn_bw_params.wm_table = lpddr4_wm_table_rn; 767 750 } 768 - /* Saved clocks configured at boot for debug purposes */ 769 - rn_dump_clk_registers(&clk_mgr->base.boot_snapshot, &clk_mgr->base, &log_info); 751 + } else { 752 + if (is_green_sardine) 753 + rn_bw_params.wm_table = ddr4_wm_table_gs; 754 + else { 755 + if (ctx->dc->config.is_single_rank_dimm) 756 + rn_bw_params.wm_table = ddr4_1R_wm_table_rn; 757 + else 758 + rn_bw_params.wm_table = ddr4_wm_table_rn; 759 + } 770 760 } 761 + /* Saved clocks configured at boot for debug purposes */ 762 + rn_dump_clk_registers(&clk_mgr->base.boot_snapshot, &clk_mgr->base, &log_info); 771 763 772 764 clk_mgr->base.dprefclk_khz = 600000; 773 765 dce_clock_read_ss_info(clk_mgr); ··· 780 786 } 781 787 } 782 788 783 - if (!IS_FPGA_MAXIMUS_DC(ctx->dce_environment) && clk_mgr->smu_ver >= 0x00371500) { 784 - /* enable powerfeatures when displaycount goes to 0 */ 789 + /* enable powerfeatures when displaycount goes to 0 */ 790 + if (clk_mgr->smu_ver >= 0x00371500) 785 791 rn_vbios_smu_enable_48mhz_tmdp_refclk_pwrdwn(clk_mgr, !debug->disable_48mhz_pwrdwn); 786 - } 787 792 } 788 793
+6 -11
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr_vbios_smu.c
··· 147 147 VBIOSSMC_MSG_SetDispclkFreq, 148 148 khz_to_mhz_ceil(requested_dispclk_khz)); 149 149 150 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 151 - if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 152 - if (clk_mgr->dfs_bypass_disp_clk != actual_dispclk_set_mhz) 153 - dmcu->funcs->set_psr_wait_loop(dmcu, 154 - actual_dispclk_set_mhz / 7); 155 - } 150 + if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) { 151 + if (clk_mgr->dfs_bypass_disp_clk != actual_dispclk_set_mhz) 152 + dmcu->funcs->set_psr_wait_loop(dmcu, 153 + actual_dispclk_set_mhz / 7); 156 154 } 157 155 158 156 // pmfw always set clock more than or equal requested clock 159 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) 160 - ASSERT(actual_dispclk_set_mhz >= khz_to_mhz_ceil(requested_dispclk_khz)); 157 + ASSERT(actual_dispclk_set_mhz >= khz_to_mhz_ceil(requested_dispclk_khz)); 161 158 162 159 return actual_dispclk_set_mhz * 1000; 163 160 } ··· 218 221 int rn_vbios_smu_set_dppclk(struct clk_mgr_internal *clk_mgr, int requested_dpp_khz) 219 222 { 220 223 int actual_dppclk_set_mhz = -1; 221 - struct dc *dc = clk_mgr->base.ctx->dc; 222 224 223 225 actual_dppclk_set_mhz = rn_vbios_smu_send_msg_with_param( 224 226 clk_mgr, 225 227 VBIOSSMC_MSG_SetDppclkFreq, 226 228 khz_to_mhz_ceil(requested_dpp_khz)); 227 229 228 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) 229 - ASSERT(actual_dppclk_set_mhz >= khz_to_mhz_ceil(requested_dpp_khz)); 230 + ASSERT(actual_dppclk_set_mhz >= khz_to_mhz_ceil(requested_dpp_khz)); 230 231 231 232 return actual_dppclk_set_mhz * 1000; 232 233 }
+13 -19
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c
··· 521 521 struct pp_smu_funcs *pp_smu, 522 522 struct dccg *dccg) 523 523 { 524 + struct clk_state_registers_and_bypass s = { 0 }; 525 + 524 526 clk_mgr->base.ctx = ctx; 525 527 clk_mgr->base.funcs = &dcn3_funcs; 526 528 clk_mgr->regs = &clk_mgr_regs; ··· 539 537 540 538 clk_mgr->base.dprefclk_khz = 730000; // 700 MHz planned if VCO is 3.85 GHz, will be retrieved 541 539 542 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 543 - clk_mgr->base.funcs = &dcn3_fpga_funcs; 540 + /* integer part is now VCO frequency in kHz */ 541 + clk_mgr->base.dentist_vco_freq_khz = dcn30_get_vco_frequency_from_reg(clk_mgr); 542 + 543 + /* in case we don't get a value from the register, use default */ 544 + if (clk_mgr->base.dentist_vco_freq_khz == 0) 544 545 clk_mgr->base.dentist_vco_freq_khz = 3650000; 546 + /* Convert dprefclk units from MHz to KHz */ 547 + /* Value already divided by 10, some resolution lost */ 545 548 546 - } else { 547 - struct clk_state_registers_and_bypass s = { 0 }; 548 - 549 - /* integer part is now VCO frequency in kHz */ 550 - clk_mgr->base.dentist_vco_freq_khz = dcn30_get_vco_frequency_from_reg(clk_mgr); 551 - 552 - /* in case we don't get a value from the register, use default */ 553 - if (clk_mgr->base.dentist_vco_freq_khz == 0) 554 - clk_mgr->base.dentist_vco_freq_khz = 3650000; 555 - /* Convert dprefclk units from MHz to KHz */ 556 - /* Value already divided by 10, some resolution lost */ 557 - 558 - /*TODO: uncomment assert once dcn3_dump_clk_registers is implemented */ 559 - //ASSERT(s.dprefclk != 0); 560 - if (s.dprefclk != 0) 561 - clk_mgr->base.dprefclk_khz = s.dprefclk * 1000; 562 - } 549 + /*TODO: uncomment assert once dcn3_dump_clk_registers is implemented */ 550 + //ASSERT(s.dprefclk != 0); 551 + if (s.dprefclk != 0) 552 + clk_mgr->base.dprefclk_khz = s.dprefclk * 1000; 563 553 564 554 clk_mgr->dfs_bypass_enabled = false; 565 555
+20 -34
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn301/vg_clk_mgr.c
··· 117 117 118 118 display_count = vg_get_active_display_cnt_wa(dc, context); 119 119 /* if we can go lower, go lower */ 120 - if (display_count == 0 && !IS_DIAG_DC(dc->ctx->dce_environment)) { 120 + if (display_count == 0) { 121 121 union display_idle_optimization_u idle_info = { 0 }; 122 122 123 123 idle_info.idle_info.df_request_disabled = 1; ··· 151 151 } 152 152 153 153 // workaround: Limit dppclk to 100Mhz to avoid lower eDP panel switch to plus 4K monitor underflow. 154 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 155 - if (new_clocks->dppclk_khz < 100000) 156 - new_clocks->dppclk_khz = 100000; 157 - } 154 + if (new_clocks->dppclk_khz < 100000) 155 + new_clocks->dppclk_khz = 100000; 158 156 159 157 if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { 160 158 if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) ··· 662 664 struct dccg *dccg) 663 665 { 664 666 struct smu_dpm_clks smu_dpm_clks = { 0 }; 667 + struct clk_log_info log_info = {0}; 665 668 666 669 clk_mgr->base.base.ctx = ctx; 667 670 clk_mgr->base.base.funcs = &vg_funcs; ··· 702 703 703 704 ASSERT(smu_dpm_clks.dpm_clks); 704 705 705 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 706 - vg_funcs.update_clocks = dcn2_update_clocks_fpga; 706 + clk_mgr->base.smu_ver = dcn301_smu_get_smu_version(&clk_mgr->base); 707 + 708 + if (clk_mgr->base.smu_ver) 709 + clk_mgr->base.smu_present = true; 710 + 711 + /* TODO: Check we get what we expect during bringup */ 712 + clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 713 + 714 + /* in case we don't get a value from the register, use default */ 715 + if (clk_mgr->base.base.dentist_vco_freq_khz == 0) 707 716 clk_mgr->base.base.dentist_vco_freq_khz = 3600000; 717 + 718 + if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 719 + vg_bw_params.wm_table = lpddr5_wm_table; 708 720 } else { 709 - struct clk_log_info log_info = {0}; 710 - 711 - clk_mgr->base.smu_ver = dcn301_smu_get_smu_version(&clk_mgr->base); 712 - 713 - if (clk_mgr->base.smu_ver) 714 - clk_mgr->base.smu_present = true; 715 - 716 - /* TODO: Check we get what we expect during bringup */ 717 - clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 718 - 719 - /* in case we don't get a value from the register, use default */ 720 - if (clk_mgr->base.base.dentist_vco_freq_khz == 0) 721 - clk_mgr->base.base.dentist_vco_freq_khz = 3600000; 722 - 723 - if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 724 - vg_bw_params.wm_table = lpddr5_wm_table; 725 - } else { 726 - vg_bw_params.wm_table = ddr4_wm_table; 727 - } 728 - /* Saved clocks configured at boot for debug purposes */ 729 - vg_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, &clk_mgr->base.base, &log_info); 721 + vg_bw_params.wm_table = ddr4_wm_table; 730 722 } 723 + /* Saved clocks configured at boot for debug purposes */ 724 + vg_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, &clk_mgr->base.base, &log_info); 731 725 732 726 clk_mgr->base.base.dprefclk_khz = 600000; 733 727 dce_clock_read_ss_info(&clk_mgr->base); ··· 738 746 if (smu_dpm_clks.dpm_clks && smu_dpm_clks.mc_address.quad_part != 0) 739 747 dm_helpers_free_gpu_mem(clk_mgr->base.base.ctx, DC_MEM_ALLOC_TYPE_FRAME_BUFFER, 740 748 smu_dpm_clks.dpm_clks); 741 - /* 742 - if (!IS_FPGA_MAXIMUS_DC(ctx->dce_environment) && clk_mgr->base.smu_ver) { 743 - enable powerfeatures when displaycount goes to 0 744 - dcn301_smu_enable_phy_refclk_pwrdwn(clk_mgr, !debug->disable_48mhz_pwrdwn); 745 - } 746 - */ 747 749 } 748 750 749 751 void vg_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr_int)
+17 -25
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c
··· 205 205 } 206 206 207 207 // workaround: Limit dppclk to 100Mhz to avoid lower eDP panel switch to plus 4K monitor underflow. 208 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 209 - if (new_clocks->dppclk_khz < 100000) 210 - new_clocks->dppclk_khz = 100000; 211 - } 208 + if (new_clocks->dppclk_khz < 100000) 209 + new_clocks->dppclk_khz = 100000; 212 210 213 211 if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { 214 212 if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) ··· 670 672 struct dccg *dccg) 671 673 { 672 674 struct dcn31_smu_dpm_clks smu_dpm_clks = { 0 }; 675 + struct clk_log_info log_info = {0}; 673 676 674 677 clk_mgr->base.base.ctx = ctx; 675 678 clk_mgr->base.base.funcs = &dcn31_funcs; ··· 710 711 711 712 ASSERT(smu_dpm_clks.dpm_clks); 712 713 713 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 714 - clk_mgr->base.base.funcs = &dcn3_fpga_funcs; 714 + clk_mgr->base.smu_ver = dcn31_smu_get_smu_version(&clk_mgr->base); 715 + 716 + if (clk_mgr->base.smu_ver) 717 + clk_mgr->base.smu_present = true; 718 + 719 + /* TODO: Check we get what we expect during bringup */ 720 + clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 721 + 722 + if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 723 + dcn31_bw_params.wm_table = lpddr5_wm_table; 715 724 } else { 716 - struct clk_log_info log_info = {0}; 717 - 718 - clk_mgr->base.smu_ver = dcn31_smu_get_smu_version(&clk_mgr->base); 719 - 720 - if (clk_mgr->base.smu_ver) 721 - clk_mgr->base.smu_present = true; 722 - 723 - /* TODO: Check we get what we expect during bringup */ 724 - clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 725 - 726 - if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 727 - dcn31_bw_params.wm_table = lpddr5_wm_table; 728 - } else { 729 - dcn31_bw_params.wm_table = ddr5_wm_table; 730 - } 731 - /* Saved clocks configured at boot for debug purposes */ 732 - dcn31_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 733 - &clk_mgr->base.base, &log_info); 734 - 725 + dcn31_bw_params.wm_table = ddr5_wm_table; 735 726 } 727 + /* Saved clocks configured at boot for debug purposes */ 728 + dcn31_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 729 + &clk_mgr->base.base, &log_info); 736 730 737 731 clk_mgr->base.base.dprefclk_khz = 600000; 738 732 clk_mgr->base.base.clks.ref_dtbclk_khz = 600000;
+15 -23
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c
··· 241 241 } 242 242 243 243 // workaround: Limit dppclk to 100Mhz to avoid lower eDP panel switch to plus 4K monitor underflow. 244 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 245 - if (new_clocks->dppclk_khz < 100000) 246 - new_clocks->dppclk_khz = 100000; 247 - } 244 + if (new_clocks->dppclk_khz < 100000) 245 + new_clocks->dppclk_khz = 100000; 248 246 249 247 if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { 250 248 if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) ··· 722 724 struct dccg *dccg) 723 725 { 724 726 struct dcn314_smu_dpm_clks smu_dpm_clks = { 0 }; 727 + struct clk_log_info log_info = {0}; 725 728 726 729 clk_mgr->base.base.ctx = ctx; 727 730 clk_mgr->base.base.funcs = &dcn314_funcs; ··· 762 763 763 764 ASSERT(smu_dpm_clks.dpm_clks); 764 765 765 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 766 - clk_mgr->base.base.funcs = &dcn3_fpga_funcs; 767 - } else { 768 - struct clk_log_info log_info = {0}; 766 + clk_mgr->base.smu_ver = dcn314_smu_get_smu_version(&clk_mgr->base); 769 767 770 - clk_mgr->base.smu_ver = dcn314_smu_get_smu_version(&clk_mgr->base); 768 + if (clk_mgr->base.smu_ver) 769 + clk_mgr->base.smu_present = true; 771 770 772 - if (clk_mgr->base.smu_ver) 773 - clk_mgr->base.smu_present = true; 771 + /* TODO: Check we get what we expect during bringup */ 772 + clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 774 773 775 - /* TODO: Check we get what we expect during bringup */ 776 - clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 774 + if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) 775 + dcn314_bw_params.wm_table = lpddr5_wm_table; 776 + else 777 + dcn314_bw_params.wm_table = ddr5_wm_table; 777 778 778 - if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) 779 - dcn314_bw_params.wm_table = lpddr5_wm_table; 780 - else 781 - dcn314_bw_params.wm_table = ddr5_wm_table; 782 - 783 - /* Saved clocks configured at boot for debug purposes */ 784 - dcn314_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 785 - &clk_mgr->base.base, &log_info); 786 - 787 - } 779 + /* Saved clocks configured at boot for debug purposes */ 780 + dcn314_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 781 + &clk_mgr->base.base, &log_info); 788 782 789 783 clk_mgr->base.base.dprefclk_khz = 600000; 790 784 clk_mgr->base.base.clks.ref_dtbclk_khz = 600000;
+16 -24
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn315/dcn315_clk_mgr.c
··· 184 184 } 185 185 186 186 // workaround: Limit dppclk to 100Mhz to avoid lower eDP panel switch to plus 4K monitor underflow. 187 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 188 - if (new_clocks->dppclk_khz < MIN_DPP_DISP_CLK) 189 - new_clocks->dppclk_khz = MIN_DPP_DISP_CLK; 190 - if (new_clocks->dispclk_khz < MIN_DPP_DISP_CLK) 191 - new_clocks->dispclk_khz = MIN_DPP_DISP_CLK; 192 - } 187 + if (new_clocks->dppclk_khz < MIN_DPP_DISP_CLK) 188 + new_clocks->dppclk_khz = MIN_DPP_DISP_CLK; 189 + if (new_clocks->dispclk_khz < MIN_DPP_DISP_CLK) 190 + new_clocks->dispclk_khz = MIN_DPP_DISP_CLK; 193 191 194 192 if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { 195 193 if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) ··· 598 600 struct dccg *dccg) 599 601 { 600 602 struct dcn315_smu_dpm_clks smu_dpm_clks = { 0 }; 603 + struct clk_log_info log_info = {0}; 601 604 602 605 clk_mgr->base.base.ctx = ctx; 603 606 clk_mgr->base.base.funcs = &dcn315_funcs; ··· 638 639 639 640 ASSERT(smu_dpm_clks.dpm_clks); 640 641 641 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 642 - clk_mgr->base.base.funcs = &dcn3_fpga_funcs; 642 + clk_mgr->base.smu_ver = dcn315_smu_get_smu_version(&clk_mgr->base); 643 + 644 + if (clk_mgr->base.smu_ver > 0) 645 + clk_mgr->base.smu_present = true; 646 + 647 + if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 648 + dcn315_bw_params.wm_table = lpddr5_wm_table; 643 649 } else { 644 - struct clk_log_info log_info = {0}; 645 - 646 - clk_mgr->base.smu_ver = dcn315_smu_get_smu_version(&clk_mgr->base); 647 - 648 - if (clk_mgr->base.smu_ver > 0) 649 - clk_mgr->base.smu_present = true; 650 - 651 - if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 652 - dcn315_bw_params.wm_table = lpddr5_wm_table; 653 - } else { 654 - dcn315_bw_params.wm_table = ddr5_wm_table; 655 - } 656 - /* Saved clocks configured at boot for debug purposes */ 657 - dcn315_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 658 - &clk_mgr->base.base, &log_info); 659 - 650 + dcn315_bw_params.wm_table = ddr5_wm_table; 660 651 } 652 + /* Saved clocks configured at boot for debug purposes */ 653 + dcn315_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 654 + &clk_mgr->base.base, &log_info); 661 655 662 656 clk_mgr->base.base.dprefclk_khz = 600000; 663 657 clk_mgr->base.base.dprefclk_khz = dcn315_smu_get_dpref_clk(&clk_mgr->base);
+24 -33
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn316/dcn316_clk_mgr.c
··· 207 207 } 208 208 209 209 // workaround: Limit dppclk to 100Mhz to avoid lower eDP panel switch to plus 4K monitor underflow. 210 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 211 - if (new_clocks->dppclk_khz < 100000) 212 - new_clocks->dppclk_khz = 100000; 213 - if (new_clocks->dispclk_khz < 100000) 214 - new_clocks->dispclk_khz = 100000; 215 - } 210 + if (new_clocks->dppclk_khz < 100000) 211 + new_clocks->dppclk_khz = 100000; 212 + if (new_clocks->dispclk_khz < 100000) 213 + new_clocks->dispclk_khz = 100000; 216 214 217 215 if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, clk_mgr->base.clks.dppclk_khz)) { 218 216 if (clk_mgr->base.clks.dppclk_khz > new_clocks->dppclk_khz) ··· 614 616 struct dccg *dccg) 615 617 { 616 618 struct dcn316_smu_dpm_clks smu_dpm_clks = { 0 }; 619 + struct clk_log_info log_info = {0}; 617 620 618 621 clk_mgr->base.base.ctx = ctx; 619 622 clk_mgr->base.base.funcs = &dcn316_funcs; ··· 654 655 655 656 ASSERT(smu_dpm_clks.dpm_clks); 656 657 657 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 658 - clk_mgr->base.base.funcs = &dcn3_fpga_funcs; 659 - clk_mgr->base.base.dentist_vco_freq_khz = 2500000; 658 + clk_mgr->base.smu_ver = dcn316_smu_get_smu_version(&clk_mgr->base); 659 + 660 + if (clk_mgr->base.smu_ver > 0) 661 + clk_mgr->base.smu_present = true; 662 + 663 + // Skip this for now as it did not work on DCN315, renable during bring up 664 + clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 665 + 666 + /* in case we don't get a value from the register, use default */ 667 + if (clk_mgr->base.base.dentist_vco_freq_khz == 0) 668 + clk_mgr->base.base.dentist_vco_freq_khz = 2500000; /* 2400MHz */ 669 + 670 + 671 + if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 672 + dcn316_bw_params.wm_table = lpddr5_wm_table; 660 673 } else { 661 - struct clk_log_info log_info = {0}; 662 - 663 - clk_mgr->base.smu_ver = dcn316_smu_get_smu_version(&clk_mgr->base); 664 - 665 - if (clk_mgr->base.smu_ver > 0) 666 - clk_mgr->base.smu_present = true; 667 - 668 - // Skip this for now as it did not work on DCN315, renable during bring up 669 - clk_mgr->base.base.dentist_vco_freq_khz = get_vco_frequency_from_reg(&clk_mgr->base); 670 - 671 - /* in case we don't get a value from the register, use default */ 672 - if (clk_mgr->base.base.dentist_vco_freq_khz == 0) 673 - clk_mgr->base.base.dentist_vco_freq_khz = 2500000; /* 2400MHz */ 674 - 675 - 676 - if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { 677 - dcn316_bw_params.wm_table = lpddr5_wm_table; 678 - } else { 679 - dcn316_bw_params.wm_table = ddr4_wm_table; 680 - } 681 - /* Saved clocks configured at boot for debug purposes */ 682 - dcn316_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 683 - &clk_mgr->base.base, &log_info); 684 - 674 + dcn316_bw_params.wm_table = ddr4_wm_table; 685 675 } 676 + /* Saved clocks configured at boot for debug purposes */ 677 + dcn316_dump_clk_registers(&clk_mgr->base.base.boot_snapshot, 678 + &clk_mgr->base.base, &log_info); 686 679 687 680 clk_mgr->base.base.dprefclk_khz = 600000; 688 681 clk_mgr->base.base.dprefclk_khz = dcn316_smu_get_dpref_clk(&clk_mgr->base);
-1
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c
··· 941 941 clk_mgr->base.clks.ref_dtbclk_khz = 268750; 942 942 } 943 943 944 - 945 944 /* integer part is now VCO frequency in kHz */ 946 945 clk_mgr->base.dentist_vco_freq_khz = dcn32_get_vco_frequency_from_reg(clk_mgr); 947 946
+19 -21
drivers/gpu/drm/amd/display/dc/core/dc.c
··· 3588 3588 } 3589 3589 } 3590 3590 3591 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 3592 - for (i = 0; i < surface_count; i++) { 3593 - struct dc_plane_state *plane_state = srf_updates[i].surface; 3594 - /*set logical flag for lock/unlock use*/ 3595 - for (j = 0; j < dc->res_pool->pipe_count; j++) { 3596 - struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j]; 3597 - if (!pipe_ctx->plane_state) 3598 - continue; 3599 - if (should_update_pipe_for_plane(context, pipe_ctx, plane_state)) 3600 - continue; 3601 - pipe_ctx->plane_state->triplebuffer_flips = false; 3602 - if (update_type == UPDATE_TYPE_FAST && 3603 - dc->hwss.program_triplebuffer != NULL && 3604 - !pipe_ctx->plane_state->flip_immediate && dc->debug.enable_tri_buf) { 3605 - /*triple buffer for VUpdate only*/ 3606 - pipe_ctx->plane_state->triplebuffer_flips = true; 3607 - } 3591 + for (i = 0; i < surface_count; i++) { 3592 + struct dc_plane_state *plane_state = srf_updates[i].surface; 3593 + /*set logical flag for lock/unlock use*/ 3594 + for (j = 0; j < dc->res_pool->pipe_count; j++) { 3595 + struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j]; 3596 + if (!pipe_ctx->plane_state) 3597 + continue; 3598 + if (should_update_pipe_for_plane(context, pipe_ctx, plane_state)) 3599 + continue; 3600 + pipe_ctx->plane_state->triplebuffer_flips = false; 3601 + if (update_type == UPDATE_TYPE_FAST && 3602 + dc->hwss.program_triplebuffer != NULL && 3603 + !pipe_ctx->plane_state->flip_immediate && dc->debug.enable_tri_buf) { 3604 + /*triple buffer for VUpdate only*/ 3605 + pipe_ctx->plane_state->triplebuffer_flips = true; 3608 3606 } 3609 - if (update_type == UPDATE_TYPE_FULL) { 3610 - /* force vsync flip when reconfiguring pipes to prevent underflow */ 3611 - plane_state->flip_immediate = false; 3612 - } 3607 + } 3608 + if (update_type == UPDATE_TYPE_FULL) { 3609 + /* force vsync flip when reconfiguring pipes to prevent underflow */ 3610 + plane_state->flip_immediate = false; 3613 3611 } 3614 3612 } 3615 3613
-30
drivers/gpu/drm/amd/display/dc/core/dc_stream.c
··· 490 490 struct dwbc *dwb = dc->res_pool->dwbc[wb_info->dwb_pipe_inst]; 491 491 dwb->otg_inst = stream_status->primary_otg_inst; 492 492 } 493 - if (IS_DIAG_DC(dc->ctx->dce_environment)) { 494 - if (!dc->hwss.update_bandwidth(dc, dc->current_state)) { 495 - dm_error("DC: update_bandwidth failed!\n"); 496 - return false; 497 - } 498 - 499 - /* enable writeback */ 500 - if (dc->hwss.enable_writeback) { 501 - struct dwbc *dwb = dc->res_pool->dwbc[wb_info->dwb_pipe_inst]; 502 - 503 - if (dwb->funcs->is_enabled(dwb)) { 504 - /* writeback pipe already enabled, only need to update */ 505 - dc->hwss.update_writeback(dc, wb_info, dc->current_state); 506 - } else { 507 - /* Enable writeback pipe from scratch*/ 508 - dc->hwss.enable_writeback(dc, wb_info, dc->current_state); 509 - } 510 - } 511 - } 512 493 return true; 513 494 } 514 495 ··· 534 553 } 535 554 stream->num_wb_info = j; 536 555 537 - if (IS_DIAG_DC(dc->ctx->dce_environment)) { 538 - /* recalculate and apply DML parameters */ 539 - if (!dc->hwss.update_bandwidth(dc, dc->current_state)) { 540 - dm_error("DC: update_bandwidth failed!\n"); 541 - return false; 542 - } 543 - 544 - /* disable writeback */ 545 - if (dc->hwss.disable_writeback) 546 - dc->hwss.disable_writeback(dc, dwb_pipe_inst); 547 - } 548 556 return true; 549 557 } 550 558
+2 -4
drivers/gpu/drm/amd/display/dc/dc_helper.c
··· 464 464 field_value = get_reg_field_value_ex(reg_val, mask, shift); 465 465 466 466 if (field_value == condition_value) { 467 - if (i * delay_between_poll_us > 1000 && 468 - !IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 467 + if (i * delay_between_poll_us > 1000) 469 468 DC_LOG_DC("REG_WAIT taking a while: %dms in %s line:%d\n", 470 469 delay_between_poll_us * i / 1000, 471 470 func_name, line); ··· 476 477 delay_between_poll_us, time_out_num_tries, 477 478 func_name, line); 478 479 479 - if (!IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 480 - BREAK_TO_DEBUGGER(); 480 + BREAK_TO_DEBUGGER(); 481 481 } 482 482 483 483 void generic_write_indirect_reg(const struct dc_context *ctx,
-7
drivers/gpu/drm/amd/display/dc/dc_types.h
··· 69 69 DCE_ENV_VIRTUAL_HW 70 70 }; 71 71 72 - /* Note: use these macro definitions instead of direct comparison! */ 73 - #define IS_FPGA_MAXIMUS_DC(dce_environment) \ 74 - (dce_environment == DCE_ENV_FPGA_MAXIMUS) 75 - 76 - #define IS_DIAG_DC(dce_environment) \ 77 - (IS_FPGA_MAXIMUS_DC(dce_environment) || (dce_environment == DCE_ENV_DIAG)) 78 - 79 72 struct dc_perf_trace { 80 73 unsigned long read_count; 81 74 unsigned long write_count;
-38
drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
··· 920 920 struct dce110_clk_src *clk_src = TO_DCE110_CLK_SRC(clock_source); 921 921 struct bp_pixel_clock_parameters bp_pc_params = {0}; 922 922 923 - if (IS_FPGA_MAXIMUS_DC(clock_source->ctx->dce_environment)) { 924 - unsigned int inst = pix_clk_params->controller_id - CONTROLLER_ID_D0; 925 - unsigned dp_dto_ref_100hz = 7000000; 926 - unsigned clock_100hz = pll_settings->actual_pix_clk_100hz; 927 - 928 - /* Set DTO values: phase = target clock, modulo = reference clock */ 929 - REG_WRITE(PHASE[inst], clock_100hz); 930 - REG_WRITE(MODULO[inst], dp_dto_ref_100hz); 931 - 932 - /* Enable DTO */ 933 - if (clk_src->cs_mask->PIPE0_DTO_SRC_SEL) 934 - REG_UPDATE_2(PIXEL_RATE_CNTL[inst], 935 - DP_DTO0_ENABLE, 1, 936 - PIPE0_DTO_SRC_SEL, 1); 937 - else 938 - REG_UPDATE(PIXEL_RATE_CNTL[inst], 939 - DP_DTO0_ENABLE, 1); 940 - return true; 941 - } 942 923 /* First disable SS 943 924 * ATOMBIOS will enable by default SS on PLL for DP, 944 925 * do not disable it here ··· 996 1015 REG_UPDATE(PIXEL_RATE_CNTL[inst], 997 1016 DP_DTO0_ENABLE, 1); 998 1017 } else { 999 - if (IS_FPGA_MAXIMUS_DC(clock_source->ctx->dce_environment)) { 1000 - unsigned int inst = pix_clk_params->controller_id - CONTROLLER_ID_D0; 1001 - unsigned dp_dto_ref_100hz = 7000000; 1002 - unsigned clock_100hz = pll_settings->actual_pix_clk_100hz; 1003 - 1004 - /* Set DTO values: phase = target clock, modulo = reference clock */ 1005 - REG_WRITE(PHASE[inst], clock_100hz); 1006 - REG_WRITE(MODULO[inst], dp_dto_ref_100hz); 1007 - 1008 - /* Enable DTO */ 1009 - if (clk_src->cs_mask->PIPE0_DTO_SRC_SEL) 1010 - REG_UPDATE_2(PIXEL_RATE_CNTL[inst], 1011 - DP_DTO0_ENABLE, 1, 1012 - PIPE0_DTO_SRC_SEL, 1); 1013 - else 1014 - REG_UPDATE(PIXEL_RATE_CNTL[inst], 1015 - DP_DTO0_ENABLE, 1); 1016 - return true; 1017 - } 1018 1018 1019 1019 if (clk_src->cs_mask->PIPE0_DTO_SRC_SEL) 1020 1020 REG_UPDATE(PIXEL_RATE_CNTL[inst],
+3 -5
drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c
··· 1093 1093 1094 1094 dce_dmcu_construct(dmcu_dce, ctx, regs, dmcu_shift, dmcu_mask); 1095 1095 1096 - if (!IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) { 1097 - psp_version = dm_read_reg(ctx, mmMP0_SMN_C2PMSG_58); 1098 - dmcu_dce->base.auto_load_dmcu = ((psp_version & 0x00FF00FF) > 0x00110029); 1099 - dmcu_dce->base.psp_version = psp_version; 1100 - } 1096 + psp_version = dm_read_reg(ctx, mmMP0_SMN_C2PMSG_58); 1097 + dmcu_dce->base.auto_load_dmcu = ((psp_version & 0x00FF00FF) > 0x00110029); 1098 + dmcu_dce->base.psp_version = psp_version; 1101 1099 } 1102 1100 1103 1101 struct dmcu *dce_dmcu_create(
-3
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
··· 209 209 struct dc_context *ctx = dc->ctx; 210 210 unsigned int underlay_idx = dc->res_pool->underlay_pipe_index; 211 211 212 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 213 - return true; 214 - 215 212 if (power_gating == PIPE_GATING_CONTROL_INIT) 216 213 cntl = ASIC_PIPE_INIT; 217 214 else if (power_gating == PIPE_GATING_CONTROL_ENABLE)
-3
drivers/gpu/drm/amd/display/dc/dce112/dce112_hw_sequencer.c
··· 120 120 enum bp_pipe_control_action cntl; 121 121 struct dc_context *ctx = dc->ctx; 122 122 123 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 124 - return true; 125 - 126 123 if (power_gating == PIPE_GATING_CONTROL_INIT) 127 124 cntl = ASIC_PIPE_INIT; 128 125 else if (power_gating == PIPE_GATING_CONTROL_ENABLE)
-3
drivers/gpu/drm/amd/display/dc/dce120/dce120_hw_sequencer.c
··· 159 159 enum bp_pipe_control_action cntl; 160 160 struct dc_context *ctx = dc->ctx; 161 161 162 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 163 - return true; 164 - 165 162 if (power_gating == PIPE_GATING_CONTROL_INIT) 166 163 cntl = ASIC_PIPE_INIT; 167 164 else if (power_gating == PIPE_GATING_CONTROL_ENABLE)
+46 -76
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
··· 1012 1012 return; 1013 1013 } 1014 1014 1015 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 1016 - link = pipe_ctx->stream->link; 1017 - /* DPMS may already disable or */ 1018 - /* dpms_off status is incorrect due to fastboot 1019 - * feature. When system resume from S4 with second 1020 - * screen only, the dpms_off would be true but 1021 - * VBIOS lit up eDP, so check link status too. 1022 - */ 1023 - if (!pipe_ctx->stream->dpms_off || link->link_status.link_active) 1024 - dc->link_srv->set_dpms_off(pipe_ctx); 1025 - else if (pipe_ctx->stream_res.audio) 1026 - dc->hwss.disable_audio_stream(pipe_ctx); 1015 + link = pipe_ctx->stream->link; 1016 + /* DPMS may already disable or */ 1017 + /* dpms_off status is incorrect due to fastboot 1018 + * feature. When system resume from S4 with second 1019 + * screen only, the dpms_off would be true but 1020 + * VBIOS lit up eDP, so check link status too. 1021 + */ 1022 + if (!pipe_ctx->stream->dpms_off || link->link_status.link_active) 1023 + dc->link_srv->set_dpms_off(pipe_ctx); 1024 + else if (pipe_ctx->stream_res.audio) 1025 + dc->hwss.disable_audio_stream(pipe_ctx); 1027 1026 1028 - if (pipe_ctx->stream_res.audio) { 1029 - /*disable az_endpoint*/ 1030 - pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); 1027 + if (pipe_ctx->stream_res.audio) { 1028 + /*disable az_endpoint*/ 1029 + pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); 1031 1030 1032 - /*free audio*/ 1033 - if (dc->caps.dynamic_audio == true) { 1034 - /*we have to dynamic arbitrate the audio endpoints*/ 1035 - /*we free the resource, need reset is_audio_acquired*/ 1036 - update_audio_usage(&dc->current_state->res_ctx, dc->res_pool, 1037 - pipe_ctx->stream_res.audio, false); 1038 - pipe_ctx->stream_res.audio = NULL; 1039 - } 1031 + /*free audio*/ 1032 + if (dc->caps.dynamic_audio == true) { 1033 + /*we have to dynamic arbitrate the audio endpoints*/ 1034 + /*we free the resource, need reset is_audio_acquired*/ 1035 + update_audio_usage(&dc->current_state->res_ctx, dc->res_pool, 1036 + pipe_ctx->stream_res.audio, false); 1037 + pipe_ctx->stream_res.audio = NULL; 1040 1038 } 1041 1039 } 1042 1040 ··· 1497 1499 if (dc->res_pool->dccg && dc->res_pool->dccg->funcs->dccg_init) 1498 1500 dc->res_pool->dccg->funcs->dccg_init(res_pool->dccg); 1499 1501 1500 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 1501 - 1502 - REG_WRITE(REFCLK_CNTL, 0); 1503 - REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, 1); 1504 - REG_WRITE(DIO_MEM_PWR_CTRL, 0); 1505 - 1506 - if (!dc->debug.disable_clock_gate) { 1507 - /* enable all DCN clock gating */ 1508 - REG_WRITE(DCCG_GATE_DISABLE_CNTL, 0); 1509 - 1510 - REG_WRITE(DCCG_GATE_DISABLE_CNTL2, 0); 1511 - 1512 - REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0); 1513 - } 1514 - 1515 - //Enable ability to power gate / don't force power on permanently 1516 - if (hws->funcs.enable_power_gating_plane) 1517 - hws->funcs.enable_power_gating_plane(hws, true); 1518 - 1519 - return; 1520 - } 1521 - 1522 1502 if (!dcb->funcs->is_accelerated_mode(dcb)) 1523 1503 hws->funcs.disable_vga(dc->hwseq); 1524 1504 ··· 1508 1532 res_pool->ref_clocks.xtalin_clock_inKhz = 1509 1533 dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency; 1510 1534 1511 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 1512 - if (res_pool->dccg && res_pool->hubbub) { 1535 + if (res_pool->dccg && res_pool->hubbub) { 1513 1536 1514 - (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 1515 - dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 1516 - &res_pool->ref_clocks.dccg_ref_clock_inKhz); 1537 + (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 1538 + dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 1539 + &res_pool->ref_clocks.dccg_ref_clock_inKhz); 1517 1540 1518 - (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 1519 - res_pool->ref_clocks.dccg_ref_clock_inKhz, 1520 - &res_pool->ref_clocks.dchub_ref_clock_inKhz); 1521 - } else { 1522 - // Not all ASICs have DCCG sw component 1523 - res_pool->ref_clocks.dccg_ref_clock_inKhz = 1524 - res_pool->ref_clocks.xtalin_clock_inKhz; 1525 - res_pool->ref_clocks.dchub_ref_clock_inKhz = 1526 - res_pool->ref_clocks.xtalin_clock_inKhz; 1527 - } 1541 + (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 1542 + res_pool->ref_clocks.dccg_ref_clock_inKhz, 1543 + &res_pool->ref_clocks.dchub_ref_clock_inKhz); 1544 + } else { 1545 + // Not all ASICs have DCCG sw component 1546 + res_pool->ref_clocks.dccg_ref_clock_inKhz = 1547 + res_pool->ref_clocks.xtalin_clock_inKhz; 1548 + res_pool->ref_clocks.dchub_ref_clock_inKhz = 1549 + res_pool->ref_clocks.xtalin_clock_inKhz; 1528 1550 } 1529 1551 } else 1530 1552 ASSERT_CRITICAL(false); ··· 3044 3070 if (dc->debug.sanity_checks) 3045 3071 hws->funcs.verify_allow_pstate_change_high(dc); 3046 3072 3047 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 3048 - if (context->stream_count == 0) 3049 - context->bw_ctx.bw.dcn.clk.phyclk_khz = 0; 3073 + if (context->stream_count == 0) 3074 + context->bw_ctx.bw.dcn.clk.phyclk_khz = 0; 3050 3075 3051 - dc->clk_mgr->funcs->update_clocks( 3052 - dc->clk_mgr, 3053 - context, 3054 - false); 3055 - } 3076 + dc->clk_mgr->funcs->update_clocks( 3077 + dc->clk_mgr, 3078 + context, 3079 + false); 3056 3080 3057 3081 dc->wm_optimized_required = hubbub->funcs->program_watermarks(hubbub, 3058 3082 &context->bw_ctx.bw.dcn.watermarks, ··· 3082 3110 if (dc->debug.sanity_checks) 3083 3111 hws->funcs.verify_allow_pstate_change_high(dc); 3084 3112 3085 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 3086 - if (context->stream_count == 0) 3087 - context->bw_ctx.bw.dcn.clk.phyclk_khz = 0; 3113 + if (context->stream_count == 0) 3114 + context->bw_ctx.bw.dcn.clk.phyclk_khz = 0; 3088 3115 3089 - dc->clk_mgr->funcs->update_clocks( 3090 - dc->clk_mgr, 3091 - context, 3092 - true); 3093 - } 3116 + dc->clk_mgr->funcs->update_clocks( 3117 + dc->clk_mgr, 3118 + context, 3119 + true); 3094 3120 3095 3121 hubbub->funcs->program_watermarks(hubbub, 3096 3122 &context->bw_ctx.bw.dcn.watermarks,
+3 -5
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
··· 653 653 REG_SET(OTG_MASTER_UPDATE_LOCK, 0, 654 654 OTG_MASTER_UPDATE_LOCK, 1); 655 655 656 - /* Should be fast, status does not update on maximus */ 657 - if (optc->ctx->dce_environment != DCE_ENV_FPGA_MAXIMUS) 658 - REG_WAIT(OTG_MASTER_UPDATE_LOCK, 659 - UPDATE_LOCK_STATUS, 1, 660 - 1, 10); 656 + REG_WAIT(OTG_MASTER_UPDATE_LOCK, 657 + UPDATE_LOCK_STATUS, 1, 658 + 1, 10); 661 659 662 660 TRACE_OPTC_LOCK_UNLOCK_STATE(optc1, optc->inst, true); 663 661 }
+2 -3
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
··· 1651 1651 } 1652 1652 1653 1653 if (!resource_construct(num_virtual_links, dc, &pool->base, 1654 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1655 - &res_create_funcs : &res_create_maximus_funcs))) 1656 - goto fail; 1654 + &res_create_funcs)) 1655 + goto fail; 1657 1656 1658 1657 dcn10_hw_sequencer_construct(dc); 1659 1658 dc->caps.max_planes = pool->base.pipe_count;
+21 -26
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
··· 2480 2480 return; 2481 2481 } 2482 2482 2483 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 2484 - /* DPMS may already disable or */ 2485 - /* dpms_off status is incorrect due to fastboot 2486 - * feature. When system resume from S4 with second 2487 - * screen only, the dpms_off would be true but 2488 - * VBIOS lit up eDP, so check link status too. 2489 - */ 2490 - if (!pipe_ctx->stream->dpms_off || link->link_status.link_active) 2491 - dc->link_srv->set_dpms_off(pipe_ctx); 2492 - else if (pipe_ctx->stream_res.audio) 2493 - dc->hwss.disable_audio_stream(pipe_ctx); 2483 + /* DPMS may already disable or */ 2484 + /* dpms_off status is incorrect due to fastboot 2485 + * feature. When system resume from S4 with second 2486 + * screen only, the dpms_off would be true but 2487 + * VBIOS lit up eDP, so check link status too. 2488 + */ 2489 + if (!pipe_ctx->stream->dpms_off || link->link_status.link_active) 2490 + dc->link_srv->set_dpms_off(pipe_ctx); 2491 + else if (pipe_ctx->stream_res.audio) 2492 + dc->hwss.disable_audio_stream(pipe_ctx); 2494 2493 2495 - /* free acquired resources */ 2496 - if (pipe_ctx->stream_res.audio) { 2497 - /*disable az_endpoint*/ 2498 - pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); 2494 + /* free acquired resources */ 2495 + if (pipe_ctx->stream_res.audio) { 2496 + /*disable az_endpoint*/ 2497 + pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); 2499 2498 2500 - /*free audio*/ 2501 - if (dc->caps.dynamic_audio == true) { 2502 - /*we have to dynamic arbitrate the audio endpoints*/ 2503 - /*we free the resource, need reset is_audio_acquired*/ 2504 - update_audio_usage(&dc->current_state->res_ctx, dc->res_pool, 2505 - pipe_ctx->stream_res.audio, false); 2506 - pipe_ctx->stream_res.audio = NULL; 2507 - } 2499 + /*free audio*/ 2500 + if (dc->caps.dynamic_audio == true) { 2501 + /*we have to dynamic arbitrate the audio endpoints*/ 2502 + /*we free the resource, need reset is_audio_acquired*/ 2503 + update_audio_usage(&dc->current_state->res_ctx, dc->res_pool, 2504 + pipe_ctx->stream_res.audio, false); 2505 + pipe_ctx->stream_res.audio = NULL; 2508 2506 } 2509 - } 2510 - else if (pipe_ctx->stream_res.dsc) { 2511 - dc->link_srv->set_dsc_enable(pipe_ctx, false); 2512 2507 } 2513 2508 2514 2509 /* by upper caller loop, parent pipe: pipe0, will be reset last.
-4
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_init.c
··· 145 145 dc->hwss = dcn20_funcs; 146 146 dc->hwseq->funcs = dcn20_private_funcs; 147 147 148 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 149 - dc->hwss.init_hw = dcn20_fpga_init_hw; 150 - dc->hwseq->funcs.init_pipes = NULL; 151 - } 152 148 }
+3 -4
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_optc.c
··· 391 391 REG_SET(OTG_MASTER_UPDATE_LOCK, 0, 392 392 OTG_MASTER_UPDATE_LOCK, 1); 393 393 394 - if (optc->ctx->dce_environment != DCE_ENV_FPGA_MAXIMUS) 395 - REG_WAIT(OTG_MASTER_UPDATE_LOCK, 396 - UPDATE_LOCK_STATUS, 1, 397 - 1, 10); 394 + REG_WAIT(OTG_MASTER_UPDATE_LOCK, 395 + UPDATE_LOCK_STATUS, 1, 396 + 1, 10); 398 397 } 399 398 400 399 void optc2_triplebuffer_unlock(struct timing_generator *optc)
+4 -11
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
··· 2488 2488 2489 2489 dc->caps.dp_hdmi21_pcon_support = true; 2490 2490 2491 - if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) { 2491 + if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 2492 2492 dc->debug = debug_defaults_drv; 2493 - } else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 2494 - pool->base.pipe_count = 4; 2495 - pool->base.mpcc_count = pool->base.pipe_count; 2496 - dc->debug = debug_defaults_diags; 2497 - } else { 2498 - dc->debug = debug_defaults_diags; 2499 - } 2493 + 2500 2494 //dcn2.0x 2501 2495 dc->work_arounds.dedcn20_305_wa = true; 2502 2496 ··· 2728 2734 } 2729 2735 2730 2736 if (!resource_construct(num_virtual_links, dc, &pool->base, 2731 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2732 - &res_create_funcs : &res_create_maximus_funcs))) 2733 - goto create_fail; 2737 + &res_create_funcs)) 2738 + goto create_fail; 2734 2739 2735 2740 dcn20_hw_sequencer_construct(dc); 2736 2741
+28 -45
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_hwseq.c
··· 231 231 if (dc->clk_mgr && dc->clk_mgr->funcs->init_clocks) 232 232 dc->clk_mgr->funcs->init_clocks(dc->clk_mgr); 233 233 234 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 235 - REG_WRITE(RBBMIF_TIMEOUT_DIS, 0xFFFFFFFF); 236 - REG_WRITE(RBBMIF_TIMEOUT_DIS_2, 0xFFFFFFFF); 234 + hws->funcs.bios_golden_init(dc); 237 235 238 - hws->funcs.dccg_init(hws); 236 + if (dc->ctx->dc_bios->fw_info_valid) { 237 + res_pool->ref_clocks.xtalin_clock_inKhz = 238 + dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency; 239 239 240 - REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_REFDIV, 2); 241 - REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, 1); 242 - REG_WRITE(REFCLK_CNTL, 0); 243 - } else { 244 - hws->funcs.bios_golden_init(dc); 240 + if (res_pool->dccg && res_pool->hubbub) { 241 + (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 242 + dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 243 + &res_pool->ref_clocks.dccg_ref_clock_inKhz); 245 244 246 - if (dc->ctx->dc_bios->fw_info_valid) { 247 - res_pool->ref_clocks.xtalin_clock_inKhz = 248 - dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency; 249 - 250 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 251 - if (res_pool->dccg && res_pool->hubbub) { 252 - (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 253 - dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 254 - &res_pool->ref_clocks.dccg_ref_clock_inKhz); 255 - 256 - (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 257 - res_pool->ref_clocks.dccg_ref_clock_inKhz, 258 - &res_pool->ref_clocks.dchub_ref_clock_inKhz); 259 - } else { 260 - res_pool->ref_clocks.dccg_ref_clock_inKhz = 261 - res_pool->ref_clocks.xtalin_clock_inKhz; 262 - res_pool->ref_clocks.dchub_ref_clock_inKhz = 263 - res_pool->ref_clocks.xtalin_clock_inKhz; 264 - } 265 - } 266 - } else 267 - ASSERT_CRITICAL(false); 268 - for (i = 0; i < dc->link_count; i++) { 269 - /* Power up AND update implementation according to the 270 - * required signal (which may be different from the 271 - * default signal on connector). 272 - */ 273 - struct dc_link *link = dc->links[i]; 274 - 275 - link->link_enc->funcs->hw_init(link->link_enc); 245 + (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 246 + res_pool->ref_clocks.dccg_ref_clock_inKhz, 247 + &res_pool->ref_clocks.dchub_ref_clock_inKhz); 248 + } else { 249 + res_pool->ref_clocks.dccg_ref_clock_inKhz = 250 + res_pool->ref_clocks.xtalin_clock_inKhz; 251 + res_pool->ref_clocks.dchub_ref_clock_inKhz = 252 + res_pool->ref_clocks.xtalin_clock_inKhz; 276 253 } 277 - if (hws->fb_offset.quad_part == 0) 278 - read_mmhub_vm_setup(hws); 254 + } else 255 + ASSERT_CRITICAL(false); 256 + for (i = 0; i < dc->link_count; i++) { 257 + /* Power up AND update implementation according to the 258 + * required signal (which may be different from the 259 + * default signal on connector). 260 + */ 261 + struct dc_link *link = dc->links[i]; 262 + 263 + link->link_enc->funcs->hw_init(link->link_enc); 279 264 } 265 + if (hws->fb_offset.quad_part == 0) 266 + read_mmhub_vm_setup(hws); 280 267 281 268 /* Blank pixel data with OPP DPG */ 282 269 for (i = 0; i < res_pool->timing_generator_count; i++) { ··· 348 361 349 362 tg->funcs->tg_init(tg); 350 363 } 351 - 352 - /* end of FPGA. Below if real ASIC */ 353 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 354 - return; 355 364 356 365 for (i = 0; i < res_pool->audio_count; i++) { 357 366 struct audio *audio = res_pool->audios[i];
+3 -4
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_optc.c
··· 55 55 REG_SET(OTG_MASTER_UPDATE_LOCK, 0, 56 56 OTG_MASTER_UPDATE_LOCK, 1); 57 57 58 - if (optc->ctx->dce_environment != DCE_ENV_FPGA_MAXIMUS) 59 - REG_WAIT(OTG_MASTER_UPDATE_LOCK, 60 - UPDATE_LOCK_STATUS, 1, 61 - 1, 10); 58 + REG_WAIT(OTG_MASTER_UPDATE_LOCK, 59 + UPDATE_LOCK_STATUS, 1, 60 + 1, 10); 62 61 } 63 62 64 63 static void optc201_triplebuffer_unlock(struct timing_generator *optc)
+2 -3
drivers/gpu/drm/amd/display/dc/dcn201/dcn201_resource.c
··· 1272 1272 } 1273 1273 1274 1274 if (!resource_construct(num_virtual_links, dc, &pool->base, 1275 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1276 - &res_create_funcs : &res_create_maximus_funcs))) 1277 - goto create_fail; 1275 + &res_create_funcs)) 1276 + goto create_fail; 1278 1277 1279 1278 dcn201_hw_sequencer_construct(dc); 1280 1279
-4
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_init.c
··· 151 151 dc->hwss = dcn21_funcs; 152 152 dc->hwseq->funcs = dcn21_private_funcs; 153 153 154 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 155 - dc->hwss.init_hw = dcn20_fpga_init_hw; 156 - dc->hwseq->funcs.init_pipes = NULL; 157 - } 158 154 }
+2 -8
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
··· 1503 1503 1504 1504 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1505 1505 dc->debug = debug_defaults_drv; 1506 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 1507 - pool->base.pipe_count = 4; 1508 - dc->debug = debug_defaults_diags; 1509 - } else 1510 - dc->debug = debug_defaults_diags; 1511 1506 1512 1507 // Init the vm_helper 1513 1508 if (dc->vm_helper) ··· 1716 1721 } 1717 1722 1718 1723 if (!resource_construct(num_virtual_links, dc, &pool->base, 1719 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1720 - &res_create_funcs : &res_create_maximus_funcs))) 1721 - goto create_fail; 1724 + &res_create_funcs)) 1725 + goto create_fail; 1722 1726 1723 1727 dcn21_hw_sequencer_construct(dc); 1724 1728
+13 -41
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c
··· 330 330 DC_LOG_DWB("%s dwb_pipe_inst = %d, mpcc_inst = %d",\ 331 331 __func__, wb_info->dwb_pipe_inst,\ 332 332 wb_info->mpcc_inst); 333 - if (IS_DIAG_DC(dc->ctx->dce_environment)) { 334 - /*till diags switch to warmup interface*/ 335 - dcn30_mmhubbub_warmup(dc, 1, wb_info); 336 - } 337 333 /* Update writeback pipe */ 338 334 dcn30_set_writeback(dc, wb_info, context); 339 335 ··· 443 447 if (res_pool->dccg->funcs->dccg_init) 444 448 res_pool->dccg->funcs->dccg_init(res_pool->dccg); 445 449 446 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 447 - 448 - REG_WRITE(REFCLK_CNTL, 0); 449 - REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, 1); 450 - REG_WRITE(DIO_MEM_PWR_CTRL, 0); 451 - 452 - if (!dc->debug.disable_clock_gate) { 453 - /* enable all DCN clock gating */ 454 - REG_WRITE(DCCG_GATE_DISABLE_CNTL, 0); 455 - 456 - REG_WRITE(DCCG_GATE_DISABLE_CNTL2, 0); 457 - 458 - REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0); 459 - } 460 - 461 - //Enable ability to power gate / don't force power on permanently 462 - if (hws->funcs.enable_power_gating_plane) 463 - hws->funcs.enable_power_gating_plane(hws, true); 464 - 465 - return; 466 - } 467 - 468 450 if (!dcb->funcs->is_accelerated_mode(dcb)) { 469 451 hws->funcs.bios_golden_init(dc); 470 452 hws->funcs.disable_vga(dc->hwseq); ··· 465 491 res_pool->ref_clocks.xtalin_clock_inKhz = 466 492 dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency; 467 493 468 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 469 - if (res_pool->dccg && res_pool->hubbub) { 494 + if (res_pool->dccg && res_pool->hubbub) { 470 495 471 - (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 472 - dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 473 - &res_pool->ref_clocks.dccg_ref_clock_inKhz); 496 + (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 497 + dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 498 + &res_pool->ref_clocks.dccg_ref_clock_inKhz); 474 499 475 - (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 476 - res_pool->ref_clocks.dccg_ref_clock_inKhz, 477 - &res_pool->ref_clocks.dchub_ref_clock_inKhz); 478 - } else { 479 - // Not all ASICs have DCCG sw component 480 - res_pool->ref_clocks.dccg_ref_clock_inKhz = 481 - res_pool->ref_clocks.xtalin_clock_inKhz; 482 - res_pool->ref_clocks.dchub_ref_clock_inKhz = 483 - res_pool->ref_clocks.xtalin_clock_inKhz; 484 - } 500 + (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 501 + res_pool->ref_clocks.dccg_ref_clock_inKhz, 502 + &res_pool->ref_clocks.dchub_ref_clock_inKhz); 503 + } else { 504 + // Not all ASICs have DCCG sw component 505 + res_pool->ref_clocks.dccg_ref_clock_inKhz = 506 + res_pool->ref_clocks.xtalin_clock_inKhz; 507 + res_pool->ref_clocks.dchub_ref_clock_inKhz = 508 + res_pool->ref_clocks.xtalin_clock_inKhz; 485 509 } 486 510 } else 487 511 ASSERT_CRITICAL(false);
-4
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_init.c
··· 151 151 dc->hwss = dcn30_funcs; 152 152 dc->hwseq->funcs = dcn30_private_funcs; 153 153 154 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 155 - dc->hwss.init_hw = dcn20_fpga_init_hw; 156 - dc->hwseq->funcs.init_pipes = NULL; 157 - } 158 154 }
+3 -4
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_optc.c
··· 55 55 REG_SET(OTG_MASTER_UPDATE_LOCK, 0, 56 56 OTG_MASTER_UPDATE_LOCK, 1); 57 57 58 - if (optc->ctx->dce_environment != DCE_ENV_FPGA_MAXIMUS) 59 - REG_WAIT(OTG_MASTER_UPDATE_LOCK, 60 - UPDATE_LOCK_STATUS, 1, 61 - 1, 10); 58 + REG_WAIT(OTG_MASTER_UPDATE_LOCK, 59 + UPDATE_LOCK_STATUS, 1, 60 + 1, 10); 62 61 63 62 TRACE_OPTC_LOCK_UNLOCK_STATE(optc1, optc->inst, true); 64 63 }
+2 -6
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
··· 2376 2376 2377 2377 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 2378 2378 dc->debug = debug_defaults_drv; 2379 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 2380 - dc->debug = debug_defaults_diags; 2381 - } else 2382 - dc->debug = debug_defaults_diags; 2379 + 2383 2380 // Init the vm_helper 2384 2381 if (dc->vm_helper) 2385 2382 vm_helper_init(dc->vm_helper, 16); ··· 2574 2577 2575 2578 /* Audio, Stream Encoders including DIG and virtual, MPC 3D LUTs */ 2576 2579 if (!resource_construct(num_virtual_links, dc, &pool->base, 2577 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2578 - &res_create_funcs : &res_create_maximus_funcs))) 2580 + &res_create_funcs)) 2579 2581 goto create_fail; 2580 2582 2581 2583 /* HW Sequencer and Plane caps */
+3 -7
drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c
··· 1513 1513 1514 1514 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1515 1515 dc->debug = debug_defaults_drv; 1516 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 1517 - dc->debug = debug_defaults_diags; 1518 - } else 1519 - dc->debug = debug_defaults_diags; 1516 + 1520 1517 // Init the vm_helper 1521 1518 if (dc->vm_helper) 1522 1519 vm_helper_init(dc->vm_helper, 16); ··· 1707 1710 1708 1711 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 1709 1712 if (!resource_construct(num_virtual_links, dc, &pool->base, 1710 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1711 - &res_create_funcs : &res_create_maximus_funcs))) 1712 - goto create_fail; 1713 + &res_create_funcs)) 1714 + goto create_fail; 1713 1715 1714 1716 /* HW Sequencer and Plane caps */ 1715 1717 dcn301_hw_sequencer_construct(dc);
+1 -4
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c
··· 1309 1309 1310 1310 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1311 1311 dc->debug = debug_defaults_drv; 1312 - else 1313 - dc->debug = debug_defaults_diags; 1314 1312 1315 1313 // Init the vm_helper 1316 1314 if (dc->vm_helper) ··· 1487 1489 1488 1490 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 1489 1491 if (!resource_construct(num_virtual_links, dc, pool, 1490 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1491 - &res_create_funcs : &res_create_maximus_funcs))) 1492 + &res_create_funcs)) 1492 1493 goto create_fail; 1493 1494 1494 1495 /* HW Sequencer and Plane caps */
+1 -4
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c
··· 1232 1232 1233 1233 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1234 1234 dc->debug = debug_defaults_drv; 1235 - else 1236 - dc->debug = debug_defaults_diags; 1237 1235 1238 1236 // Init the vm_helper 1239 1237 if (dc->vm_helper) ··· 1398 1400 1399 1401 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 1400 1402 if (!resource_construct(num_virtual_links, dc, pool, 1401 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1402 - &res_create_funcs : &res_create_maximus_funcs))) 1403 + &res_create_funcs)) 1403 1404 goto create_fail; 1404 1405 1405 1406 /* HW Sequencer and Plane caps */
+35 -63
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c
··· 117 117 if (dc->clk_mgr && dc->clk_mgr->funcs->init_clocks) 118 118 dc->clk_mgr->funcs->init_clocks(dc->clk_mgr); 119 119 120 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 121 - 122 - REG_WRITE(REFCLK_CNTL, 0); 123 - REG_UPDATE(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, 1); 124 - REG_WRITE(DIO_MEM_PWR_CTRL, 0); 125 - 126 - if (!dc->debug.disable_clock_gate) { 127 - /* enable all DCN clock gating */ 128 - REG_WRITE(DCCG_GATE_DISABLE_CNTL, 0); 129 - 130 - REG_WRITE(DCCG_GATE_DISABLE_CNTL2, 0); 131 - 132 - REG_UPDATE(DCFCLK_CNTL, DCFCLK_GATE_DIS, 0); 133 - } 134 - 135 - //Enable ability to power gate / don't force power on permanently 136 - if (hws->funcs.enable_power_gating_plane) 137 - hws->funcs.enable_power_gating_plane(hws, true); 138 - 139 - return; 140 - } 141 - 142 120 if (!dcb->funcs->is_accelerated_mode(dcb)) { 143 121 hws->funcs.bios_golden_init(dc); 144 122 if (hws->funcs.disable_vga) ··· 132 154 res_pool->ref_clocks.xtalin_clock_inKhz = 133 155 dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency; 134 156 135 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 136 - if (res_pool->dccg && res_pool->hubbub) { 157 + if (res_pool->dccg && res_pool->hubbub) { 137 158 138 - (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 139 - dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 140 - &res_pool->ref_clocks.dccg_ref_clock_inKhz); 159 + (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg, 160 + dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency, 161 + &res_pool->ref_clocks.dccg_ref_clock_inKhz); 141 162 142 - (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 143 - res_pool->ref_clocks.dccg_ref_clock_inKhz, 144 - &res_pool->ref_clocks.dchub_ref_clock_inKhz); 145 - } else { 146 - // Not all ASICs have DCCG sw component 147 - res_pool->ref_clocks.dccg_ref_clock_inKhz = 148 - res_pool->ref_clocks.xtalin_clock_inKhz; 149 - res_pool->ref_clocks.dchub_ref_clock_inKhz = 150 - res_pool->ref_clocks.xtalin_clock_inKhz; 151 - } 163 + (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub, 164 + res_pool->ref_clocks.dccg_ref_clock_inKhz, 165 + &res_pool->ref_clocks.dchub_ref_clock_inKhz); 166 + } else { 167 + // Not all ASICs have DCCG sw component 168 + res_pool->ref_clocks.dccg_ref_clock_inKhz = 169 + res_pool->ref_clocks.xtalin_clock_inKhz; 170 + res_pool->ref_clocks.dchub_ref_clock_inKhz = 171 + res_pool->ref_clocks.xtalin_clock_inKhz; 152 172 } 153 173 } else 154 174 ASSERT_CRITICAL(false); ··· 529 553 pipe_ctx->stream_res.tg->funcs->set_drr( 530 554 pipe_ctx->stream_res.tg, NULL); 531 555 532 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 533 - link = pipe_ctx->stream->link; 534 - /* DPMS may already disable or */ 535 - /* dpms_off status is incorrect due to fastboot 536 - * feature. When system resume from S4 with second 537 - * screen only, the dpms_off would be true but 538 - * VBIOS lit up eDP, so check link status too. 539 - */ 540 - if (!pipe_ctx->stream->dpms_off || link->link_status.link_active) 541 - dc->link_srv->set_dpms_off(pipe_ctx); 542 - else if (pipe_ctx->stream_res.audio) 543 - dc->hwss.disable_audio_stream(pipe_ctx); 556 + link = pipe_ctx->stream->link; 557 + /* DPMS may already disable or */ 558 + /* dpms_off status is incorrect due to fastboot 559 + * feature. When system resume from S4 with second 560 + * screen only, the dpms_off would be true but 561 + * VBIOS lit up eDP, so check link status too. 562 + */ 563 + if (!pipe_ctx->stream->dpms_off || link->link_status.link_active) 564 + dc->link_srv->set_dpms_off(pipe_ctx); 565 + else if (pipe_ctx->stream_res.audio) 566 + dc->hwss.disable_audio_stream(pipe_ctx); 544 567 545 - /* free acquired resources */ 546 - if (pipe_ctx->stream_res.audio) { 547 - /*disable az_endpoint*/ 548 - pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); 568 + /* free acquired resources */ 569 + if (pipe_ctx->stream_res.audio) { 570 + /*disable az_endpoint*/ 571 + pipe_ctx->stream_res.audio->funcs->az_disable(pipe_ctx->stream_res.audio); 549 572 550 - /*free audio*/ 551 - if (dc->caps.dynamic_audio == true) { 552 - /*we have to dynamic arbitrate the audio endpoints*/ 553 - /*we free the resource, need reset is_audio_acquired*/ 554 - update_audio_usage(&dc->current_state->res_ctx, dc->res_pool, 555 - pipe_ctx->stream_res.audio, false); 556 - pipe_ctx->stream_res.audio = NULL; 557 - } 573 + /*free audio*/ 574 + if (dc->caps.dynamic_audio == true) { 575 + /*we have to dynamic arbitrate the audio endpoints*/ 576 + /*we free the resource, need reset is_audio_acquired*/ 577 + update_audio_usage(&dc->current_state->res_ctx, dc->res_pool, 578 + pipe_ctx->stream_res.audio, false); 579 + pipe_ctx->stream_res.audio = NULL; 558 580 } 559 - } else if (pipe_ctx->stream_res.dsc) { 560 - dc->link_srv->set_dsc_enable(pipe_ctx, false); 561 581 } 562 582 563 583 pipe_ctx->stream = NULL;
-4
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c
··· 154 154 dc->hwss = dcn31_funcs; 155 155 dc->hwseq->funcs = dcn31_private_funcs; 156 156 157 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 158 - dc->hwss.init_hw = dcn20_fpga_init_hw; 159 - dc->hwseq->funcs.init_pipes = NULL; 160 - } 161 157 }
+3 -14
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c
··· 1341 1341 hws->regs = &hwseq_reg; 1342 1342 hws->shifts = &hwseq_shift; 1343 1343 hws->masks = &hwseq_mask; 1344 - /* DCN3.1 FPGA Workaround 1345 - * Need to enable HPO DP Stream Encoder before setting OTG master enable. 1346 - * To do so, move calling function enable_stream_timing to only be done AFTER calling 1347 - * function core_link_enable_stream 1348 - */ 1349 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 1350 - hws->wa.dp_hpo_and_otg_sequence = true; 1351 1344 } 1352 1345 return hws; 1353 1346 } ··· 1981 1988 1982 1989 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1983 1990 dc->debug = debug_defaults_drv; 1984 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 1985 - dc->debug = debug_defaults_diags; 1986 - } else 1987 - dc->debug = debug_defaults_diags; 1991 + 1988 1992 // Init the vm_helper 1989 1993 if (dc->vm_helper) 1990 1994 vm_helper_init(dc->vm_helper, 16); ··· 2185 2195 2186 2196 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 2187 2197 if (!resource_construct(num_virtual_links, dc, &pool->base, 2188 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2189 - &res_create_funcs : &res_create_maximus_funcs))) 2190 - goto create_fail; 2198 + &res_create_funcs)) 2199 + goto create_fail; 2191 2200 2192 2201 /* HW Sequencer and Plane caps */ 2193 2202 dcn31_hw_sequencer_construct(dc);
-4
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_init.c
··· 160 160 dc->hwss = dcn314_funcs; 161 161 dc->hwseq->funcs = dcn314_private_funcs; 162 162 163 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 164 - dc->hwss.init_hw = dcn20_fpga_init_hw; 165 - dc->hwseq->funcs.init_pipes = NULL; 166 - } 167 163 }
+1 -9
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c
··· 1375 1375 hws->regs = &hwseq_reg; 1376 1376 hws->shifts = &hwseq_shift; 1377 1377 hws->masks = &hwseq_mask; 1378 - /* DCN3.1 FPGA Workaround 1379 - * Need to enable HPO DP Stream Encoder before setting OTG master enable. 1380 - * To do so, move calling function enable_stream_timing to only be done AFTER calling 1381 - * function core_link_enable_stream 1382 - */ 1383 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 1384 - hws->wa.dp_hpo_and_otg_sequence = true; 1385 1378 } 1386 1379 return hws; 1387 1380 } ··· 2094 2101 2095 2102 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 2096 2103 if (!resource_construct(num_virtual_links, dc, &pool->base, 2097 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2098 - &res_create_funcs : &res_create_maximus_funcs))) 2104 + &res_create_funcs)) 2099 2105 goto create_fail; 2100 2106 2101 2107 /* HW Sequencer and Plane caps */
+3 -14
drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c
··· 1342 1342 hws->regs = &hwseq_reg; 1343 1343 hws->shifts = &hwseq_shift; 1344 1344 hws->masks = &hwseq_mask; 1345 - /* DCN3.1 FPGA Workaround 1346 - * Need to enable HPO DP Stream Encoder before setting OTG master enable. 1347 - * To do so, move calling function enable_stream_timing to only be done AFTER calling 1348 - * function core_link_enable_stream 1349 - */ 1350 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 1351 - hws->wa.dp_hpo_and_otg_sequence = true; 1352 1345 } 1353 1346 return hws; 1354 1347 } ··· 1940 1947 1941 1948 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1942 1949 dc->debug = debug_defaults_drv; 1943 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 1944 - dc->debug = debug_defaults_diags; 1945 - } else 1946 - dc->debug = debug_defaults_diags; 1950 + 1947 1951 // Init the vm_helper 1948 1952 if (dc->vm_helper) 1949 1953 vm_helper_init(dc->vm_helper, 16); ··· 2121 2131 2122 2132 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 2123 2133 if (!resource_construct(num_virtual_links, dc, &pool->base, 2124 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2125 - &res_create_funcs : &res_create_maximus_funcs))) 2126 - goto create_fail; 2134 + &res_create_funcs)) 2135 + goto create_fail; 2127 2136 2128 2137 /* HW Sequencer and Plane caps */ 2129 2138 dcn31_hw_sequencer_construct(dc);
+3 -14
drivers/gpu/drm/amd/display/dc/dcn316/dcn316_resource.c
··· 1340 1340 hws->regs = &hwseq_reg; 1341 1341 hws->shifts = &hwseq_shift; 1342 1342 hws->masks = &hwseq_mask; 1343 - /* DCN3.1 FPGA Workaround 1344 - * Need to enable HPO DP Stream Encoder before setting OTG master enable. 1345 - * To do so, move calling function enable_stream_timing to only be done AFTER calling 1346 - * function core_link_enable_stream 1347 - */ 1348 - if (IS_FPGA_MAXIMUS_DC(ctx->dce_environment)) 1349 - hws->wa.dp_hpo_and_otg_sequence = true; 1350 1343 } 1351 1344 return hws; 1352 1345 } ··· 1837 1844 1838 1845 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1839 1846 dc->debug = debug_defaults_drv; 1840 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 1841 - dc->debug = debug_defaults_diags; 1842 - } else 1843 - dc->debug = debug_defaults_diags; 1847 + 1844 1848 // Init the vm_helper 1845 1849 if (dc->vm_helper) 1846 1850 vm_helper_init(dc->vm_helper, 16); ··· 2018 2028 2019 2029 /* Audio, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 2020 2030 if (!resource_construct(num_virtual_links, dc, &pool->base, 2021 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2022 - &res_create_funcs : &res_create_maximus_funcs))) 2023 - goto create_fail; 2031 + &res_create_funcs)) 2032 + goto create_fail; 2024 2033 2025 2034 /* HW Sequencer and Plane caps */ 2026 2035 dcn31_hw_sequencer_construct(dc);
-4
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_init.c
··· 161 161 dc->hwss = dcn32_funcs; 162 162 dc->hwseq->funcs = dcn32_private_funcs; 163 163 164 - if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 165 - dc->hwss.init_hw = dcn20_fpga_init_hw; 166 - dc->hwseq->funcs.init_pipes = NULL; 167 - } 168 164 }
+4 -9
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
··· 2260 2260 2261 2261 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 2262 2262 dc->debug = debug_defaults_drv; 2263 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 2264 - dc->debug = debug_defaults_diags; 2265 - } else 2266 - dc->debug = debug_defaults_diags; 2263 + 2267 2264 // Init the vm_helper 2268 2265 if (dc->vm_helper) 2269 2266 vm_helper_init(dc->vm_helper, 16); ··· 2316 2319 } 2317 2320 2318 2321 /* DML */ 2319 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 2320 - dml_init_instance(&dc->dml, &dcn3_2_soc, &dcn3_2_ip, DML_PROJECT_DCN32); 2322 + dml_init_instance(&dc->dml, &dcn3_2_soc, &dcn3_2_ip, DML_PROJECT_DCN32); 2321 2323 2322 2324 /* IRQ Service */ 2323 2325 init_data.ctx = dc->ctx; ··· 2453 2457 2454 2458 /* Audio, HWSeq, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 2455 2459 if (!resource_construct(num_virtual_links, dc, &pool->base, 2456 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 2457 - &res_create_funcs : &res_create_maximus_funcs))) 2458 - goto create_fail; 2460 + &res_create_funcs)) 2461 + goto create_fail; 2459 2462 2460 2463 /* HW Sequencer init functions and Plane caps */ 2461 2464 dcn32_hw_sequencer_init_functions(dc);
+4 -9
drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c
··· 1801 1801 1802 1802 if (dc->ctx->dce_environment == DCE_ENV_PRODUCTION_DRV) 1803 1803 dc->debug = debug_defaults_drv; 1804 - else if (dc->ctx->dce_environment == DCE_ENV_FPGA_MAXIMUS) { 1805 - dc->debug = debug_defaults_diags; 1806 - } else 1807 - dc->debug = debug_defaults_diags; 1804 + 1808 1805 // Init the vm_helper 1809 1806 if (dc->vm_helper) 1810 1807 vm_helper_init(dc->vm_helper, 16); ··· 1857 1860 } 1858 1861 1859 1862 /* DML */ 1860 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 1861 - dml_init_instance(&dc->dml, &dcn3_21_soc, &dcn3_21_ip, DML_PROJECT_DCN32); 1863 + dml_init_instance(&dc->dml, &dcn3_21_soc, &dcn3_21_ip, DML_PROJECT_DCN32); 1862 1864 1863 1865 /* IRQ Service */ 1864 1866 init_data.ctx = dc->ctx; ··· 1989 1993 1990 1994 /* Audio, HWSeq, Stream Encoders including HPO and virtual, MPC 3D LUTs */ 1991 1995 if (!resource_construct(num_virtual_links, dc, &pool->base, 1992 - (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? 1993 - &res_create_funcs : &res_create_maximus_funcs))) 1994 - goto create_fail; 1996 + &res_create_funcs)) 1997 + goto create_fail; 1995 1998 1996 1999 /* HW Sequencer init functions and Plane caps */ 1997 2000 dcn32_hw_sequencer_init_functions(dc);
+33 -35
drivers/gpu/drm/amd/display/dc/dml/dcn301/dcn301_fpu.c
··· 333 333 memcpy(s, dcn3_01_soc.clock_limits, sizeof(dcn3_01_soc.clock_limits)); 334 334 335 335 /* Default clock levels are used for diags, which may lead to overclocking. */ 336 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 337 - dcn3_01_ip.max_num_otg = pool->base.res_cap->num_timing_generator; 338 - dcn3_01_ip.max_num_dpp = pool->base.pipe_count; 339 - dcn3_01_soc.num_chans = bw_params->num_channels; 336 + dcn3_01_ip.max_num_otg = pool->base.res_cap->num_timing_generator; 337 + dcn3_01_ip.max_num_dpp = pool->base.pipe_count; 338 + dcn3_01_soc.num_chans = bw_params->num_channels; 340 339 341 - ASSERT(clk_table->num_entries); 342 - for (i = 0; i < clk_table->num_entries; i++) { 343 - /* loop backwards*/ 344 - for (closest_clk_lvl = 0, j = dcn3_01_soc.num_states - 1; j >= 0; j--) { 345 - if ((unsigned int) dcn3_01_soc.clock_limits[j].dcfclk_mhz <= clk_table->entries[i].dcfclk_mhz) { 346 - closest_clk_lvl = j; 347 - break; 348 - } 340 + ASSERT(clk_table->num_entries); 341 + for (i = 0; i < clk_table->num_entries; i++) { 342 + /* loop backwards*/ 343 + for (closest_clk_lvl = 0, j = dcn3_01_soc.num_states - 1; j >= 0; j--) { 344 + if ((unsigned int) dcn3_01_soc.clock_limits[j].dcfclk_mhz <= clk_table->entries[i].dcfclk_mhz) { 345 + closest_clk_lvl = j; 346 + break; 349 347 } 350 - 351 - s[i].state = i; 352 - s[i].dcfclk_mhz = clk_table->entries[i].dcfclk_mhz; 353 - s[i].fabricclk_mhz = clk_table->entries[i].fclk_mhz; 354 - s[i].socclk_mhz = clk_table->entries[i].socclk_mhz; 355 - s[i].dram_speed_mts = clk_table->entries[i].memclk_mhz * 2; 356 - 357 - s[i].dispclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dispclk_mhz; 358 - s[i].dppclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dppclk_mhz; 359 - s[i].dram_bw_per_chan_gbps = 360 - dcn3_01_soc.clock_limits[closest_clk_lvl].dram_bw_per_chan_gbps; 361 - s[i].dscclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dscclk_mhz; 362 - s[i].dtbclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dtbclk_mhz; 363 - s[i].phyclk_d18_mhz = 364 - dcn3_01_soc.clock_limits[closest_clk_lvl].phyclk_d18_mhz; 365 - s[i].phyclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].phyclk_mhz; 366 348 } 367 349 368 - if (clk_table->num_entries) { 369 - dcn3_01_soc.num_states = clk_table->num_entries; 370 - /* duplicate last level */ 371 - s[dcn3_01_soc.num_states] = 372 - dcn3_01_soc.clock_limits[dcn3_01_soc.num_states - 1]; 373 - s[dcn3_01_soc.num_states].state = dcn3_01_soc.num_states; 374 - } 350 + s[i].state = i; 351 + s[i].dcfclk_mhz = clk_table->entries[i].dcfclk_mhz; 352 + s[i].fabricclk_mhz = clk_table->entries[i].fclk_mhz; 353 + s[i].socclk_mhz = clk_table->entries[i].socclk_mhz; 354 + s[i].dram_speed_mts = clk_table->entries[i].memclk_mhz * 2; 355 + 356 + s[i].dispclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dispclk_mhz; 357 + s[i].dppclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dppclk_mhz; 358 + s[i].dram_bw_per_chan_gbps = 359 + dcn3_01_soc.clock_limits[closest_clk_lvl].dram_bw_per_chan_gbps; 360 + s[i].dscclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dscclk_mhz; 361 + s[i].dtbclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].dtbclk_mhz; 362 + s[i].phyclk_d18_mhz = 363 + dcn3_01_soc.clock_limits[closest_clk_lvl].phyclk_d18_mhz; 364 + s[i].phyclk_mhz = dcn3_01_soc.clock_limits[closest_clk_lvl].phyclk_mhz; 365 + } 366 + 367 + if (clk_table->num_entries) { 368 + dcn3_01_soc.num_states = clk_table->num_entries; 369 + /* duplicate last level */ 370 + s[dcn3_01_soc.num_states] = 371 + dcn3_01_soc.clock_limits[dcn3_01_soc.num_states - 1]; 372 + s[dcn3_01_soc.num_states].state = dcn3_01_soc.num_states; 375 373 } 376 374 377 375 memcpy(dcn3_01_soc.clock_limits, s, sizeof(dcn3_01_soc.clock_limits));
+103 -118
drivers/gpu/drm/amd/display/dc/dml/dcn31/dcn31_fpu.c
··· 582 582 struct _vcs_dpi_voltage_scaling_st *s = dc->scratch.update_bw_bounding_box.clock_limits; 583 583 struct clk_limit_table *clk_table = &bw_params->clk_table; 584 584 unsigned int i, closest_clk_lvl; 585 + int max_dispclk_mhz = 0, max_dppclk_mhz = 0; 585 586 int j; 586 587 587 588 dc_assert_fp_enabled(); ··· 590 589 memcpy(s, dcn3_1_soc.clock_limits, sizeof(dcn3_1_soc.clock_limits)); 591 590 592 591 // Default clock levels are used for diags, which may lead to overclocking. 593 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 594 - int max_dispclk_mhz = 0, max_dppclk_mhz = 0; 592 + dcn3_1_ip.max_num_otg = dc->res_pool->res_cap->num_timing_generator; 593 + dcn3_1_ip.max_num_dpp = dc->res_pool->pipe_count; 594 + dcn3_1_soc.num_chans = bw_params->num_channels; 595 595 596 - dcn3_1_ip.max_num_otg = dc->res_pool->res_cap->num_timing_generator; 597 - dcn3_1_ip.max_num_dpp = dc->res_pool->pipe_count; 598 - dcn3_1_soc.num_chans = bw_params->num_channels; 596 + ASSERT(clk_table->num_entries); 599 597 600 - ASSERT(clk_table->num_entries); 598 + /* Prepass to find max clocks independent of voltage level. */ 599 + for (i = 0; i < clk_table->num_entries; ++i) { 600 + if (clk_table->entries[i].dispclk_mhz > max_dispclk_mhz) 601 + max_dispclk_mhz = clk_table->entries[i].dispclk_mhz; 602 + if (clk_table->entries[i].dppclk_mhz > max_dppclk_mhz) 603 + max_dppclk_mhz = clk_table->entries[i].dppclk_mhz; 604 + } 601 605 602 - /* Prepass to find max clocks independent of voltage level. */ 603 - for (i = 0; i < clk_table->num_entries; ++i) { 604 - if (clk_table->entries[i].dispclk_mhz > max_dispclk_mhz) 605 - max_dispclk_mhz = clk_table->entries[i].dispclk_mhz; 606 - if (clk_table->entries[i].dppclk_mhz > max_dppclk_mhz) 607 - max_dppclk_mhz = clk_table->entries[i].dppclk_mhz; 608 - } 609 - 610 - for (i = 0; i < clk_table->num_entries; i++) { 611 - /* loop backwards*/ 612 - for (closest_clk_lvl = 0, j = dcn3_1_soc.num_states - 1; j >= 0; j--) { 613 - if ((unsigned int) dcn3_1_soc.clock_limits[j].dcfclk_mhz <= clk_table->entries[i].dcfclk_mhz) { 614 - closest_clk_lvl = j; 615 - break; 616 - } 606 + for (i = 0; i < clk_table->num_entries; i++) { 607 + /* loop backwards*/ 608 + for (closest_clk_lvl = 0, j = dcn3_1_soc.num_states - 1; j >= 0; j--) { 609 + if ((unsigned int) dcn3_1_soc.clock_limits[j].dcfclk_mhz <= clk_table->entries[i].dcfclk_mhz) { 610 + closest_clk_lvl = j; 611 + break; 617 612 } 618 - 619 - s[i].state = i; 620 - 621 - /* Clocks dependent on voltage level. */ 622 - s[i].dcfclk_mhz = clk_table->entries[i].dcfclk_mhz; 623 - s[i].fabricclk_mhz = clk_table->entries[i].fclk_mhz; 624 - s[i].socclk_mhz = clk_table->entries[i].socclk_mhz; 625 - s[i].dram_speed_mts = clk_table->entries[i].memclk_mhz * 626 - 2 * clk_table->entries[i].wck_ratio; 627 - 628 - /* Clocks independent of voltage level. */ 629 - s[i].dispclk_mhz = max_dispclk_mhz ? max_dispclk_mhz : 630 - dcn3_1_soc.clock_limits[closest_clk_lvl].dispclk_mhz; 631 - 632 - s[i].dppclk_mhz = max_dppclk_mhz ? max_dppclk_mhz : 633 - dcn3_1_soc.clock_limits[closest_clk_lvl].dppclk_mhz; 634 - 635 - s[i].dram_bw_per_chan_gbps = 636 - dcn3_1_soc.clock_limits[closest_clk_lvl].dram_bw_per_chan_gbps; 637 - s[i].dscclk_mhz = dcn3_1_soc.clock_limits[closest_clk_lvl].dscclk_mhz; 638 - s[i].dtbclk_mhz = dcn3_1_soc.clock_limits[closest_clk_lvl].dtbclk_mhz; 639 - s[i].phyclk_d18_mhz = 640 - dcn3_1_soc.clock_limits[closest_clk_lvl].phyclk_d18_mhz; 641 - s[i].phyclk_mhz = dcn3_1_soc.clock_limits[closest_clk_lvl].phyclk_mhz; 642 613 } 643 - if (clk_table->num_entries) { 644 - dcn3_1_soc.num_states = clk_table->num_entries; 645 - } 614 + 615 + s[i].state = i; 616 + 617 + /* Clocks dependent on voltage level. */ 618 + s[i].dcfclk_mhz = clk_table->entries[i].dcfclk_mhz; 619 + s[i].fabricclk_mhz = clk_table->entries[i].fclk_mhz; 620 + s[i].socclk_mhz = clk_table->entries[i].socclk_mhz; 621 + s[i].dram_speed_mts = clk_table->entries[i].memclk_mhz * 622 + 2 * clk_table->entries[i].wck_ratio; 623 + 624 + /* Clocks independent of voltage level. */ 625 + s[i].dispclk_mhz = max_dispclk_mhz ? max_dispclk_mhz : 626 + dcn3_1_soc.clock_limits[closest_clk_lvl].dispclk_mhz; 627 + 628 + s[i].dppclk_mhz = max_dppclk_mhz ? max_dppclk_mhz : 629 + dcn3_1_soc.clock_limits[closest_clk_lvl].dppclk_mhz; 630 + 631 + s[i].dram_bw_per_chan_gbps = 632 + dcn3_1_soc.clock_limits[closest_clk_lvl].dram_bw_per_chan_gbps; 633 + s[i].dscclk_mhz = dcn3_1_soc.clock_limits[closest_clk_lvl].dscclk_mhz; 634 + s[i].dtbclk_mhz = dcn3_1_soc.clock_limits[closest_clk_lvl].dtbclk_mhz; 635 + s[i].phyclk_d18_mhz = 636 + dcn3_1_soc.clock_limits[closest_clk_lvl].phyclk_d18_mhz; 637 + s[i].phyclk_mhz = dcn3_1_soc.clock_limits[closest_clk_lvl].phyclk_mhz; 638 + } 639 + if (clk_table->num_entries) { 640 + dcn3_1_soc.num_states = clk_table->num_entries; 646 641 } 647 642 648 643 memcpy(dcn3_1_soc.clock_limits, s, sizeof(dcn3_1_soc.clock_limits)); ··· 652 655 dcn3_1_soc.dram_clock_change_latency_us = dc->debug.dram_clock_change_latency_ns / 1000; 653 656 } 654 657 655 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 656 - dml_init_instance(&dc->dml, &dcn3_1_soc, &dcn3_1_ip, DML_PROJECT_DCN31); 657 - else 658 - dml_init_instance(&dc->dml, &dcn3_1_soc, &dcn3_1_ip, DML_PROJECT_DCN31_FPGA); 658 + dml_init_instance(&dc->dml, &dcn3_1_soc, &dcn3_1_ip, DML_PROJECT_DCN31); 659 659 } 660 660 661 661 void dcn315_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params) ··· 713 719 dcn3_15_soc.dram_clock_change_latency_us = dc->debug.dram_clock_change_latency_ns / 1000; 714 720 } 715 721 716 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 717 - dml_init_instance(&dc->dml, &dcn3_15_soc, &dcn3_15_ip, DML_PROJECT_DCN315); 718 - else 719 - dml_init_instance(&dc->dml, &dcn3_15_soc, &dcn3_15_ip, DML_PROJECT_DCN31_FPGA); 722 + dml_init_instance(&dc->dml, &dcn3_15_soc, &dcn3_15_ip, DML_PROJECT_DCN315); 720 723 } 721 724 722 725 void dcn316_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params) ··· 729 738 memcpy(s, dcn3_16_soc.clock_limits, sizeof(dcn3_16_soc.clock_limits)); 730 739 731 740 // Default clock levels are used for diags, which may lead to overclocking. 732 - if (!IS_DIAG_DC(dc->ctx->dce_environment)) { 741 + dcn3_16_ip.max_num_otg = dc->res_pool->res_cap->num_timing_generator; 742 + dcn3_16_ip.max_num_dpp = dc->res_pool->pipe_count; 743 + dcn3_16_soc.num_chans = bw_params->num_channels; 733 744 734 - dcn3_16_ip.max_num_otg = dc->res_pool->res_cap->num_timing_generator; 735 - dcn3_16_ip.max_num_dpp = dc->res_pool->pipe_count; 736 - dcn3_16_soc.num_chans = bw_params->num_channels; 745 + ASSERT(clk_table->num_entries); 737 746 738 - ASSERT(clk_table->num_entries); 747 + /* Prepass to find max clocks independent of voltage level. */ 748 + for (i = 0; i < clk_table->num_entries; ++i) { 749 + if (clk_table->entries[i].dispclk_mhz > max_dispclk_mhz) 750 + max_dispclk_mhz = clk_table->entries[i].dispclk_mhz; 751 + if (clk_table->entries[i].dppclk_mhz > max_dppclk_mhz) 752 + max_dppclk_mhz = clk_table->entries[i].dppclk_mhz; 753 + } 739 754 740 - /* Prepass to find max clocks independent of voltage level. */ 741 - for (i = 0; i < clk_table->num_entries; ++i) { 742 - if (clk_table->entries[i].dispclk_mhz > max_dispclk_mhz) 743 - max_dispclk_mhz = clk_table->entries[i].dispclk_mhz; 744 - if (clk_table->entries[i].dppclk_mhz > max_dppclk_mhz) 745 - max_dppclk_mhz = clk_table->entries[i].dppclk_mhz; 755 + for (i = 0; i < clk_table->num_entries; i++) { 756 + /* loop backwards*/ 757 + for (closest_clk_lvl = 0, j = dcn3_16_soc.num_states - 1; j >= 0; j--) { 758 + if ((unsigned int) dcn3_16_soc.clock_limits[j].dcfclk_mhz <= 759 + clk_table->entries[i].dcfclk_mhz) { 760 + closest_clk_lvl = j; 761 + break; 762 + } 763 + } 764 + // Ported from DCN315 765 + if (clk_table->num_entries == 1) { 766 + /*smu gives one DPM level, let's take the highest one*/ 767 + closest_clk_lvl = dcn3_16_soc.num_states - 1; 746 768 } 747 769 748 - for (i = 0; i < clk_table->num_entries; i++) { 749 - /* loop backwards*/ 750 - for (closest_clk_lvl = 0, j = dcn3_16_soc.num_states - 1; j >= 0; j--) { 751 - if ((unsigned int) dcn3_16_soc.clock_limits[j].dcfclk_mhz <= 752 - clk_table->entries[i].dcfclk_mhz) { 753 - closest_clk_lvl = j; 754 - break; 755 - } 756 - } 757 - // Ported from DCN315 758 - if (clk_table->num_entries == 1) { 759 - /*smu gives one DPM level, let's take the highest one*/ 760 - closest_clk_lvl = dcn3_16_soc.num_states - 1; 761 - } 770 + s[i].state = i; 762 771 763 - s[i].state = i; 764 - 765 - /* Clocks dependent on voltage level. */ 766 - s[i].dcfclk_mhz = clk_table->entries[i].dcfclk_mhz; 767 - if (clk_table->num_entries == 1 && 768 - s[i].dcfclk_mhz < 769 - dcn3_16_soc.clock_limits[closest_clk_lvl].dcfclk_mhz) { 770 - /*SMU fix not released yet*/ 771 - s[i].dcfclk_mhz = 772 - dcn3_16_soc.clock_limits[closest_clk_lvl].dcfclk_mhz; 773 - } 774 - s[i].fabricclk_mhz = clk_table->entries[i].fclk_mhz; 775 - s[i].socclk_mhz = clk_table->entries[i].socclk_mhz; 776 - s[i].dram_speed_mts = clk_table->entries[i].memclk_mhz * 777 - 2 * clk_table->entries[i].wck_ratio; 778 - 779 - /* Clocks independent of voltage level. */ 780 - s[i].dispclk_mhz = max_dispclk_mhz ? max_dispclk_mhz : 781 - dcn3_16_soc.clock_limits[closest_clk_lvl].dispclk_mhz; 782 - 783 - s[i].dppclk_mhz = max_dppclk_mhz ? max_dppclk_mhz : 784 - dcn3_16_soc.clock_limits[closest_clk_lvl].dppclk_mhz; 785 - 786 - s[i].dram_bw_per_chan_gbps = 787 - dcn3_16_soc.clock_limits[closest_clk_lvl].dram_bw_per_chan_gbps; 788 - s[i].dscclk_mhz = dcn3_16_soc.clock_limits[closest_clk_lvl].dscclk_mhz; 789 - s[i].dtbclk_mhz = dcn3_16_soc.clock_limits[closest_clk_lvl].dtbclk_mhz; 790 - s[i].phyclk_d18_mhz = 791 - dcn3_16_soc.clock_limits[closest_clk_lvl].phyclk_d18_mhz; 792 - s[i].phyclk_mhz = dcn3_16_soc.clock_limits[closest_clk_lvl].phyclk_mhz; 772 + /* Clocks dependent on voltage level. */ 773 + s[i].dcfclk_mhz = clk_table->entries[i].dcfclk_mhz; 774 + if (clk_table->num_entries == 1 && 775 + s[i].dcfclk_mhz < 776 + dcn3_16_soc.clock_limits[closest_clk_lvl].dcfclk_mhz) { 777 + /*SMU fix not released yet*/ 778 + s[i].dcfclk_mhz = 779 + dcn3_16_soc.clock_limits[closest_clk_lvl].dcfclk_mhz; 793 780 } 794 - if (clk_table->num_entries) { 795 - dcn3_16_soc.num_states = clk_table->num_entries; 796 - } 781 + s[i].fabricclk_mhz = clk_table->entries[i].fclk_mhz; 782 + s[i].socclk_mhz = clk_table->entries[i].socclk_mhz; 783 + s[i].dram_speed_mts = clk_table->entries[i].memclk_mhz * 784 + 2 * clk_table->entries[i].wck_ratio; 785 + 786 + /* Clocks independent of voltage level. */ 787 + s[i].dispclk_mhz = max_dispclk_mhz ? max_dispclk_mhz : 788 + dcn3_16_soc.clock_limits[closest_clk_lvl].dispclk_mhz; 789 + 790 + s[i].dppclk_mhz = max_dppclk_mhz ? max_dppclk_mhz : 791 + dcn3_16_soc.clock_limits[closest_clk_lvl].dppclk_mhz; 792 + 793 + s[i].dram_bw_per_chan_gbps = 794 + dcn3_16_soc.clock_limits[closest_clk_lvl].dram_bw_per_chan_gbps; 795 + s[i].dscclk_mhz = dcn3_16_soc.clock_limits[closest_clk_lvl].dscclk_mhz; 796 + s[i].dtbclk_mhz = dcn3_16_soc.clock_limits[closest_clk_lvl].dtbclk_mhz; 797 + s[i].phyclk_d18_mhz = 798 + dcn3_16_soc.clock_limits[closest_clk_lvl].phyclk_d18_mhz; 799 + s[i].phyclk_mhz = dcn3_16_soc.clock_limits[closest_clk_lvl].phyclk_mhz; 800 + } 801 + if (clk_table->num_entries) { 802 + dcn3_16_soc.num_states = clk_table->num_entries; 797 803 } 798 804 799 805 memcpy(dcn3_16_soc.clock_limits, s, sizeof(dcn3_16_soc.clock_limits)); ··· 805 817 dcn3_16_soc.dram_clock_change_latency_us = dc->debug.dram_clock_change_latency_ns / 1000; 806 818 } 807 819 808 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 809 - dml_init_instance(&dc->dml, &dcn3_16_soc, &dcn3_16_ip, DML_PROJECT_DCN31); 810 - else 811 - dml_init_instance(&dc->dml, &dcn3_16_soc, &dcn3_16_ip, DML_PROJECT_DCN31_FPGA); 820 + dml_init_instance(&dc->dml, &dcn3_16_soc, &dcn3_16_ip, DML_PROJECT_DCN31); 812 821 } 813 822 814 823 int dcn_get_max_non_odm_pix_rate_100hz(struct _vcs_dpi_soc_bounding_box_st *soc)
-8
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_rq_dlg_calc_31.c
··· 1432 1432 dml_print("DML_DLG: %s: disp_dlg_regs->dst_y_per_vm_flip = 0x%x\n", __func__, disp_dlg_regs->dst_y_per_vm_flip); 1433 1433 dml_print("DML_DLG: %s: disp_dlg_regs->dst_y_per_row_flip = 0x%x\n", __func__, disp_dlg_regs->dst_y_per_row_flip); 1434 1434 1435 - // hack for FPGA 1436 - if (mode_lib->project == DML_PROJECT_DCN31_FPGA) { 1437 - if (disp_dlg_regs->vratio_prefetch >= (unsigned int) dml_pow(2, 22)) { 1438 - disp_dlg_regs->vratio_prefetch = (unsigned int) dml_pow(2, 22) - 1; 1439 - dml_print("vratio_prefetch exceed the max value, the register field is [21:0]\n"); 1440 - } 1441 - } 1442 - 1443 1435 disp_dlg_regs->refcyc_per_pte_group_vblank_l = (unsigned int) (dst_y_per_row_vblank * (double) htotal * ref_freq_to_pix_freq / (double) dpte_groups_per_row_ub_l); 1444 1436 ASSERT(disp_dlg_regs->refcyc_per_pte_group_vblank_l < (unsigned int)dml_pow(2, 13)); 1445 1437
+1 -5
drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c
··· 190 190 dc_assert_fp_enabled(); 191 191 192 192 // Default clock levels are used for diags, which may lead to overclocking. 193 - if (!IS_DIAG_DC(dc->ctx->dce_environment) && dc->config.use_default_clock_table == false) { 194 - 193 + if (dc->config.use_default_clock_table == false) { 195 194 dcn3_14_ip.max_num_otg = dc->res_pool->res_cap->num_timing_generator; 196 195 dcn3_14_ip.max_num_dpp = dc->res_pool->pipe_count; 197 196 ··· 266 267 267 268 dcn20_patch_bounding_box(dc, &dcn3_14_soc); 268 269 269 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) 270 270 dml_init_instance(&dc->dml, &dcn3_14_soc, &dcn3_14_ip, DML_PROJECT_DCN314); 271 - else 272 - dml_init_instance(&dc->dml, &dcn3_14_soc, &dcn3_14_ip, DML_PROJECT_DCN31_FPGA); 273 271 } 274 272 275 273 static bool is_dual_plane(enum surface_pixel_format format)
-8
drivers/gpu/drm/amd/display/dc/dml/dcn314/display_rq_dlg_calc_314.c
··· 1520 1520 dml_print("DML_DLG: %s: disp_dlg_regs->dst_y_per_vm_flip = 0x%x\n", __func__, disp_dlg_regs->dst_y_per_vm_flip); 1521 1521 dml_print("DML_DLG: %s: disp_dlg_regs->dst_y_per_row_flip = 0x%x\n", __func__, disp_dlg_regs->dst_y_per_row_flip); 1522 1522 1523 - // hack for FPGA 1524 - if (mode_lib->project == DML_PROJECT_DCN31_FPGA) { 1525 - if (disp_dlg_regs->vratio_prefetch >= (unsigned int) dml_pow(2, 22)) { 1526 - disp_dlg_regs->vratio_prefetch = (unsigned int) dml_pow(2, 22) - 1; 1527 - dml_print("vratio_prefetch exceed the max value, the register field is [21:0]\n"); 1528 - } 1529 - } 1530 - 1531 1523 disp_dlg_regs->refcyc_per_pte_group_vblank_l = (unsigned int) (dst_y_per_row_vblank * (double) htotal * ref_freq_to_pix_freq / (double) dpte_groups_per_row_ub_l); 1532 1524 ASSERT(disp_dlg_regs->refcyc_per_pte_group_vblank_l < (unsigned int)dml_pow(2, 13)); 1533 1525
+70 -72
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
··· 2530 2530 { 2531 2531 dc_assert_fp_enabled(); 2532 2532 2533 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 2534 - /* Overrides from dc->config options */ 2535 - dcn3_2_ip.clamp_min_dcfclk = dc->config.clamp_min_dcfclk; 2533 + /* Overrides from dc->config options */ 2534 + dcn3_2_ip.clamp_min_dcfclk = dc->config.clamp_min_dcfclk; 2536 2535 2537 - /* Override from passed dc->bb_overrides if available*/ 2538 - if ((int)(dcn3_2_soc.sr_exit_time_us * 1000) != dc->bb_overrides.sr_exit_time_ns 2539 - && dc->bb_overrides.sr_exit_time_ns) { 2540 - dcn3_2_soc.sr_exit_time_us = dc->bb_overrides.sr_exit_time_ns / 1000.0; 2541 - } 2542 - 2543 - if ((int)(dcn3_2_soc.sr_enter_plus_exit_time_us * 1000) 2544 - != dc->bb_overrides.sr_enter_plus_exit_time_ns 2545 - && dc->bb_overrides.sr_enter_plus_exit_time_ns) { 2546 - dcn3_2_soc.sr_enter_plus_exit_time_us = 2547 - dc->bb_overrides.sr_enter_plus_exit_time_ns / 1000.0; 2548 - } 2549 - 2550 - if ((int)(dcn3_2_soc.urgent_latency_us * 1000) != dc->bb_overrides.urgent_latency_ns 2551 - && dc->bb_overrides.urgent_latency_ns) { 2552 - dcn3_2_soc.urgent_latency_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 2553 - dcn3_2_soc.urgent_latency_pixel_data_only_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 2554 - } 2555 - 2556 - if ((int)(dcn3_2_soc.dram_clock_change_latency_us * 1000) 2557 - != dc->bb_overrides.dram_clock_change_latency_ns 2558 - && dc->bb_overrides.dram_clock_change_latency_ns) { 2559 - dcn3_2_soc.dram_clock_change_latency_us = 2560 - dc->bb_overrides.dram_clock_change_latency_ns / 1000.0; 2561 - } 2562 - 2563 - if ((int)(dcn3_2_soc.fclk_change_latency_us * 1000) 2564 - != dc->bb_overrides.fclk_clock_change_latency_ns 2565 - && dc->bb_overrides.fclk_clock_change_latency_ns) { 2566 - dcn3_2_soc.fclk_change_latency_us = 2567 - dc->bb_overrides.fclk_clock_change_latency_ns / 1000; 2568 - } 2569 - 2570 - if ((int)(dcn3_2_soc.dummy_pstate_latency_us * 1000) 2571 - != dc->bb_overrides.dummy_clock_change_latency_ns 2572 - && dc->bb_overrides.dummy_clock_change_latency_ns) { 2573 - dcn3_2_soc.dummy_pstate_latency_us = 2574 - dc->bb_overrides.dummy_clock_change_latency_ns / 1000.0; 2575 - } 2576 - 2577 - /* Override from VBIOS if VBIOS bb_info available */ 2578 - if (dc->ctx->dc_bios->funcs->get_soc_bb_info) { 2579 - struct bp_soc_bb_info bb_info = {0}; 2580 - 2581 - if (dc->ctx->dc_bios->funcs->get_soc_bb_info(dc->ctx->dc_bios, &bb_info) == BP_RESULT_OK) { 2582 - if (bb_info.dram_clock_change_latency_100ns > 0) 2583 - dcn3_2_soc.dram_clock_change_latency_us = 2584 - bb_info.dram_clock_change_latency_100ns * 10; 2585 - 2586 - if (bb_info.dram_sr_enter_exit_latency_100ns > 0) 2587 - dcn3_2_soc.sr_enter_plus_exit_time_us = 2588 - bb_info.dram_sr_enter_exit_latency_100ns * 10; 2589 - 2590 - if (bb_info.dram_sr_exit_latency_100ns > 0) 2591 - dcn3_2_soc.sr_exit_time_us = 2592 - bb_info.dram_sr_exit_latency_100ns * 10; 2593 - } 2594 - } 2595 - 2596 - /* Override from VBIOS for num_chan */ 2597 - if (dc->ctx->dc_bios->vram_info.num_chans) { 2598 - dcn3_2_soc.num_chans = dc->ctx->dc_bios->vram_info.num_chans; 2599 - dcn3_2_soc.mall_allocated_for_dcn_mbytes = (double)(dcn32_calc_num_avail_chans_for_mall(dc, 2600 - dc->ctx->dc_bios->vram_info.num_chans) * dc->caps.mall_size_per_mem_channel); 2601 - } 2602 - 2603 - if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) 2604 - dcn3_2_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; 2536 + /* Override from passed dc->bb_overrides if available*/ 2537 + if ((int)(dcn3_2_soc.sr_exit_time_us * 1000) != dc->bb_overrides.sr_exit_time_ns 2538 + && dc->bb_overrides.sr_exit_time_ns) { 2539 + dcn3_2_soc.sr_exit_time_us = dc->bb_overrides.sr_exit_time_ns / 1000.0; 2605 2540 } 2541 + 2542 + if ((int)(dcn3_2_soc.sr_enter_plus_exit_time_us * 1000) 2543 + != dc->bb_overrides.sr_enter_plus_exit_time_ns 2544 + && dc->bb_overrides.sr_enter_plus_exit_time_ns) { 2545 + dcn3_2_soc.sr_enter_plus_exit_time_us = 2546 + dc->bb_overrides.sr_enter_plus_exit_time_ns / 1000.0; 2547 + } 2548 + 2549 + if ((int)(dcn3_2_soc.urgent_latency_us * 1000) != dc->bb_overrides.urgent_latency_ns 2550 + && dc->bb_overrides.urgent_latency_ns) { 2551 + dcn3_2_soc.urgent_latency_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 2552 + dcn3_2_soc.urgent_latency_pixel_data_only_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 2553 + } 2554 + 2555 + if ((int)(dcn3_2_soc.dram_clock_change_latency_us * 1000) 2556 + != dc->bb_overrides.dram_clock_change_latency_ns 2557 + && dc->bb_overrides.dram_clock_change_latency_ns) { 2558 + dcn3_2_soc.dram_clock_change_latency_us = 2559 + dc->bb_overrides.dram_clock_change_latency_ns / 1000.0; 2560 + } 2561 + 2562 + if ((int)(dcn3_2_soc.fclk_change_latency_us * 1000) 2563 + != dc->bb_overrides.fclk_clock_change_latency_ns 2564 + && dc->bb_overrides.fclk_clock_change_latency_ns) { 2565 + dcn3_2_soc.fclk_change_latency_us = 2566 + dc->bb_overrides.fclk_clock_change_latency_ns / 1000; 2567 + } 2568 + 2569 + if ((int)(dcn3_2_soc.dummy_pstate_latency_us * 1000) 2570 + != dc->bb_overrides.dummy_clock_change_latency_ns 2571 + && dc->bb_overrides.dummy_clock_change_latency_ns) { 2572 + dcn3_2_soc.dummy_pstate_latency_us = 2573 + dc->bb_overrides.dummy_clock_change_latency_ns / 1000.0; 2574 + } 2575 + 2576 + /* Override from VBIOS if VBIOS bb_info available */ 2577 + if (dc->ctx->dc_bios->funcs->get_soc_bb_info) { 2578 + struct bp_soc_bb_info bb_info = {0}; 2579 + 2580 + if (dc->ctx->dc_bios->funcs->get_soc_bb_info(dc->ctx->dc_bios, &bb_info) == BP_RESULT_OK) { 2581 + if (bb_info.dram_clock_change_latency_100ns > 0) 2582 + dcn3_2_soc.dram_clock_change_latency_us = 2583 + bb_info.dram_clock_change_latency_100ns * 10; 2584 + 2585 + if (bb_info.dram_sr_enter_exit_latency_100ns > 0) 2586 + dcn3_2_soc.sr_enter_plus_exit_time_us = 2587 + bb_info.dram_sr_enter_exit_latency_100ns * 10; 2588 + 2589 + if (bb_info.dram_sr_exit_latency_100ns > 0) 2590 + dcn3_2_soc.sr_exit_time_us = 2591 + bb_info.dram_sr_exit_latency_100ns * 10; 2592 + } 2593 + } 2594 + 2595 + /* Override from VBIOS for num_chan */ 2596 + if (dc->ctx->dc_bios->vram_info.num_chans) { 2597 + dcn3_2_soc.num_chans = dc->ctx->dc_bios->vram_info.num_chans; 2598 + dcn3_2_soc.mall_allocated_for_dcn_mbytes = (double)(dcn32_calc_num_avail_chans_for_mall(dc, 2599 + dc->ctx->dc_bios->vram_info.num_chans) * dc->caps.mall_size_per_mem_channel); 2600 + } 2601 + 2602 + if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) 2603 + dcn3_2_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; 2606 2604 2607 2605 /* DML DSC delay factor workaround */ 2608 2606 dcn3_2_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0; ··· 2612 2614 dc->dml.soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0; 2613 2615 2614 2616 /* Overrides Clock levelsfrom CLK Mgr table entries as reported by PM FW */ 2615 - if ((!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) && (bw_params->clk_table.entries[0].memclk_mhz)) { 2617 + if (bw_params->clk_table.entries[0].memclk_mhz) { 2616 2618 if (dc->debug.use_legacy_soc_bb_mechanism) { 2617 2619 unsigned int i = 0, j = 0, num_states = 0; 2618 2620
+69 -73
drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c
··· 471 471 void dcn321_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_params) 472 472 { 473 473 dc_assert_fp_enabled(); 474 - if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { 475 - /* Overrides from dc->config options */ 476 - dcn3_21_ip.clamp_min_dcfclk = dc->config.clamp_min_dcfclk; 474 + /* Overrides from dc->config options */ 475 + dcn3_21_ip.clamp_min_dcfclk = dc->config.clamp_min_dcfclk; 477 476 478 - /* Override from passed dc->bb_overrides if available*/ 479 - if ((int)(dcn3_21_soc.sr_exit_time_us * 1000) != dc->bb_overrides.sr_exit_time_ns 480 - && dc->bb_overrides.sr_exit_time_ns) { 481 - dcn3_21_soc.sr_exit_time_us = dc->bb_overrides.sr_exit_time_ns / 1000.0; 482 - } 483 - 484 - if ((int)(dcn3_21_soc.sr_enter_plus_exit_time_us * 1000) 485 - != dc->bb_overrides.sr_enter_plus_exit_time_ns 486 - && dc->bb_overrides.sr_enter_plus_exit_time_ns) { 487 - dcn3_21_soc.sr_enter_plus_exit_time_us = 488 - dc->bb_overrides.sr_enter_plus_exit_time_ns / 1000.0; 489 - } 490 - 491 - if ((int)(dcn3_21_soc.urgent_latency_us * 1000) != dc->bb_overrides.urgent_latency_ns 492 - && dc->bb_overrides.urgent_latency_ns) { 493 - dcn3_21_soc.urgent_latency_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 494 - dcn3_21_soc.urgent_latency_pixel_data_only_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 495 - } 496 - 497 - if ((int)(dcn3_21_soc.dram_clock_change_latency_us * 1000) 498 - != dc->bb_overrides.dram_clock_change_latency_ns 499 - && dc->bb_overrides.dram_clock_change_latency_ns) { 500 - dcn3_21_soc.dram_clock_change_latency_us = 501 - dc->bb_overrides.dram_clock_change_latency_ns / 1000.0; 502 - } 503 - 504 - if ((int)(dcn3_21_soc.fclk_change_latency_us * 1000) 505 - != dc->bb_overrides.fclk_clock_change_latency_ns 506 - && dc->bb_overrides.fclk_clock_change_latency_ns) { 507 - dcn3_21_soc.fclk_change_latency_us = 508 - dc->bb_overrides.fclk_clock_change_latency_ns / 1000; 509 - } 510 - 511 - if ((int)(dcn3_21_soc.dummy_pstate_latency_us * 1000) 512 - != dc->bb_overrides.dummy_clock_change_latency_ns 513 - && dc->bb_overrides.dummy_clock_change_latency_ns) { 514 - dcn3_21_soc.dummy_pstate_latency_us = 515 - dc->bb_overrides.dummy_clock_change_latency_ns / 1000.0; 516 - } 517 - 518 - /* Override from VBIOS if VBIOS bb_info available */ 519 - if (dc->ctx->dc_bios->funcs->get_soc_bb_info) { 520 - struct bp_soc_bb_info bb_info = {0}; 521 - 522 - if (dc->ctx->dc_bios->funcs->get_soc_bb_info(dc->ctx->dc_bios, &bb_info) == BP_RESULT_OK) { 523 - if (bb_info.dram_clock_change_latency_100ns > 0) 524 - dcn3_21_soc.dram_clock_change_latency_us = 525 - bb_info.dram_clock_change_latency_100ns * 10; 526 - 527 - if (bb_info.dram_sr_enter_exit_latency_100ns > 0) 528 - dcn3_21_soc.sr_enter_plus_exit_time_us = 529 - bb_info.dram_sr_enter_exit_latency_100ns * 10; 530 - 531 - if (bb_info.dram_sr_exit_latency_100ns > 0) 532 - dcn3_21_soc.sr_exit_time_us = 533 - bb_info.dram_sr_exit_latency_100ns * 10; 534 - } 535 - } 536 - 537 - /* Override from VBIOS for num_chan */ 538 - if (dc->ctx->dc_bios->vram_info.num_chans) { 539 - dcn3_21_soc.num_chans = dc->ctx->dc_bios->vram_info.num_chans; 540 - dcn3_21_soc.mall_allocated_for_dcn_mbytes = (double)(dcn32_calc_num_avail_chans_for_mall(dc, 541 - dc->ctx->dc_bios->vram_info.num_chans) * dc->caps.mall_size_per_mem_channel); 542 - } 543 - 544 - if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) 545 - dcn3_21_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; 477 + /* Override from passed dc->bb_overrides if available*/ 478 + if ((int)(dcn3_21_soc.sr_exit_time_us * 1000) != dc->bb_overrides.sr_exit_time_ns 479 + && dc->bb_overrides.sr_exit_time_ns) { 480 + dcn3_21_soc.sr_exit_time_us = dc->bb_overrides.sr_exit_time_ns / 1000.0; 546 481 } 482 + 483 + if ((int)(dcn3_21_soc.sr_enter_plus_exit_time_us * 1000) 484 + != dc->bb_overrides.sr_enter_plus_exit_time_ns 485 + && dc->bb_overrides.sr_enter_plus_exit_time_ns) { 486 + dcn3_21_soc.sr_enter_plus_exit_time_us = 487 + dc->bb_overrides.sr_enter_plus_exit_time_ns / 1000.0; 488 + } 489 + 490 + if ((int)(dcn3_21_soc.urgent_latency_us * 1000) != dc->bb_overrides.urgent_latency_ns 491 + && dc->bb_overrides.urgent_latency_ns) { 492 + dcn3_21_soc.urgent_latency_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 493 + dcn3_21_soc.urgent_latency_pixel_data_only_us = dc->bb_overrides.urgent_latency_ns / 1000.0; 494 + } 495 + 496 + if ((int)(dcn3_21_soc.dram_clock_change_latency_us * 1000) 497 + != dc->bb_overrides.dram_clock_change_latency_ns 498 + && dc->bb_overrides.dram_clock_change_latency_ns) { 499 + dcn3_21_soc.dram_clock_change_latency_us = 500 + dc->bb_overrides.dram_clock_change_latency_ns / 1000.0; 501 + } 502 + 503 + if ((int)(dcn3_21_soc.fclk_change_latency_us * 1000) 504 + != dc->bb_overrides.fclk_clock_change_latency_ns 505 + && dc->bb_overrides.fclk_clock_change_latency_ns) { 506 + dcn3_21_soc.fclk_change_latency_us = 507 + dc->bb_overrides.fclk_clock_change_latency_ns / 1000; 508 + } 509 + 510 + if ((int)(dcn3_21_soc.dummy_pstate_latency_us * 1000) 511 + != dc->bb_overrides.dummy_clock_change_latency_ns 512 + && dc->bb_overrides.dummy_clock_change_latency_ns) { 513 + dcn3_21_soc.dummy_pstate_latency_us = 514 + dc->bb_overrides.dummy_clock_change_latency_ns / 1000.0; 515 + } 516 + 517 + /* Override from VBIOS if VBIOS bb_info available */ 518 + if (dc->ctx->dc_bios->funcs->get_soc_bb_info) { 519 + struct bp_soc_bb_info bb_info = {0}; 520 + 521 + if (dc->ctx->dc_bios->funcs->get_soc_bb_info(dc->ctx->dc_bios, &bb_info) == BP_RESULT_OK) { 522 + if (bb_info.dram_clock_change_latency_100ns > 0) 523 + dcn3_21_soc.dram_clock_change_latency_us = 524 + bb_info.dram_clock_change_latency_100ns * 10; 525 + 526 + if (bb_info.dram_sr_enter_exit_latency_100ns > 0) 527 + dcn3_21_soc.sr_enter_plus_exit_time_us = 528 + bb_info.dram_sr_enter_exit_latency_100ns * 10; 529 + 530 + if (bb_info.dram_sr_exit_latency_100ns > 0) 531 + dcn3_21_soc.sr_exit_time_us = 532 + bb_info.dram_sr_exit_latency_100ns * 10; 533 + } 534 + } 535 + 536 + /* Override from VBIOS for num_chan */ 537 + if (dc->ctx->dc_bios->vram_info.num_chans) { 538 + dcn3_21_soc.num_chans = dc->ctx->dc_bios->vram_info.num_chans; 539 + dcn3_21_soc.mall_allocated_for_dcn_mbytes = (double)(dcn32_calc_num_avail_chans_for_mall(dc, 540 + dc->ctx->dc_bios->vram_info.num_chans) * dc->caps.mall_size_per_mem_channel); 541 + } 542 + 543 + if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) 544 + dcn3_21_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; 547 545 548 546 /* DML DSC delay factor workaround */ 549 547 dcn3_21_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0; ··· 553 555 dc->dml.soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0; 554 556 555 557 /* Overrides Clock levelsfrom CLK Mgr table entries as reported by PM FW */ 556 - if ((!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) && (bw_params->clk_table.entries[0].memclk_mhz)) { 557 558 if (dc->debug.use_legacy_soc_bb_mechanism) { 558 559 unsigned int i = 0, j = 0, num_states = 0; 559 560 ··· 696 699 dml_init_instance(&dc->dml, &dcn3_21_soc, &dcn3_21_ip, DML_PROJECT_DCN32); 697 700 if (dc->current_state) 698 701 dml_init_instance(&dc->current_state->bw_ctx.dml, &dcn3_21_soc, &dcn3_21_ip, DML_PROJECT_DCN32); 699 - } 700 702 } 701 703
-1
drivers/gpu/drm/amd/display/dc/dml/display_mode_lib.c
··· 113 113 lib->funcs = dml30_funcs; 114 114 break; 115 115 case DML_PROJECT_DCN31: 116 - case DML_PROJECT_DCN31_FPGA: 117 116 case DML_PROJECT_DCN315: 118 117 lib->funcs = dml31_funcs; 119 118 break;
-1
drivers/gpu/drm/amd/display/dc/dml/display_mode_lib.h
··· 41 41 DML_PROJECT_DCN30, 42 42 DML_PROJECT_DCN31, 43 43 DML_PROJECT_DCN315, 44 - DML_PROJECT_DCN31_FPGA, 45 44 DML_PROJECT_DCN314, 46 45 DML_PROJECT_DCN32, 47 46 };