aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>2017-08-03 13:02:29 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 18:16:38 -0400
commit65111f25f1fea751f3b4321a59c993c2898b7dbf (patch)
tree9c4109156a116b738424b924d68f22cb000acee6 /drivers/gpu/drm/amd
parente771aae02baa59386972faec491cd221c169ed53 (diff)
drm/amd/display: change dcn_ip and dcn_soc into pointers
-Change dcn_ip into pointer -Change dcn_soc into pointer This is needed for flattening of core_dc into dc, as without this the diags build fails Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c553
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc.c59
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c28
-rw-r--r--drivers/gpu/drm/amd/display/dc/inc/core_dc.h4
4 files changed, 331 insertions, 313 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
index 67da973c898b..6fb1b9a91993 100644
--- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
+++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
@@ -457,7 +457,7 @@ static void dcn_bw_calc_rq_dlg_ttu(
457 } 457 }
458 458
459 /*todo: soc->sr_enter_plus_exit_time??*/ 459 /*todo: soc->sr_enter_plus_exit_time??*/
460 dlg_sys_param.t_srx_delay_us = dc->dcn_ip.dcfclk_cstate_latency / v->dcf_clk_deep_sleep; 460 dlg_sys_param.t_srx_delay_us = dc->dcn_ip->dcfclk_cstate_latency / v->dcf_clk_deep_sleep;
461 461
462 dml_rq_dlg_get_rq_params(dml, &rq_param, input.pipe.src); 462 dml_rq_dlg_get_rq_params(dml, &rq_param, input.pipe.src);
463 extract_rq_regs(dml, rq_regs, rq_param); 463 extract_rq_regs(dml, rq_regs, rq_param);
@@ -679,39 +679,39 @@ static bool dcn_bw_apply_registry_override(struct core_dc *dc)
679 bool updated = false; 679 bool updated = false;
680 680
681 kernel_fpu_begin(); 681 kernel_fpu_begin();
682 if ((int)(dc->dcn_soc.sr_exit_time * 1000) != dc->public.debug.sr_exit_time_ns 682 if ((int)(dc->dcn_soc->sr_exit_time * 1000) != dc->public.debug.sr_exit_time_ns
683 && dc->public.debug.sr_exit_time_ns) { 683 && dc->public.debug.sr_exit_time_ns) {
684 updated = true; 684 updated = true;
685 dc->dcn_soc.sr_exit_time = dc->public.debug.sr_exit_time_ns / 1000.0; 685 dc->dcn_soc->sr_exit_time = dc->public.debug.sr_exit_time_ns / 1000.0;
686 } 686 }
687 687
688 if ((int)(dc->dcn_soc.sr_enter_plus_exit_time * 1000) 688 if ((int)(dc->dcn_soc->sr_enter_plus_exit_time * 1000)
689 != dc->public.debug.sr_enter_plus_exit_time_ns 689 != dc->public.debug.sr_enter_plus_exit_time_ns
690 && dc->public.debug.sr_enter_plus_exit_time_ns) { 690 && dc->public.debug.sr_enter_plus_exit_time_ns) {
691 updated = true; 691 updated = true;
692 dc->dcn_soc.sr_enter_plus_exit_time = 692 dc->dcn_soc->sr_enter_plus_exit_time =
693 dc->public.debug.sr_enter_plus_exit_time_ns / 1000.0; 693 dc->public.debug.sr_enter_plus_exit_time_ns / 1000.0;
694 } 694 }
695 695
696 if ((int)(dc->dcn_soc.urgent_latency * 1000) != dc->public.debug.urgent_latency_ns 696 if ((int)(dc->dcn_soc->urgent_latency * 1000) != dc->public.debug.urgent_latency_ns
697 && dc->public.debug.urgent_latency_ns) { 697 && dc->public.debug.urgent_latency_ns) {
698 updated = true; 698 updated = true;
699 dc->dcn_soc.urgent_latency = dc->public.debug.urgent_latency_ns / 1000.0; 699 dc->dcn_soc->urgent_latency = dc->public.debug.urgent_latency_ns / 1000.0;
700 } 700 }
701 701
702 if ((int)(dc->dcn_soc.percent_of_ideal_drambw_received_after_urg_latency * 1000) 702 if ((int)(dc->dcn_soc->percent_of_ideal_drambw_received_after_urg_latency * 1000)
703 != dc->public.debug.percent_of_ideal_drambw 703 != dc->public.debug.percent_of_ideal_drambw
704 && dc->public.debug.percent_of_ideal_drambw) { 704 && dc->public.debug.percent_of_ideal_drambw) {
705 updated = true; 705 updated = true;
706 dc->dcn_soc.percent_of_ideal_drambw_received_after_urg_latency = 706 dc->dcn_soc->percent_of_ideal_drambw_received_after_urg_latency =
707 dc->public.debug.percent_of_ideal_drambw; 707 dc->public.debug.percent_of_ideal_drambw;
708 } 708 }
709 709
710 if ((int)(dc->dcn_soc.dram_clock_change_latency * 1000) 710 if ((int)(dc->dcn_soc->dram_clock_change_latency * 1000)
711 != dc->public.debug.dram_clock_change_latency_ns 711 != dc->public.debug.dram_clock_change_latency_ns
712 && dc->public.debug.dram_clock_change_latency_ns) { 712 && dc->public.debug.dram_clock_change_latency_ns) {
713 updated = true; 713 updated = true;
714 dc->dcn_soc.dram_clock_change_latency = 714 dc->dcn_soc->dram_clock_change_latency =
715 dc->public.debug.dram_clock_change_latency_ns / 1000.0; 715 dc->public.debug.dram_clock_change_latency_ns / 1000.0;
716 } 716 }
717 kernel_fpu_end(); 717 kernel_fpu_end();
@@ -735,83 +735,83 @@ bool dcn_validate_bandwidth(
735 735
736 memset(v, 0, sizeof(*v)); 736 memset(v, 0, sizeof(*v));
737 kernel_fpu_begin(); 737 kernel_fpu_begin();
738 v->sr_exit_time = dc->dcn_soc.sr_exit_time; 738 v->sr_exit_time = dc->dcn_soc->sr_exit_time;
739 v->sr_enter_plus_exit_time = dc->dcn_soc.sr_enter_plus_exit_time; 739 v->sr_enter_plus_exit_time = dc->dcn_soc->sr_enter_plus_exit_time;
740 v->urgent_latency = dc->dcn_soc.urgent_latency; 740 v->urgent_latency = dc->dcn_soc->urgent_latency;
741 v->write_back_latency = dc->dcn_soc.write_back_latency; 741 v->write_back_latency = dc->dcn_soc->write_back_latency;
742 v->percent_of_ideal_drambw_received_after_urg_latency = 742 v->percent_of_ideal_drambw_received_after_urg_latency =
743 dc->dcn_soc.percent_of_ideal_drambw_received_after_urg_latency; 743 dc->dcn_soc->percent_of_ideal_drambw_received_after_urg_latency;
744 744
745 v->dcfclkv_min0p65 = dc->dcn_soc.dcfclkv_min0p65; 745 v->dcfclkv_min0p65 = dc->dcn_soc->dcfclkv_min0p65;
746 v->dcfclkv_mid0p72 = dc->dcn_soc.dcfclkv_mid0p72; 746 v->dcfclkv_mid0p72 = dc->dcn_soc->dcfclkv_mid0p72;
747 v->dcfclkv_nom0p8 = dc->dcn_soc.dcfclkv_nom0p8; 747 v->dcfclkv_nom0p8 = dc->dcn_soc->dcfclkv_nom0p8;
748 v->dcfclkv_max0p9 = dc->dcn_soc.dcfclkv_max0p9; 748 v->dcfclkv_max0p9 = dc->dcn_soc->dcfclkv_max0p9;
749 749
750 v->max_dispclk_vmin0p65 = dc->dcn_soc.max_dispclk_vmin0p65; 750 v->max_dispclk_vmin0p65 = dc->dcn_soc->max_dispclk_vmin0p65;
751 v->max_dispclk_vmid0p72 = dc->dcn_soc.max_dispclk_vmid0p72; 751 v->max_dispclk_vmid0p72 = dc->dcn_soc->max_dispclk_vmid0p72;
752 v->max_dispclk_vnom0p8 = dc->dcn_soc.max_dispclk_vnom0p8; 752 v->max_dispclk_vnom0p8 = dc->dcn_soc->max_dispclk_vnom0p8;
753 v->max_dispclk_vmax0p9 = dc->dcn_soc.max_dispclk_vmax0p9; 753 v->max_dispclk_vmax0p9 = dc->dcn_soc->max_dispclk_vmax0p9;
754 754
755 v->max_dppclk_vmin0p65 = dc->dcn_soc.max_dppclk_vmin0p65; 755 v->max_dppclk_vmin0p65 = dc->dcn_soc->max_dppclk_vmin0p65;
756 v->max_dppclk_vmid0p72 = dc->dcn_soc.max_dppclk_vmid0p72; 756 v->max_dppclk_vmid0p72 = dc->dcn_soc->max_dppclk_vmid0p72;
757 v->max_dppclk_vnom0p8 = dc->dcn_soc.max_dppclk_vnom0p8; 757 v->max_dppclk_vnom0p8 = dc->dcn_soc->max_dppclk_vnom0p8;
758 v->max_dppclk_vmax0p9 = dc->dcn_soc.max_dppclk_vmax0p9; 758 v->max_dppclk_vmax0p9 = dc->dcn_soc->max_dppclk_vmax0p9;
759 759
760 v->socclk = dc->dcn_soc.socclk; 760 v->socclk = dc->dcn_soc->socclk;
761 761
762 v->fabric_and_dram_bandwidth_vmin0p65 = dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65; 762 v->fabric_and_dram_bandwidth_vmin0p65 = dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65;
763 v->fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72; 763 v->fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72;
764 v->fabric_and_dram_bandwidth_vnom0p8 = dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8; 764 v->fabric_and_dram_bandwidth_vnom0p8 = dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8;
765 v->fabric_and_dram_bandwidth_vmax0p9 = dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9; 765 v->fabric_and_dram_bandwidth_vmax0p9 = dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9;
766 766
767 v->phyclkv_min0p65 = dc->dcn_soc.phyclkv_min0p65; 767 v->phyclkv_min0p65 = dc->dcn_soc->phyclkv_min0p65;
768 v->phyclkv_mid0p72 = dc->dcn_soc.phyclkv_mid0p72; 768 v->phyclkv_mid0p72 = dc->dcn_soc->phyclkv_mid0p72;
769 v->phyclkv_nom0p8 = dc->dcn_soc.phyclkv_nom0p8; 769 v->phyclkv_nom0p8 = dc->dcn_soc->phyclkv_nom0p8;
770 v->phyclkv_max0p9 = dc->dcn_soc.phyclkv_max0p9; 770 v->phyclkv_max0p9 = dc->dcn_soc->phyclkv_max0p9;
771 771
772 v->downspreading = dc->dcn_soc.downspreading; 772 v->downspreading = dc->dcn_soc->downspreading;
773 v->round_trip_ping_latency_cycles = dc->dcn_soc.round_trip_ping_latency_cycles; 773 v->round_trip_ping_latency_cycles = dc->dcn_soc->round_trip_ping_latency_cycles;
774 v->urgent_out_of_order_return_per_channel = dc->dcn_soc.urgent_out_of_order_return_per_channel; 774 v->urgent_out_of_order_return_per_channel = dc->dcn_soc->urgent_out_of_order_return_per_channel;
775 v->number_of_channels = dc->dcn_soc.number_of_channels; 775 v->number_of_channels = dc->dcn_soc->number_of_channels;
776 v->vmm_page_size = dc->dcn_soc.vmm_page_size; 776 v->vmm_page_size = dc->dcn_soc->vmm_page_size;
777 v->dram_clock_change_latency = dc->dcn_soc.dram_clock_change_latency; 777 v->dram_clock_change_latency = dc->dcn_soc->dram_clock_change_latency;
778 v->return_bus_width = dc->dcn_soc.return_bus_width; 778 v->return_bus_width = dc->dcn_soc->return_bus_width;
779 779
780 v->rob_buffer_size_in_kbyte = dc->dcn_ip.rob_buffer_size_in_kbyte; 780 v->rob_buffer_size_in_kbyte = dc->dcn_ip->rob_buffer_size_in_kbyte;
781 v->det_buffer_size_in_kbyte = dc->dcn_ip.det_buffer_size_in_kbyte; 781 v->det_buffer_size_in_kbyte = dc->dcn_ip->det_buffer_size_in_kbyte;
782 v->dpp_output_buffer_pixels = dc->dcn_ip.dpp_output_buffer_pixels; 782 v->dpp_output_buffer_pixels = dc->dcn_ip->dpp_output_buffer_pixels;
783 v->opp_output_buffer_lines = dc->dcn_ip.opp_output_buffer_lines; 783 v->opp_output_buffer_lines = dc->dcn_ip->opp_output_buffer_lines;
784 v->pixel_chunk_size_in_kbyte = dc->dcn_ip.pixel_chunk_size_in_kbyte; 784 v->pixel_chunk_size_in_kbyte = dc->dcn_ip->pixel_chunk_size_in_kbyte;
785 v->pte_enable = dc->dcn_ip.pte_enable; 785 v->pte_enable = dc->dcn_ip->pte_enable;
786 v->pte_chunk_size = dc->dcn_ip.pte_chunk_size; 786 v->pte_chunk_size = dc->dcn_ip->pte_chunk_size;
787 v->meta_chunk_size = dc->dcn_ip.meta_chunk_size; 787 v->meta_chunk_size = dc->dcn_ip->meta_chunk_size;
788 v->writeback_chunk_size = dc->dcn_ip.writeback_chunk_size; 788 v->writeback_chunk_size = dc->dcn_ip->writeback_chunk_size;
789 v->odm_capability = dc->dcn_ip.odm_capability; 789 v->odm_capability = dc->dcn_ip->odm_capability;
790 v->dsc_capability = dc->dcn_ip.dsc_capability; 790 v->dsc_capability = dc->dcn_ip->dsc_capability;
791 v->line_buffer_size = dc->dcn_ip.line_buffer_size; 791 v->line_buffer_size = dc->dcn_ip->line_buffer_size;
792 v->is_line_buffer_bpp_fixed = dc->dcn_ip.is_line_buffer_bpp_fixed; 792 v->is_line_buffer_bpp_fixed = dc->dcn_ip->is_line_buffer_bpp_fixed;
793 v->line_buffer_fixed_bpp = dc->dcn_ip.line_buffer_fixed_bpp; 793 v->line_buffer_fixed_bpp = dc->dcn_ip->line_buffer_fixed_bpp;
794 v->max_line_buffer_lines = dc->dcn_ip.max_line_buffer_lines; 794 v->max_line_buffer_lines = dc->dcn_ip->max_line_buffer_lines;
795 v->writeback_luma_buffer_size = dc->dcn_ip.writeback_luma_buffer_size; 795 v->writeback_luma_buffer_size = dc->dcn_ip->writeback_luma_buffer_size;
796 v->writeback_chroma_buffer_size = dc->dcn_ip.writeback_chroma_buffer_size; 796 v->writeback_chroma_buffer_size = dc->dcn_ip->writeback_chroma_buffer_size;
797 v->max_num_dpp = dc->dcn_ip.max_num_dpp; 797 v->max_num_dpp = dc->dcn_ip->max_num_dpp;
798 v->max_num_writeback = dc->dcn_ip.max_num_writeback; 798 v->max_num_writeback = dc->dcn_ip->max_num_writeback;
799 v->max_dchub_topscl_throughput = dc->dcn_ip.max_dchub_topscl_throughput; 799 v->max_dchub_topscl_throughput = dc->dcn_ip->max_dchub_topscl_throughput;
800 v->max_pscl_tolb_throughput = dc->dcn_ip.max_pscl_tolb_throughput; 800 v->max_pscl_tolb_throughput = dc->dcn_ip->max_pscl_tolb_throughput;
801 v->max_lb_tovscl_throughput = dc->dcn_ip.max_lb_tovscl_throughput; 801 v->max_lb_tovscl_throughput = dc->dcn_ip->max_lb_tovscl_throughput;
802 v->max_vscl_tohscl_throughput = dc->dcn_ip.max_vscl_tohscl_throughput; 802 v->max_vscl_tohscl_throughput = dc->dcn_ip->max_vscl_tohscl_throughput;
803 v->max_hscl_ratio = dc->dcn_ip.max_hscl_ratio; 803 v->max_hscl_ratio = dc->dcn_ip->max_hscl_ratio;
804 v->max_vscl_ratio = dc->dcn_ip.max_vscl_ratio; 804 v->max_vscl_ratio = dc->dcn_ip->max_vscl_ratio;
805 v->max_hscl_taps = dc->dcn_ip.max_hscl_taps; 805 v->max_hscl_taps = dc->dcn_ip->max_hscl_taps;
806 v->max_vscl_taps = dc->dcn_ip.max_vscl_taps; 806 v->max_vscl_taps = dc->dcn_ip->max_vscl_taps;
807 v->under_scan_factor = dc->dcn_ip.under_scan_factor; 807 v->under_scan_factor = dc->dcn_ip->under_scan_factor;
808 v->pte_buffer_size_in_requests = dc->dcn_ip.pte_buffer_size_in_requests; 808 v->pte_buffer_size_in_requests = dc->dcn_ip->pte_buffer_size_in_requests;
809 v->dispclk_ramping_margin = dc->dcn_ip.dispclk_ramping_margin; 809 v->dispclk_ramping_margin = dc->dcn_ip->dispclk_ramping_margin;
810 v->max_inter_dcn_tile_repeaters = dc->dcn_ip.max_inter_dcn_tile_repeaters; 810 v->max_inter_dcn_tile_repeaters = dc->dcn_ip->max_inter_dcn_tile_repeaters;
811 v->can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one = 811 v->can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one =
812 dc->dcn_ip.can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one; 812 dc->dcn_ip->can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
813 v->bug_forcing_luma_and_chroma_request_to_same_size_fixed = 813 v->bug_forcing_luma_and_chroma_request_to_same_size_fixed =
814 dc->dcn_ip.bug_forcing_luma_and_chroma_request_to_same_size_fixed; 814 dc->dcn_ip->bug_forcing_luma_and_chroma_request_to_same_size_fixed;
815 815
816 v->voltage[5] = dcn_bw_no_support; 816 v->voltage[5] = dcn_bw_no_support;
817 v->voltage[4] = dcn_bw_v_max0p9; 817 v->voltage[4] = dcn_bw_v_max0p9;
@@ -1021,7 +1021,7 @@ bool dcn_validate_bandwidth(
1021 context->bw.dcn.calc_clk.dcfclk_khz = (int)(v->dcfclk * 1000); 1021 context->bw.dcn.calc_clk.dcfclk_khz = (int)(v->dcfclk * 1000);
1022 context->bw.dcn.calc_clk.dispclk_khz = (int)(v->dispclk * 1000); 1022 context->bw.dcn.calc_clk.dispclk_khz = (int)(v->dispclk * 1000);
1023 if (dc->public.debug.max_disp_clk == true) 1023 if (dc->public.debug.max_disp_clk == true)
1024 context->bw.dcn.calc_clk.dispclk_khz = (int)(dc->dcn_soc.max_dispclk_vmax0p9 * 1000); 1024 context->bw.dcn.calc_clk.dispclk_khz = (int)(dc->dcn_soc->max_dispclk_vmax0p9 * 1000);
1025 context->bw.dcn.calc_clk.dppclk_div = (int)(v->dispclk_dppclk_ratio) == 2; 1025 context->bw.dcn.calc_clk.dppclk_div = (int)(v->dispclk_dppclk_ratio) == 2;
1026 1026
1027 for (i = 0, input_idx = 0; i < pool->pipe_count; i++) { 1027 for (i = 0, input_idx = 0; i < pool->pipe_count; i++) {
@@ -1118,15 +1118,15 @@ bool dcn_validate_bandwidth(
1118 struct core_dc *dc_core = DC_TO_CORE(&dc->public); 1118 struct core_dc *dc_core = DC_TO_CORE(&dc->public);
1119 1119
1120 dc_core->dml.soc.sr_enter_plus_exit_time_us = 1120 dc_core->dml.soc.sr_enter_plus_exit_time_us =
1121 dc_core->dcn_soc.sr_enter_plus_exit_time; 1121 dc_core->dcn_soc->sr_enter_plus_exit_time;
1122 dc_core->dml.soc.sr_exit_time_us = dc_core->dcn_soc.sr_exit_time; 1122 dc_core->dml.soc.sr_exit_time_us = dc_core->dcn_soc->sr_exit_time;
1123 } 1123 }
1124 1124
1125 /* 1125 /*
1126 * BW limit is set to prevent display from impacting other system functions 1126 * BW limit is set to prevent display from impacting other system functions
1127 */ 1127 */
1128 1128
1129 bw_limit = dc->dcn_soc.percent_disp_bw_limit * v->fabric_and_dram_bandwidth_vmax0p9; 1129 bw_limit = dc->dcn_soc->percent_disp_bw_limit * v->fabric_and_dram_bandwidth_vmax0p9;
1130 bw_limit_pass = (v->total_data_read_bandwidth / 1000.0) < bw_limit; 1130 bw_limit_pass = (v->total_data_read_bandwidth / 1000.0) < bw_limit;
1131 1131
1132 kernel_fpu_end(); 1132 kernel_fpu_end();
@@ -1149,41 +1149,41 @@ unsigned int dcn_find_normalized_clock_vdd_Level(
1149 1149
1150 switch (clocks_type) { 1150 switch (clocks_type) {
1151 case DM_PP_CLOCK_TYPE_DISPLAY_CLK: 1151 case DM_PP_CLOCK_TYPE_DISPLAY_CLK:
1152 if (clocks_in_khz > dc->dcn_soc.max_dispclk_vmax0p9*1000) { 1152 if (clocks_in_khz > dc->dcn_soc->max_dispclk_vmax0p9*1000) {
1153 vdd_level = dcn_bw_v_max0p91; 1153 vdd_level = dcn_bw_v_max0p91;
1154 BREAK_TO_DEBUGGER(); 1154 BREAK_TO_DEBUGGER();
1155 } else if (clocks_in_khz > dc->dcn_soc.max_dispclk_vnom0p8*1000) { 1155 } else if (clocks_in_khz > dc->dcn_soc->max_dispclk_vnom0p8*1000) {
1156 vdd_level = dcn_bw_v_max0p9; 1156 vdd_level = dcn_bw_v_max0p9;
1157 } else if (clocks_in_khz > dc->dcn_soc.max_dispclk_vmid0p72*1000) { 1157 } else if (clocks_in_khz > dc->dcn_soc->max_dispclk_vmid0p72*1000) {
1158 vdd_level = dcn_bw_v_nom0p8; 1158 vdd_level = dcn_bw_v_nom0p8;
1159 } else if (clocks_in_khz > dc->dcn_soc.max_dispclk_vmin0p65*1000) { 1159 } else if (clocks_in_khz > dc->dcn_soc->max_dispclk_vmin0p65*1000) {
1160 vdd_level = dcn_bw_v_mid0p72; 1160 vdd_level = dcn_bw_v_mid0p72;
1161 } else 1161 } else
1162 vdd_level = dcn_bw_v_min0p65; 1162 vdd_level = dcn_bw_v_min0p65;
1163 break; 1163 break;
1164 case DM_PP_CLOCK_TYPE_DISPLAYPHYCLK: 1164 case DM_PP_CLOCK_TYPE_DISPLAYPHYCLK:
1165 if (clocks_in_khz > dc->dcn_soc.phyclkv_max0p9*1000) { 1165 if (clocks_in_khz > dc->dcn_soc->phyclkv_max0p9*1000) {
1166 vdd_level = dcn_bw_v_max0p91; 1166 vdd_level = dcn_bw_v_max0p91;
1167 BREAK_TO_DEBUGGER(); 1167 BREAK_TO_DEBUGGER();
1168 } else if (clocks_in_khz > dc->dcn_soc.phyclkv_nom0p8*1000) { 1168 } else if (clocks_in_khz > dc->dcn_soc->phyclkv_nom0p8*1000) {
1169 vdd_level = dcn_bw_v_max0p9; 1169 vdd_level = dcn_bw_v_max0p9;
1170 } else if (clocks_in_khz > dc->dcn_soc.phyclkv_mid0p72*1000) { 1170 } else if (clocks_in_khz > dc->dcn_soc->phyclkv_mid0p72*1000) {
1171 vdd_level = dcn_bw_v_nom0p8; 1171 vdd_level = dcn_bw_v_nom0p8;
1172 } else if (clocks_in_khz > dc->dcn_soc.phyclkv_min0p65*1000) { 1172 } else if (clocks_in_khz > dc->dcn_soc->phyclkv_min0p65*1000) {
1173 vdd_level = dcn_bw_v_mid0p72; 1173 vdd_level = dcn_bw_v_mid0p72;
1174 } else 1174 } else
1175 vdd_level = dcn_bw_v_min0p65; 1175 vdd_level = dcn_bw_v_min0p65;
1176 break; 1176 break;
1177 1177
1178 case DM_PP_CLOCK_TYPE_DPPCLK: 1178 case DM_PP_CLOCK_TYPE_DPPCLK:
1179 if (clocks_in_khz > dc->dcn_soc.max_dppclk_vmax0p9*1000) { 1179 if (clocks_in_khz > dc->dcn_soc->max_dppclk_vmax0p9*1000) {
1180 vdd_level = dcn_bw_v_max0p91; 1180 vdd_level = dcn_bw_v_max0p91;
1181 BREAK_TO_DEBUGGER(); 1181 BREAK_TO_DEBUGGER();
1182 } else if (clocks_in_khz > dc->dcn_soc.max_dppclk_vnom0p8*1000) { 1182 } else if (clocks_in_khz > dc->dcn_soc->max_dppclk_vnom0p8*1000) {
1183 vdd_level = dcn_bw_v_max0p9; 1183 vdd_level = dcn_bw_v_max0p9;
1184 } else if (clocks_in_khz > dc->dcn_soc.max_dppclk_vmid0p72*1000) { 1184 } else if (clocks_in_khz > dc->dcn_soc->max_dppclk_vmid0p72*1000) {
1185 vdd_level = dcn_bw_v_nom0p8; 1185 vdd_level = dcn_bw_v_nom0p8;
1186 } else if (clocks_in_khz > dc->dcn_soc.max_dppclk_vmin0p65*1000) { 1186 } else if (clocks_in_khz > dc->dcn_soc->max_dppclk_vmin0p65*1000) {
1187 vdd_level = dcn_bw_v_mid0p72; 1187 vdd_level = dcn_bw_v_mid0p72;
1188 } else 1188 } else
1189 vdd_level = dcn_bw_v_min0p65; 1189 vdd_level = dcn_bw_v_min0p65;
@@ -1191,15 +1191,16 @@ unsigned int dcn_find_normalized_clock_vdd_Level(
1191 1191
1192 case DM_PP_CLOCK_TYPE_MEMORY_CLK: 1192 case DM_PP_CLOCK_TYPE_MEMORY_CLK:
1193 { 1193 {
1194 unsigned factor = (ddr4_dram_factor_single_Channel * dc->dcn_soc.number_of_channels); 1194 unsigned factor = (ddr4_dram_factor_single_Channel * dc->dcn_soc->number_of_channels);
1195 if (clocks_in_khz > dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9*1000000/factor) { 1195
1196 if (clocks_in_khz > dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9*1000000/factor) {
1196 vdd_level = dcn_bw_v_max0p91; 1197 vdd_level = dcn_bw_v_max0p91;
1197 BREAK_TO_DEBUGGER(); 1198 BREAK_TO_DEBUGGER();
1198 } else if (clocks_in_khz > dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8*1000000/factor) { 1199 } else if (clocks_in_khz > dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8*1000000/factor) {
1199 vdd_level = dcn_bw_v_max0p9; 1200 vdd_level = dcn_bw_v_max0p9;
1200 } else if (clocks_in_khz > dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72*1000000/factor) { 1201 } else if (clocks_in_khz > dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72*1000000/factor) {
1201 vdd_level = dcn_bw_v_nom0p8; 1202 vdd_level = dcn_bw_v_nom0p8;
1202 } else if (clocks_in_khz > dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65*1000000/factor) { 1203 } else if (clocks_in_khz > dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65*1000000/factor) {
1203 vdd_level = dcn_bw_v_mid0p72; 1204 vdd_level = dcn_bw_v_mid0p72;
1204 } else 1205 } else
1205 vdd_level = dcn_bw_v_min0p65; 1206 vdd_level = dcn_bw_v_min0p65;
@@ -1207,14 +1208,14 @@ unsigned int dcn_find_normalized_clock_vdd_Level(
1207 break; 1208 break;
1208 1209
1209 case DM_PP_CLOCK_TYPE_DCFCLK: 1210 case DM_PP_CLOCK_TYPE_DCFCLK:
1210 if (clocks_in_khz > dc->dcn_soc.dcfclkv_max0p9*1000) { 1211 if (clocks_in_khz > dc->dcn_soc->dcfclkv_max0p9*1000) {
1211 vdd_level = dcn_bw_v_max0p91; 1212 vdd_level = dcn_bw_v_max0p91;
1212 BREAK_TO_DEBUGGER(); 1213 BREAK_TO_DEBUGGER();
1213 } else if (clocks_in_khz > dc->dcn_soc.dcfclkv_nom0p8*1000) { 1214 } else if (clocks_in_khz > dc->dcn_soc->dcfclkv_nom0p8*1000) {
1214 vdd_level = dcn_bw_v_max0p9; 1215 vdd_level = dcn_bw_v_max0p9;
1215 } else if (clocks_in_khz > dc->dcn_soc.dcfclkv_mid0p72*1000) { 1216 } else if (clocks_in_khz > dc->dcn_soc->dcfclkv_mid0p72*1000) {
1216 vdd_level = dcn_bw_v_nom0p8; 1217 vdd_level = dcn_bw_v_nom0p8;
1217 } else if (clocks_in_khz > dc->dcn_soc.dcfclkv_min0p65*1000) { 1218 } else if (clocks_in_khz > dc->dcn_soc->dcfclkv_min0p65*1000) {
1218 vdd_level = dcn_bw_v_mid0p72; 1219 vdd_level = dcn_bw_v_mid0p72;
1219 } else 1220 } else
1220 vdd_level = dcn_bw_v_min0p65; 1221 vdd_level = dcn_bw_v_min0p65;
@@ -1254,15 +1255,15 @@ unsigned int dcn_find_dcfclk_suits_all(
1254 vdd_level = dcn_bw_max(vdd_level, vdd_level_temp); 1255 vdd_level = dcn_bw_max(vdd_level, vdd_level_temp);
1255 if (vdd_level == dcn_bw_v_max0p91) { 1256 if (vdd_level == dcn_bw_v_max0p91) {
1256 BREAK_TO_DEBUGGER(); 1257 BREAK_TO_DEBUGGER();
1257 dcf_clk = dc->dcn_soc.dcfclkv_max0p9*1000; 1258 dcf_clk = dc->dcn_soc->dcfclkv_max0p9*1000;
1258 } else if (vdd_level == dcn_bw_v_max0p9) 1259 } else if (vdd_level == dcn_bw_v_max0p9)
1259 dcf_clk = dc->dcn_soc.dcfclkv_max0p9*1000; 1260 dcf_clk = dc->dcn_soc->dcfclkv_max0p9*1000;
1260 else if (vdd_level == dcn_bw_v_nom0p8) 1261 else if (vdd_level == dcn_bw_v_nom0p8)
1261 dcf_clk = dc->dcn_soc.dcfclkv_nom0p8*1000; 1262 dcf_clk = dc->dcn_soc->dcfclkv_nom0p8*1000;
1262 else if (vdd_level == dcn_bw_v_mid0p72) 1263 else if (vdd_level == dcn_bw_v_mid0p72)
1263 dcf_clk = dc->dcn_soc.dcfclkv_mid0p72*1000; 1264 dcf_clk = dc->dcn_soc->dcfclkv_mid0p72*1000;
1264 else 1265 else
1265 dcf_clk = dc->dcn_soc.dcfclkv_min0p65*1000; 1266 dcf_clk = dc->dcn_soc->dcfclkv_min0p65*1000;
1266 1267
1267 dm_logger_write(dc->ctx->logger, LOG_HW_MARKS, 1268 dm_logger_write(dc->ctx->logger, LOG_HW_MARKS,
1268 "\tdcf_clk for voltage = %d\n", dcf_clk); 1269 "\tdcf_clk for voltage = %d\n", dcf_clk);
@@ -1282,27 +1283,27 @@ void dcn_bw_update_from_pplib(struct core_dc *dc)
1282 ctx, DM_PP_CLOCK_TYPE_FCLK, &clks) && 1283 ctx, DM_PP_CLOCK_TYPE_FCLK, &clks) &&
1283 clks.num_levels != 0) { 1284 clks.num_levels != 0) {
1284 ASSERT(clks.num_levels >= 3); 1285 ASSERT(clks.num_levels >= 3);
1285 dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65 = 32 * (clks.data[0].clocks_in_khz / 1000.0) / 1000.0; 1286 dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 = 32 * (clks.data[0].clocks_in_khz / 1000.0) / 1000.0;
1286 if (clks.num_levels > 2) { 1287 if (clks.num_levels > 2) {
1287 dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc.number_of_channels * 1288 dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc->number_of_channels *
1288 (clks.data[clks.num_levels - 3].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0; 1289 (clks.data[clks.num_levels - 3].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0;
1289 } else { 1290 } else {
1290 dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc.number_of_channels * 1291 dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 = dc->dcn_soc->number_of_channels *
1291 (clks.data[clks.num_levels - 2].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0; 1292 (clks.data[clks.num_levels - 2].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0;
1292 } 1293 }
1293 dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8 = dc->dcn_soc.number_of_channels * 1294 dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 = dc->dcn_soc->number_of_channels *
1294 (clks.data[clks.num_levels - 2].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0; 1295 (clks.data[clks.num_levels - 2].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0;
1295 dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9 = dc->dcn_soc.number_of_channels * 1296 dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = dc->dcn_soc->number_of_channels *
1296 (clks.data[clks.num_levels - 1].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0; 1297 (clks.data[clks.num_levels - 1].clocks_in_khz / 1000.0) * ddr4_dram_factor_single_Channel / 1000.0;
1297 } else 1298 } else
1298 BREAK_TO_DEBUGGER(); 1299 BREAK_TO_DEBUGGER();
1299 if (dm_pp_get_clock_levels_by_type_with_voltage( 1300 if (dm_pp_get_clock_levels_by_type_with_voltage(
1300 ctx, DM_PP_CLOCK_TYPE_DCFCLK, &clks) && 1301 ctx, DM_PP_CLOCK_TYPE_DCFCLK, &clks) &&
1301 clks.num_levels >= 3) { 1302 clks.num_levels >= 3) {
1302 dc->dcn_soc.dcfclkv_min0p65 = clks.data[0].clocks_in_khz / 1000.0; 1303 dc->dcn_soc->dcfclkv_min0p65 = clks.data[0].clocks_in_khz / 1000.0;
1303 dc->dcn_soc.dcfclkv_mid0p72 = clks.data[clks.num_levels - 3].clocks_in_khz / 1000.0; 1304 dc->dcn_soc->dcfclkv_mid0p72 = clks.data[clks.num_levels - 3].clocks_in_khz / 1000.0;
1304 dc->dcn_soc.dcfclkv_nom0p8 = clks.data[clks.num_levels - 2].clocks_in_khz / 1000.0; 1305 dc->dcn_soc->dcfclkv_nom0p8 = clks.data[clks.num_levels - 2].clocks_in_khz / 1000.0;
1305 dc->dcn_soc.dcfclkv_max0p9 = clks.data[clks.num_levels - 1].clocks_in_khz / 1000.0; 1306 dc->dcn_soc->dcfclkv_max0p9 = clks.data[clks.num_levels - 1].clocks_in_khz / 1000.0;
1306 } else 1307 } else
1307 BREAK_TO_DEBUGGER(); 1308 BREAK_TO_DEBUGGER();
1308 1309
@@ -1315,17 +1316,17 @@ void dcn_bw_notify_pplib_of_wm_ranges(struct core_dc *dc)
1315 int max_fclk_khz, nom_fclk_khz, min_fclk_khz, max_dcfclk_khz, 1316 int max_fclk_khz, nom_fclk_khz, min_fclk_khz, max_dcfclk_khz,
1316 nom_dcfclk_khz, mid_fclk_khz, min_dcfclk_khz, socclk_khz; 1317 nom_dcfclk_khz, mid_fclk_khz, min_dcfclk_khz, socclk_khz;
1317 const int overdrive = 5000000; /* 5 GHz to cover Overdrive */ 1318 const int overdrive = 5000000; /* 5 GHz to cover Overdrive */
1318 unsigned factor = (ddr4_dram_factor_single_Channel * dc->dcn_soc.number_of_channels); 1319 unsigned factor = (ddr4_dram_factor_single_Channel * dc->dcn_soc->number_of_channels);
1319 1320
1320 kernel_fpu_begin(); 1321 kernel_fpu_begin();
1321 max_fclk_khz = dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9 * 1000000 / factor; 1322 max_fclk_khz = dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 * 1000000 / factor;
1322 nom_fclk_khz = dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8 * 1000000 / factor; 1323 nom_fclk_khz = dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 * 1000000 / factor;
1323 mid_fclk_khz = dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72 * 1000000 / factor; 1324 mid_fclk_khz = dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 * 1000000 / factor;
1324 min_fclk_khz = dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65 * 1000000 / 32; 1325 min_fclk_khz = dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 * 1000000 / 32;
1325 max_dcfclk_khz = dc->dcn_soc.dcfclkv_max0p9 * 1000; 1326 max_dcfclk_khz = dc->dcn_soc->dcfclkv_max0p9 * 1000;
1326 nom_dcfclk_khz = dc->dcn_soc.dcfclkv_nom0p8 * 1000; 1327 nom_dcfclk_khz = dc->dcn_soc->dcfclkv_nom0p8 * 1000;
1327 min_dcfclk_khz = dc->dcn_soc.dcfclkv_min0p65 * 1000; 1328 min_dcfclk_khz = dc->dcn_soc->dcfclkv_min0p65 * 1000;
1328 socclk_khz = dc->dcn_soc.socclk * 1000; 1329 socclk_khz = dc->dcn_soc->socclk * 1000;
1329 kernel_fpu_end(); 1330 kernel_fpu_end();
1330 1331
1331 /* Now notify PPLib/SMU about which Watermarks sets they should select 1332 /* Now notify PPLib/SMU about which Watermarks sets they should select
@@ -1425,40 +1426,40 @@ void dcn_bw_sync_calcs_and_dml(struct core_dc *dc)
1425 "vmm_page_size: %d Bytes\n" 1426 "vmm_page_size: %d Bytes\n"
1426 "dram_clock_change_latency: %d ns\n" 1427 "dram_clock_change_latency: %d ns\n"
1427 "return_bus_width: %d Bytes\n", 1428 "return_bus_width: %d Bytes\n",
1428 dc->dcn_soc.sr_exit_time * 1000, 1429 dc->dcn_soc->sr_exit_time * 1000,
1429 dc->dcn_soc.sr_enter_plus_exit_time * 1000, 1430 dc->dcn_soc->sr_enter_plus_exit_time * 1000,
1430 dc->dcn_soc.urgent_latency * 1000, 1431 dc->dcn_soc->urgent_latency * 1000,
1431 dc->dcn_soc.write_back_latency * 1000, 1432 dc->dcn_soc->write_back_latency * 1000,
1432 dc->dcn_soc.percent_of_ideal_drambw_received_after_urg_latency, 1433 dc->dcn_soc->percent_of_ideal_drambw_received_after_urg_latency,
1433 dc->dcn_soc.max_request_size, 1434 dc->dcn_soc->max_request_size,
1434 dc->dcn_soc.dcfclkv_max0p9 * 1000, 1435 dc->dcn_soc->dcfclkv_max0p9 * 1000,
1435 dc->dcn_soc.dcfclkv_nom0p8 * 1000, 1436 dc->dcn_soc->dcfclkv_nom0p8 * 1000,
1436 dc->dcn_soc.dcfclkv_mid0p72 * 1000, 1437 dc->dcn_soc->dcfclkv_mid0p72 * 1000,
1437 dc->dcn_soc.dcfclkv_min0p65 * 1000, 1438 dc->dcn_soc->dcfclkv_min0p65 * 1000,
1438 dc->dcn_soc.max_dispclk_vmax0p9 * 1000, 1439 dc->dcn_soc->max_dispclk_vmax0p9 * 1000,
1439 dc->dcn_soc.max_dispclk_vnom0p8 * 1000, 1440 dc->dcn_soc->max_dispclk_vnom0p8 * 1000,
1440 dc->dcn_soc.max_dispclk_vmid0p72 * 1000, 1441 dc->dcn_soc->max_dispclk_vmid0p72 * 1000,
1441 dc->dcn_soc.max_dispclk_vmin0p65 * 1000, 1442 dc->dcn_soc->max_dispclk_vmin0p65 * 1000,
1442 dc->dcn_soc.max_dppclk_vmax0p9 * 1000, 1443 dc->dcn_soc->max_dppclk_vmax0p9 * 1000,
1443 dc->dcn_soc.max_dppclk_vnom0p8 * 1000, 1444 dc->dcn_soc->max_dppclk_vnom0p8 * 1000,
1444 dc->dcn_soc.max_dppclk_vmid0p72 * 1000, 1445 dc->dcn_soc->max_dppclk_vmid0p72 * 1000,
1445 dc->dcn_soc.max_dppclk_vmin0p65 * 1000, 1446 dc->dcn_soc->max_dppclk_vmin0p65 * 1000,
1446 dc->dcn_soc.socclk * 1000, 1447 dc->dcn_soc->socclk * 1000,
1447 dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9 * 1000, 1448 dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 * 1000,
1448 dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8 * 1000, 1449 dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 * 1000,
1449 dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72 * 1000, 1450 dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 * 1000,
1450 dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65 * 1000, 1451 dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 * 1000,
1451 dc->dcn_soc.phyclkv_max0p9 * 1000, 1452 dc->dcn_soc->phyclkv_max0p9 * 1000,
1452 dc->dcn_soc.phyclkv_nom0p8 * 1000, 1453 dc->dcn_soc->phyclkv_nom0p8 * 1000,
1453 dc->dcn_soc.phyclkv_mid0p72 * 1000, 1454 dc->dcn_soc->phyclkv_mid0p72 * 1000,
1454 dc->dcn_soc.phyclkv_min0p65 * 1000, 1455 dc->dcn_soc->phyclkv_min0p65 * 1000,
1455 dc->dcn_soc.downspreading * 100, 1456 dc->dcn_soc->downspreading * 100,
1456 dc->dcn_soc.round_trip_ping_latency_cycles, 1457 dc->dcn_soc->round_trip_ping_latency_cycles,
1457 dc->dcn_soc.urgent_out_of_order_return_per_channel, 1458 dc->dcn_soc->urgent_out_of_order_return_per_channel,
1458 dc->dcn_soc.number_of_channels, 1459 dc->dcn_soc->number_of_channels,
1459 dc->dcn_soc.vmm_page_size, 1460 dc->dcn_soc->vmm_page_size,
1460 dc->dcn_soc.dram_clock_change_latency * 1000, 1461 dc->dcn_soc->dram_clock_change_latency * 1000,
1461 dc->dcn_soc.return_bus_width); 1462 dc->dcn_soc->return_bus_width);
1462 dm_logger_write(dc->ctx->logger, LOG_BANDWIDTH_CALCS, 1463 dm_logger_write(dc->ctx->logger, LOG_BANDWIDTH_CALCS,
1463 "rob_buffer_size_in_kbyte: %d\n" 1464 "rob_buffer_size_in_kbyte: %d\n"
1464 "det_buffer_size_in_kbyte: %d\n" 1465 "det_buffer_size_in_kbyte: %d\n"
@@ -1494,120 +1495,120 @@ void dcn_bw_sync_calcs_and_dml(struct core_dc *dc)
1494 "can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one: %d\n" 1495 "can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one: %d\n"
1495 "bug_forcing_luma_and_chroma_request_to_same_size_fixed: %d\n" 1496 "bug_forcing_luma_and_chroma_request_to_same_size_fixed: %d\n"
1496 "dcfclk_cstate_latency: %d\n", 1497 "dcfclk_cstate_latency: %d\n",
1497 dc->dcn_ip.rob_buffer_size_in_kbyte, 1498 dc->dcn_ip->rob_buffer_size_in_kbyte,
1498 dc->dcn_ip.det_buffer_size_in_kbyte, 1499 dc->dcn_ip->det_buffer_size_in_kbyte,
1499 dc->dcn_ip.dpp_output_buffer_pixels, 1500 dc->dcn_ip->dpp_output_buffer_pixels,
1500 dc->dcn_ip.opp_output_buffer_lines, 1501 dc->dcn_ip->opp_output_buffer_lines,
1501 dc->dcn_ip.pixel_chunk_size_in_kbyte, 1502 dc->dcn_ip->pixel_chunk_size_in_kbyte,
1502 dc->dcn_ip.pte_enable, 1503 dc->dcn_ip->pte_enable,
1503 dc->dcn_ip.pte_chunk_size, 1504 dc->dcn_ip->pte_chunk_size,
1504 dc->dcn_ip.meta_chunk_size, 1505 dc->dcn_ip->meta_chunk_size,
1505 dc->dcn_ip.writeback_chunk_size, 1506 dc->dcn_ip->writeback_chunk_size,
1506 dc->dcn_ip.odm_capability, 1507 dc->dcn_ip->odm_capability,
1507 dc->dcn_ip.dsc_capability, 1508 dc->dcn_ip->dsc_capability,
1508 dc->dcn_ip.line_buffer_size, 1509 dc->dcn_ip->line_buffer_size,
1509 dc->dcn_ip.max_line_buffer_lines, 1510 dc->dcn_ip->max_line_buffer_lines,
1510 dc->dcn_ip.is_line_buffer_bpp_fixed, 1511 dc->dcn_ip->is_line_buffer_bpp_fixed,
1511 dc->dcn_ip.line_buffer_fixed_bpp, 1512 dc->dcn_ip->line_buffer_fixed_bpp,
1512 dc->dcn_ip.writeback_luma_buffer_size, 1513 dc->dcn_ip->writeback_luma_buffer_size,
1513 dc->dcn_ip.writeback_chroma_buffer_size, 1514 dc->dcn_ip->writeback_chroma_buffer_size,
1514 dc->dcn_ip.max_num_dpp, 1515 dc->dcn_ip->max_num_dpp,
1515 dc->dcn_ip.max_num_writeback, 1516 dc->dcn_ip->max_num_writeback,
1516 dc->dcn_ip.max_dchub_topscl_throughput, 1517 dc->dcn_ip->max_dchub_topscl_throughput,
1517 dc->dcn_ip.max_pscl_tolb_throughput, 1518 dc->dcn_ip->max_pscl_tolb_throughput,
1518 dc->dcn_ip.max_lb_tovscl_throughput, 1519 dc->dcn_ip->max_lb_tovscl_throughput,
1519 dc->dcn_ip.max_vscl_tohscl_throughput, 1520 dc->dcn_ip->max_vscl_tohscl_throughput,
1520 dc->dcn_ip.max_hscl_ratio, 1521 dc->dcn_ip->max_hscl_ratio,
1521 dc->dcn_ip.max_vscl_ratio, 1522 dc->dcn_ip->max_vscl_ratio,
1522 dc->dcn_ip.max_hscl_taps, 1523 dc->dcn_ip->max_hscl_taps,
1523 dc->dcn_ip.max_vscl_taps, 1524 dc->dcn_ip->max_vscl_taps,
1524 dc->dcn_ip.pte_buffer_size_in_requests, 1525 dc->dcn_ip->pte_buffer_size_in_requests,
1525 dc->dcn_ip.dispclk_ramping_margin, 1526 dc->dcn_ip->dispclk_ramping_margin,
1526 dc->dcn_ip.under_scan_factor * 100, 1527 dc->dcn_ip->under_scan_factor * 100,
1527 dc->dcn_ip.max_inter_dcn_tile_repeaters, 1528 dc->dcn_ip->max_inter_dcn_tile_repeaters,
1528 dc->dcn_ip.can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one, 1529 dc->dcn_ip->can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one,
1529 dc->dcn_ip.bug_forcing_luma_and_chroma_request_to_same_size_fixed, 1530 dc->dcn_ip->bug_forcing_luma_and_chroma_request_to_same_size_fixed,
1530 dc->dcn_ip.dcfclk_cstate_latency); 1531 dc->dcn_ip->dcfclk_cstate_latency);
1531 dc->dml.soc.vmin.socclk_mhz = dc->dcn_soc.socclk; 1532 dc->dml.soc.vmin.socclk_mhz = dc->dcn_soc->socclk;
1532 dc->dml.soc.vmid.socclk_mhz = dc->dcn_soc.socclk; 1533 dc->dml.soc.vmid.socclk_mhz = dc->dcn_soc->socclk;
1533 dc->dml.soc.vnom.socclk_mhz = dc->dcn_soc.socclk; 1534 dc->dml.soc.vnom.socclk_mhz = dc->dcn_soc->socclk;
1534 dc->dml.soc.vmax.socclk_mhz = dc->dcn_soc.socclk; 1535 dc->dml.soc.vmax.socclk_mhz = dc->dcn_soc->socclk;
1535 1536
1536 dc->dml.soc.vmin.dcfclk_mhz = dc->dcn_soc.dcfclkv_min0p65; 1537 dc->dml.soc.vmin.dcfclk_mhz = dc->dcn_soc->dcfclkv_min0p65;
1537 dc->dml.soc.vmid.dcfclk_mhz = dc->dcn_soc.dcfclkv_mid0p72; 1538 dc->dml.soc.vmid.dcfclk_mhz = dc->dcn_soc->dcfclkv_mid0p72;
1538 dc->dml.soc.vnom.dcfclk_mhz = dc->dcn_soc.dcfclkv_nom0p8; 1539 dc->dml.soc.vnom.dcfclk_mhz = dc->dcn_soc->dcfclkv_nom0p8;
1539 dc->dml.soc.vmax.dcfclk_mhz = dc->dcn_soc.dcfclkv_max0p9; 1540 dc->dml.soc.vmax.dcfclk_mhz = dc->dcn_soc->dcfclkv_max0p9;
1540 1541
1541 dc->dml.soc.vmin.dispclk_mhz = dc->dcn_soc.max_dispclk_vmin0p65; 1542 dc->dml.soc.vmin.dispclk_mhz = dc->dcn_soc->max_dispclk_vmin0p65;
1542 dc->dml.soc.vmid.dispclk_mhz = dc->dcn_soc.max_dispclk_vmid0p72; 1543 dc->dml.soc.vmid.dispclk_mhz = dc->dcn_soc->max_dispclk_vmid0p72;
1543 dc->dml.soc.vnom.dispclk_mhz = dc->dcn_soc.max_dispclk_vnom0p8; 1544 dc->dml.soc.vnom.dispclk_mhz = dc->dcn_soc->max_dispclk_vnom0p8;
1544 dc->dml.soc.vmax.dispclk_mhz = dc->dcn_soc.max_dispclk_vmax0p9; 1545 dc->dml.soc.vmax.dispclk_mhz = dc->dcn_soc->max_dispclk_vmax0p9;
1545 1546
1546 dc->dml.soc.vmin.dppclk_mhz = dc->dcn_soc.max_dppclk_vmin0p65; 1547 dc->dml.soc.vmin.dppclk_mhz = dc->dcn_soc->max_dppclk_vmin0p65;
1547 dc->dml.soc.vmid.dppclk_mhz = dc->dcn_soc.max_dppclk_vmid0p72; 1548 dc->dml.soc.vmid.dppclk_mhz = dc->dcn_soc->max_dppclk_vmid0p72;
1548 dc->dml.soc.vnom.dppclk_mhz = dc->dcn_soc.max_dppclk_vnom0p8; 1549 dc->dml.soc.vnom.dppclk_mhz = dc->dcn_soc->max_dppclk_vnom0p8;
1549 dc->dml.soc.vmax.dppclk_mhz = dc->dcn_soc.max_dppclk_vmax0p9; 1550 dc->dml.soc.vmax.dppclk_mhz = dc->dcn_soc->max_dppclk_vmax0p9;
1550 1551
1551 dc->dml.soc.vmin.phyclk_mhz = dc->dcn_soc.phyclkv_min0p65; 1552 dc->dml.soc.vmin.phyclk_mhz = dc->dcn_soc->phyclkv_min0p65;
1552 dc->dml.soc.vmid.phyclk_mhz = dc->dcn_soc.phyclkv_mid0p72; 1553 dc->dml.soc.vmid.phyclk_mhz = dc->dcn_soc->phyclkv_mid0p72;
1553 dc->dml.soc.vnom.phyclk_mhz = dc->dcn_soc.phyclkv_nom0p8; 1554 dc->dml.soc.vnom.phyclk_mhz = dc->dcn_soc->phyclkv_nom0p8;
1554 dc->dml.soc.vmax.phyclk_mhz = dc->dcn_soc.phyclkv_max0p9; 1555 dc->dml.soc.vmax.phyclk_mhz = dc->dcn_soc->phyclkv_max0p9;
1555 1556
1556 dc->dml.soc.vmin.dram_bw_per_chan_gbps = dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65; 1557 dc->dml.soc.vmin.dram_bw_per_chan_gbps = dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65;
1557 dc->dml.soc.vmid.dram_bw_per_chan_gbps = dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72; 1558 dc->dml.soc.vmid.dram_bw_per_chan_gbps = dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72;
1558 dc->dml.soc.vnom.dram_bw_per_chan_gbps = dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8; 1559 dc->dml.soc.vnom.dram_bw_per_chan_gbps = dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8;
1559 dc->dml.soc.vmax.dram_bw_per_chan_gbps = dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9; 1560 dc->dml.soc.vmax.dram_bw_per_chan_gbps = dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9;
1560 1561
1561 dc->dml.soc.sr_exit_time_us = dc->dcn_soc.sr_exit_time; 1562 dc->dml.soc.sr_exit_time_us = dc->dcn_soc->sr_exit_time;
1562 dc->dml.soc.sr_enter_plus_exit_time_us = dc->dcn_soc.sr_enter_plus_exit_time; 1563 dc->dml.soc.sr_enter_plus_exit_time_us = dc->dcn_soc->sr_enter_plus_exit_time;
1563 dc->dml.soc.urgent_latency_us = dc->dcn_soc.urgent_latency; 1564 dc->dml.soc.urgent_latency_us = dc->dcn_soc->urgent_latency;
1564 dc->dml.soc.writeback_latency_us = dc->dcn_soc.write_back_latency; 1565 dc->dml.soc.writeback_latency_us = dc->dcn_soc->write_back_latency;
1565 dc->dml.soc.ideal_dram_bw_after_urgent_percent = 1566 dc->dml.soc.ideal_dram_bw_after_urgent_percent =
1566 dc->dcn_soc.percent_of_ideal_drambw_received_after_urg_latency; 1567 dc->dcn_soc->percent_of_ideal_drambw_received_after_urg_latency;
1567 dc->dml.soc.max_request_size_bytes = dc->dcn_soc.max_request_size; 1568 dc->dml.soc.max_request_size_bytes = dc->dcn_soc->max_request_size;
1568 dc->dml.soc.downspread_percent = dc->dcn_soc.downspreading; 1569 dc->dml.soc.downspread_percent = dc->dcn_soc->downspreading;
1569 dc->dml.soc.round_trip_ping_latency_dcfclk_cycles = 1570 dc->dml.soc.round_trip_ping_latency_dcfclk_cycles =
1570 dc->dcn_soc.round_trip_ping_latency_cycles; 1571 dc->dcn_soc->round_trip_ping_latency_cycles;
1571 dc->dml.soc.urgent_out_of_order_return_per_channel_bytes = 1572 dc->dml.soc.urgent_out_of_order_return_per_channel_bytes =
1572 dc->dcn_soc.urgent_out_of_order_return_per_channel; 1573 dc->dcn_soc->urgent_out_of_order_return_per_channel;
1573 dc->dml.soc.num_chans = dc->dcn_soc.number_of_channels; 1574 dc->dml.soc.num_chans = dc->dcn_soc->number_of_channels;
1574 dc->dml.soc.vmm_page_size_bytes = dc->dcn_soc.vmm_page_size; 1575 dc->dml.soc.vmm_page_size_bytes = dc->dcn_soc->vmm_page_size;
1575 dc->dml.soc.dram_clock_change_latency_us = dc->dcn_soc.dram_clock_change_latency; 1576 dc->dml.soc.dram_clock_change_latency_us = dc->dcn_soc->dram_clock_change_latency;
1576 dc->dml.soc.return_bus_width_bytes = dc->dcn_soc.return_bus_width; 1577 dc->dml.soc.return_bus_width_bytes = dc->dcn_soc->return_bus_width;
1577 1578
1578 dc->dml.ip.rob_buffer_size_kbytes = dc->dcn_ip.rob_buffer_size_in_kbyte; 1579 dc->dml.ip.rob_buffer_size_kbytes = dc->dcn_ip->rob_buffer_size_in_kbyte;
1579 dc->dml.ip.det_buffer_size_kbytes = dc->dcn_ip.det_buffer_size_in_kbyte; 1580 dc->dml.ip.det_buffer_size_kbytes = dc->dcn_ip->det_buffer_size_in_kbyte;
1580 dc->dml.ip.dpp_output_buffer_pixels = dc->dcn_ip.dpp_output_buffer_pixels; 1581 dc->dml.ip.dpp_output_buffer_pixels = dc->dcn_ip->dpp_output_buffer_pixels;
1581 dc->dml.ip.opp_output_buffer_lines = dc->dcn_ip.opp_output_buffer_lines; 1582 dc->dml.ip.opp_output_buffer_lines = dc->dcn_ip->opp_output_buffer_lines;
1582 dc->dml.ip.pixel_chunk_size_kbytes = dc->dcn_ip.pixel_chunk_size_in_kbyte; 1583 dc->dml.ip.pixel_chunk_size_kbytes = dc->dcn_ip->pixel_chunk_size_in_kbyte;
1583 dc->dml.ip.pte_enable = dc->dcn_ip.pte_enable == dcn_bw_yes; 1584 dc->dml.ip.pte_enable = dc->dcn_ip->pte_enable == dcn_bw_yes;
1584 dc->dml.ip.pte_chunk_size_kbytes = dc->dcn_ip.pte_chunk_size; 1585 dc->dml.ip.pte_chunk_size_kbytes = dc->dcn_ip->pte_chunk_size;
1585 dc->dml.ip.meta_chunk_size_kbytes = dc->dcn_ip.meta_chunk_size; 1586 dc->dml.ip.meta_chunk_size_kbytes = dc->dcn_ip->meta_chunk_size;
1586 dc->dml.ip.writeback_chunk_size_kbytes = dc->dcn_ip.writeback_chunk_size; 1587 dc->dml.ip.writeback_chunk_size_kbytes = dc->dcn_ip->writeback_chunk_size;
1587 dc->dml.ip.line_buffer_size_bits = dc->dcn_ip.line_buffer_size; 1588 dc->dml.ip.line_buffer_size_bits = dc->dcn_ip->line_buffer_size;
1588 dc->dml.ip.max_line_buffer_lines = dc->dcn_ip.max_line_buffer_lines; 1589 dc->dml.ip.max_line_buffer_lines = dc->dcn_ip->max_line_buffer_lines;
1589 dc->dml.ip.IsLineBufferBppFixed = dc->dcn_ip.is_line_buffer_bpp_fixed == dcn_bw_yes; 1590 dc->dml.ip.IsLineBufferBppFixed = dc->dcn_ip->is_line_buffer_bpp_fixed == dcn_bw_yes;
1590 dc->dml.ip.LineBufferFixedBpp = dc->dcn_ip.line_buffer_fixed_bpp; 1591 dc->dml.ip.LineBufferFixedBpp = dc->dcn_ip->line_buffer_fixed_bpp;
1591 dc->dml.ip.writeback_luma_buffer_size_kbytes = dc->dcn_ip.writeback_luma_buffer_size; 1592 dc->dml.ip.writeback_luma_buffer_size_kbytes = dc->dcn_ip->writeback_luma_buffer_size;
1592 dc->dml.ip.writeback_chroma_buffer_size_kbytes = dc->dcn_ip.writeback_chroma_buffer_size; 1593 dc->dml.ip.writeback_chroma_buffer_size_kbytes = dc->dcn_ip->writeback_chroma_buffer_size;
1593 dc->dml.ip.max_num_dpp = dc->dcn_ip.max_num_dpp; 1594 dc->dml.ip.max_num_dpp = dc->dcn_ip->max_num_dpp;
1594 dc->dml.ip.max_num_wb = dc->dcn_ip.max_num_writeback; 1595 dc->dml.ip.max_num_wb = dc->dcn_ip->max_num_writeback;
1595 dc->dml.ip.max_dchub_pscl_bw_pix_per_clk = dc->dcn_ip.max_dchub_topscl_throughput; 1596 dc->dml.ip.max_dchub_pscl_bw_pix_per_clk = dc->dcn_ip->max_dchub_topscl_throughput;
1596 dc->dml.ip.max_pscl_lb_bw_pix_per_clk = dc->dcn_ip.max_pscl_tolb_throughput; 1597 dc->dml.ip.max_pscl_lb_bw_pix_per_clk = dc->dcn_ip->max_pscl_tolb_throughput;
1597 dc->dml.ip.max_lb_vscl_bw_pix_per_clk = dc->dcn_ip.max_lb_tovscl_throughput; 1598 dc->dml.ip.max_lb_vscl_bw_pix_per_clk = dc->dcn_ip->max_lb_tovscl_throughput;
1598 dc->dml.ip.max_vscl_hscl_bw_pix_per_clk = dc->dcn_ip.max_vscl_tohscl_throughput; 1599 dc->dml.ip.max_vscl_hscl_bw_pix_per_clk = dc->dcn_ip->max_vscl_tohscl_throughput;
1599 dc->dml.ip.max_hscl_ratio = dc->dcn_ip.max_hscl_ratio; 1600 dc->dml.ip.max_hscl_ratio = dc->dcn_ip->max_hscl_ratio;
1600 dc->dml.ip.max_vscl_ratio = dc->dcn_ip.max_vscl_ratio; 1601 dc->dml.ip.max_vscl_ratio = dc->dcn_ip->max_vscl_ratio;
1601 dc->dml.ip.max_hscl_taps = dc->dcn_ip.max_hscl_taps; 1602 dc->dml.ip.max_hscl_taps = dc->dcn_ip->max_hscl_taps;
1602 dc->dml.ip.max_vscl_taps = dc->dcn_ip.max_vscl_taps; 1603 dc->dml.ip.max_vscl_taps = dc->dcn_ip->max_vscl_taps;
1603 /*pte_buffer_size_in_requests missing in dml*/ 1604 /*pte_buffer_size_in_requests missing in dml*/
1604 dc->dml.ip.dispclk_ramp_margin_percent = dc->dcn_ip.dispclk_ramping_margin; 1605 dc->dml.ip.dispclk_ramp_margin_percent = dc->dcn_ip->dispclk_ramping_margin;
1605 dc->dml.ip.underscan_factor = dc->dcn_ip.under_scan_factor; 1606 dc->dml.ip.underscan_factor = dc->dcn_ip->under_scan_factor;
1606 dc->dml.ip.max_inter_dcn_tile_repeaters = dc->dcn_ip.max_inter_dcn_tile_repeaters; 1607 dc->dml.ip.max_inter_dcn_tile_repeaters = dc->dcn_ip->max_inter_dcn_tile_repeaters;
1607 dc->dml.ip.can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one = 1608 dc->dml.ip.can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one =
1608 dc->dcn_ip.can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one == dcn_bw_yes; 1609 dc->dcn_ip->can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one == dcn_bw_yes;
1609 dc->dml.ip.bug_forcing_LC_req_same_size_fixed = 1610 dc->dml.ip.bug_forcing_LC_req_same_size_fixed =
1610 dc->dcn_ip.bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes; 1611 dc->dcn_ip->bug_forcing_luma_and_chroma_request_to_same_size_fixed == dcn_bw_yes;
1611 dc->dml.ip.dcfclk_cstate_latency = dc->dcn_ip.dcfclk_cstate_latency; 1612 dc->dml.ip.dcfclk_cstate_latency = dc->dcn_ip->dcfclk_cstate_latency;
1612 kernel_fpu_end(); 1613 kernel_fpu_end();
1613} 1614}
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 33c3d88b1c86..40d65b758994 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -440,6 +440,13 @@ static void destruct(struct core_dc *dc)
440 dm_free(dc->bw_dceip); 440 dm_free(dc->bw_dceip);
441 dc->bw_dceip = NULL; 441 dc->bw_dceip = NULL;
442 442
443#ifdef CONFIG_DRM_AMD_DC_DCN1_0
444 dm_free(dc->dcn_soc);
445 dc->dcn_soc = NULL;
446
447 dm_free(dc->dcn_ip);
448 dc->dcn_ip = NULL;
449#endif
443} 450}
444 451
445static bool construct(struct core_dc *dc, 452static bool construct(struct core_dc *dc,
@@ -449,33 +456,52 @@ static bool construct(struct core_dc *dc,
449 struct dc_context *dc_ctx = dm_alloc(sizeof(*dc_ctx)); 456 struct dc_context *dc_ctx = dm_alloc(sizeof(*dc_ctx));
450 struct bw_calcs_dceip *dc_dceip = dm_alloc(sizeof(*dc_dceip)); 457 struct bw_calcs_dceip *dc_dceip = dm_alloc(sizeof(*dc_dceip));
451 struct bw_calcs_vbios *dc_vbios = dm_alloc(sizeof(*dc_vbios)); 458 struct bw_calcs_vbios *dc_vbios = dm_alloc(sizeof(*dc_vbios));
459#ifdef CONFIG_DRM_AMD_DC_DCN1_0
460 struct dcn_soc_bounding_box *dcn_soc = dm_alloc(sizeof(*dcn_soc));
461 struct dcn_ip_params *dcn_ip = dm_alloc(sizeof(*dcn_ip));
462#endif
452 463
453 enum dce_version dc_version = DCE_VERSION_UNKNOWN; 464 enum dce_version dc_version = DCE_VERSION_UNKNOWN;
454 465
455 if (!dc_dceip) { 466 if (!dc_dceip) {
456 dm_error("%s: failed to create dceip\n", __func__); 467 dm_error("%s: failed to create dceip\n", __func__);
457 goto dceip_fail; 468 goto fail;
458 } 469 }
459 470
460 dc->bw_dceip = dc_dceip; 471 dc->bw_dceip = dc_dceip;
461 472
462 if (!dc_vbios) { 473 if (!dc_vbios) {
463 dm_error("%s: failed to create vbios\n", __func__); 474 dm_error("%s: failed to create vbios\n", __func__);
464 goto vbios_fail; 475 goto fail;
465 } 476 }
466 477
467 dc->bw_vbios = dc_vbios; 478 dc->bw_vbios = dc_vbios;
479#ifdef CONFIG_DRM_AMD_DC_DCN1_0
480 if (!dcn_soc) {
481 dm_error("%s: failed to create dcn_soc\n", __func__);
482 goto fail;
483 }
484
485 dc->dcn_soc = dcn_soc;
486
487 if (!dcn_ip) {
488 dm_error("%s: failed to create dcn_ip\n", __func__);
489 goto fail;
490 }
491
492 dc->dcn_ip = dcn_ip;
493#endif
468 494
469 if (!dc_ctx) { 495 if (!dc_ctx) {
470 dm_error("%s: failed to create ctx\n", __func__); 496 dm_error("%s: failed to create ctx\n", __func__);
471 goto ctx_fail; 497 goto fail;
472 } 498 }
473 499
474 dc->current_context = dm_alloc(sizeof(*dc->current_context)); 500 dc->current_context = dm_alloc(sizeof(*dc->current_context));
475 501
476 if (!dc->current_context) { 502 if (!dc->current_context) {
477 dm_error("%s: failed to create validate ctx\n", __func__); 503 dm_error("%s: failed to create validate ctx\n", __func__);
478 goto val_ctx_fail; 504 goto fail;
479 } 505 }
480 506
481 atomic_inc(&dc->current_context->ref_count); 507 atomic_inc(&dc->current_context->ref_count);
@@ -491,7 +517,7 @@ static bool construct(struct core_dc *dc,
491 if (!logger) { 517 if (!logger) {
492 /* can *not* call logger. call base driver 'print error' */ 518 /* can *not* call logger. call base driver 'print error' */
493 dm_error("%s: failed to create Logger!\n", __func__); 519 dm_error("%s: failed to create Logger!\n", __func__);
494 goto logger_fail; 520 goto fail;
495 } 521 }
496 dc_ctx->logger = logger; 522 dc_ctx->logger = logger;
497 dc->ctx = dc_ctx; 523 dc->ctx = dc_ctx;
@@ -519,7 +545,7 @@ static bool construct(struct core_dc *dc,
519 545
520 if (!dc_ctx->dc_bios) { 546 if (!dc_ctx->dc_bios) {
521 ASSERT_CRITICAL(false); 547 ASSERT_CRITICAL(false);
522 goto bios_fail; 548 goto fail;
523 } 549 }
524 550
525 dc_ctx->created_bios = true; 551 dc_ctx->created_bios = true;
@@ -530,7 +556,7 @@ static bool construct(struct core_dc *dc,
530 556
531 if (!dc_ctx->i2caux) { 557 if (!dc_ctx->i2caux) {
532 ASSERT_CRITICAL(false); 558 ASSERT_CRITICAL(false);
533 goto failed_to_create_i2caux; 559 goto fail;
534 } 560 }
535 561
536 /* Create GPIO service */ 562 /* Create GPIO service */
@@ -541,7 +567,7 @@ static bool construct(struct core_dc *dc,
541 567
542 if (!dc_ctx->gpio_service) { 568 if (!dc_ctx->gpio_service) {
543 ASSERT_CRITICAL(false); 569 ASSERT_CRITICAL(false);
544 goto gpio_fail; 570 goto fail;
545 } 571 }
546 572
547 dc->res_pool = dc_create_resource_pool( 573 dc->res_pool = dc_create_resource_pool(
@@ -550,26 +576,17 @@ static bool construct(struct core_dc *dc,
550 dc_version, 576 dc_version,
551 init_params->asic_id); 577 init_params->asic_id);
552 if (!dc->res_pool) 578 if (!dc->res_pool)
553 goto create_resource_fail; 579 goto fail;
554 580
555 if (!create_links(dc, init_params->num_virtual_links)) 581 if (!create_links(dc, init_params->num_virtual_links))
556 goto create_links_fail; 582 goto fail;
557 583
558 allocate_dc_stream_funcs(dc); 584 allocate_dc_stream_funcs(dc);
559 585
560 return true; 586 return true;
561 587
562 /**** error handling here ****/ 588fail:
563create_links_fail: 589
564create_resource_fail:
565gpio_fail:
566failed_to_create_i2caux:
567bios_fail:
568logger_fail:
569val_ctx_fail:
570ctx_fail:
571dceip_fail:
572vbios_fail:
573 destruct(dc); 590 destruct(dc);
574 return false; 591 return false;
575} 592}
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
index fa990a51ac83..c36843d497ac 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
@@ -1322,28 +1322,28 @@ static bool construct(
1322 } 1322 }
1323 1323
1324 dml_init_instance(&dc->dml, DML_PROJECT_RAVEN1); 1324 dml_init_instance(&dc->dml, DML_PROJECT_RAVEN1);
1325 dc->dcn_ip = dcn10_ip_defaults; 1325 memcpy(dc->dcn_ip, &dcn10_ip_defaults, sizeof(dcn10_ip_defaults));
1326 dc->dcn_soc = dcn10_soc_defaults; 1326 memcpy(dc->dcn_soc, &dcn10_soc_defaults, sizeof(dcn10_soc_defaults));
1327 1327
1328 if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) { 1328 if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) {
1329 dc->dcn_soc.urgent_latency = 3; 1329 dc->dcn_soc->urgent_latency = 3;
1330 dc->public.debug.disable_dmcu = true; 1330 dc->public.debug.disable_dmcu = true;
1331 dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9 = 41.60f; 1331 dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 41.60f;
1332 } 1332 }
1333 1333
1334 1334
1335 dc->dcn_soc.number_of_channels = dc->ctx->asic_id.vram_width / ddr4_dram_width; 1335 dc->dcn_soc->number_of_channels = dc->ctx->asic_id.vram_width / ddr4_dram_width;
1336 ASSERT(dc->dcn_soc.number_of_channels < 3); 1336 ASSERT(dc->dcn_soc->number_of_channels < 3);
1337 if (dc->dcn_soc.number_of_channels == 0)/*old sbios bug*/ 1337 if (dc->dcn_soc->number_of_channels == 0)/*old sbios bug*/
1338 dc->dcn_soc.number_of_channels = 2; 1338 dc->dcn_soc->number_of_channels = 2;
1339 1339
1340 if (dc->dcn_soc.number_of_channels == 1) { 1340 if (dc->dcn_soc->number_of_channels == 1) {
1341 dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9 = 19.2f; 1341 dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 19.2f;
1342 dc->dcn_soc.fabric_and_dram_bandwidth_vnom0p8 = 17.066f; 1342 dc->dcn_soc->fabric_and_dram_bandwidth_vnom0p8 = 17.066f;
1343 dc->dcn_soc.fabric_and_dram_bandwidth_vmid0p72 = 14.933f; 1343 dc->dcn_soc->fabric_and_dram_bandwidth_vmid0p72 = 14.933f;
1344 dc->dcn_soc.fabric_and_dram_bandwidth_vmin0p65 = 12.8f; 1344 dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 = 12.8f;
1345 if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) { 1345 if (ASICREV_IS_RV1_F0(dc->ctx->asic_id.hw_internal_rev)) {
1346 dc->dcn_soc.fabric_and_dram_bandwidth_vmax0p9 = 20.80f; 1346 dc->dcn_soc->fabric_and_dram_bandwidth_vmax0p9 = 20.80f;
1347 } 1347 }
1348 } 1348 }
1349 1349
diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_dc.h b/drivers/gpu/drm/amd/display/dc/inc/core_dc.h
index 982f7170f5d2..ebe1fd78a92a 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/core_dc.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/core_dc.h
@@ -32,8 +32,8 @@ struct core_dc {
32 struct bw_calcs_dceip *bw_dceip; 32 struct bw_calcs_dceip *bw_dceip;
33 struct bw_calcs_vbios *bw_vbios; 33 struct bw_calcs_vbios *bw_vbios;
34#ifdef CONFIG_DRM_AMD_DC_DCN1_0 34#ifdef CONFIG_DRM_AMD_DC_DCN1_0
35 struct dcn_soc_bounding_box dcn_soc; 35 struct dcn_soc_bounding_box *dcn_soc;
36 struct dcn_ip_params dcn_ip; 36 struct dcn_ip_params *dcn_ip;
37 struct display_mode_lib dml; 37 struct display_mode_lib dml;
38#endif 38#endif
39 39