diff options
author | Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> | 2017-08-03 13:02:29 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-26 18:16:38 -0400 |
commit | 65111f25f1fea751f3b4321a59c993c2898b7dbf (patch) | |
tree | 9c4109156a116b738424b924d68f22cb000acee6 /drivers/gpu/drm/amd | |
parent | e771aae02baa59386972faec491cd221c169ed53 (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.c | 553 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc.c | 59 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | 28 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/inc/core_dc.h | 4 |
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 | ||
445 | static bool construct(struct core_dc *dc, | 452 | static 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 ****/ | 588 | fail: |
563 | create_links_fail: | 589 | |
564 | create_resource_fail: | ||
565 | gpio_fail: | ||
566 | failed_to_create_i2caux: | ||
567 | bios_fail: | ||
568 | logger_fail: | ||
569 | val_ctx_fail: | ||
570 | ctx_fail: | ||
571 | dceip_fail: | ||
572 | vbios_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 | ||