1fb4d8502Sjsg /* 2fb4d8502Sjsg * Copyright 2017 Advanced Micro Devices, Inc. 3fb4d8502Sjsg * 4fb4d8502Sjsg * Permission is hereby granted, free of charge, to any person obtaining a 5fb4d8502Sjsg * copy of this software and associated documentation files (the "Software"), 6fb4d8502Sjsg * to deal in the Software without restriction, including without limitation 7fb4d8502Sjsg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8fb4d8502Sjsg * and/or sell copies of the Software, and to permit persons to whom the 9fb4d8502Sjsg * Software is furnished to do so, subject to the following conditions: 10fb4d8502Sjsg * 11fb4d8502Sjsg * The above copyright notice and this permission notice shall be included in 12fb4d8502Sjsg * all copies or substantial portions of the Software. 13fb4d8502Sjsg * 14fb4d8502Sjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15fb4d8502Sjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16fb4d8502Sjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17fb4d8502Sjsg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18fb4d8502Sjsg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19fb4d8502Sjsg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20fb4d8502Sjsg * OTHER DEALINGS IN THE SOFTWARE. 21fb4d8502Sjsg * 22fb4d8502Sjsg * Authors: AMD 23fb4d8502Sjsg * 24fb4d8502Sjsg */ 25fb4d8502Sjsg 26fb4d8502Sjsg /** 27fb4d8502Sjsg * Bandwidth and Watermark calculations interface. 28fb4d8502Sjsg * (Refer to "DCEx_mode_support.xlsm" from Perforce.) 29fb4d8502Sjsg */ 30fb4d8502Sjsg #ifndef __DCN_CALCS_H__ 31fb4d8502Sjsg #define __DCN_CALCS_H__ 32fb4d8502Sjsg 33fb4d8502Sjsg #include "bw_fixed.h" 34fb4d8502Sjsg #include "../dml/display_mode_lib.h" 35fb4d8502Sjsg 36c349dbc7Sjsg 37fb4d8502Sjsg struct dc; 38fb4d8502Sjsg struct dc_state; 39fb4d8502Sjsg 40fb4d8502Sjsg /******************************************************************************* 41fb4d8502Sjsg * DCN data structures. 42fb4d8502Sjsg ******************************************************************************/ 43fb4d8502Sjsg 44fb4d8502Sjsg #define number_of_planes 6 45fb4d8502Sjsg #define number_of_planes_minus_one 5 46fb4d8502Sjsg #define number_of_states 4 47fb4d8502Sjsg #define number_of_states_plus_one 5 48fb4d8502Sjsg 49fb4d8502Sjsg #define ddr4_dram_width 64 50fb4d8502Sjsg #define ddr4_dram_factor_single_Channel 16 51fb4d8502Sjsg enum dcn_bw_defs { 52fb4d8502Sjsg dcn_bw_v_min0p65, 53fb4d8502Sjsg dcn_bw_v_mid0p72, 54fb4d8502Sjsg dcn_bw_v_nom0p8, 55fb4d8502Sjsg dcn_bw_v_max0p9, 56fb4d8502Sjsg dcn_bw_v_max0p91, 57fb4d8502Sjsg dcn_bw_no_support = 5, 58fb4d8502Sjsg dcn_bw_yes, 59fb4d8502Sjsg dcn_bw_hor, 60fb4d8502Sjsg dcn_bw_vert, 61fb4d8502Sjsg dcn_bw_override, 62fb4d8502Sjsg dcn_bw_rgb_sub_64, 63fb4d8502Sjsg dcn_bw_rgb_sub_32, 64fb4d8502Sjsg dcn_bw_rgb_sub_16, 65fb4d8502Sjsg dcn_bw_no, 66fb4d8502Sjsg dcn_bw_sw_linear, 67fb4d8502Sjsg dcn_bw_sw_4_kb_d, 68fb4d8502Sjsg dcn_bw_sw_4_kb_d_x, 69fb4d8502Sjsg dcn_bw_sw_64_kb_d, 70fb4d8502Sjsg dcn_bw_sw_64_kb_d_t, 71fb4d8502Sjsg dcn_bw_sw_64_kb_d_x, 72fb4d8502Sjsg dcn_bw_sw_var_d, 73fb4d8502Sjsg dcn_bw_sw_var_d_x, 74fb4d8502Sjsg dcn_bw_yuv420_sub_8, 75fb4d8502Sjsg dcn_bw_sw_4_kb_s, 76fb4d8502Sjsg dcn_bw_sw_4_kb_s_x, 77fb4d8502Sjsg dcn_bw_sw_64_kb_s, 78fb4d8502Sjsg dcn_bw_sw_64_kb_s_t, 79fb4d8502Sjsg dcn_bw_sw_64_kb_s_x, 80fb4d8502Sjsg dcn_bw_writeback, 81fb4d8502Sjsg dcn_bw_444, 82fb4d8502Sjsg dcn_bw_dp, 83fb4d8502Sjsg dcn_bw_420, 84fb4d8502Sjsg dcn_bw_hdmi, 85fb4d8502Sjsg dcn_bw_sw_var_s, 86fb4d8502Sjsg dcn_bw_sw_var_s_x, 87fb4d8502Sjsg dcn_bw_yuv420_sub_10, 88fb4d8502Sjsg dcn_bw_supported_in_v_active, 89fb4d8502Sjsg dcn_bw_supported_in_v_blank, 90fb4d8502Sjsg dcn_bw_not_supported, 91fb4d8502Sjsg dcn_bw_na, 92fb4d8502Sjsg dcn_bw_encoder_8bpc, 93fb4d8502Sjsg dcn_bw_encoder_10bpc, 94fb4d8502Sjsg dcn_bw_encoder_12bpc, 95fb4d8502Sjsg dcn_bw_encoder_16bpc, 96fb4d8502Sjsg }; 97fb4d8502Sjsg 98fb4d8502Sjsg /*bounding box parameters*/ 99fb4d8502Sjsg /*mode parameters*/ 100fb4d8502Sjsg /*system configuration*/ 101fb4d8502Sjsg /* display configuration*/ 102fb4d8502Sjsg struct dcn_bw_internal_vars { 103fb4d8502Sjsg float voltage[number_of_states_plus_one + 1]; 104fb4d8502Sjsg float max_dispclk[number_of_states_plus_one + 1]; 105fb4d8502Sjsg float max_dppclk[number_of_states_plus_one + 1]; 106fb4d8502Sjsg float dcfclk_per_state[number_of_states_plus_one + 1]; 107fb4d8502Sjsg float phyclk_per_state[number_of_states_plus_one + 1]; 108fb4d8502Sjsg float fabric_and_dram_bandwidth_per_state[number_of_states_plus_one + 1]; 109fb4d8502Sjsg float sr_exit_time; 110fb4d8502Sjsg float sr_enter_plus_exit_time; 111fb4d8502Sjsg float dram_clock_change_latency; 112fb4d8502Sjsg float urgent_latency; 113fb4d8502Sjsg float write_back_latency; 114fb4d8502Sjsg float percent_of_ideal_drambw_received_after_urg_latency; 115fb4d8502Sjsg float dcfclkv_max0p9; 116fb4d8502Sjsg float dcfclkv_nom0p8; 117fb4d8502Sjsg float dcfclkv_mid0p72; 118fb4d8502Sjsg float dcfclkv_min0p65; 119fb4d8502Sjsg float max_dispclk_vmax0p9; 120fb4d8502Sjsg float max_dppclk_vmax0p9; 121fb4d8502Sjsg float max_dispclk_vnom0p8; 122fb4d8502Sjsg float max_dppclk_vnom0p8; 123fb4d8502Sjsg float max_dispclk_vmid0p72; 124fb4d8502Sjsg float max_dppclk_vmid0p72; 125fb4d8502Sjsg float max_dispclk_vmin0p65; 126fb4d8502Sjsg float max_dppclk_vmin0p65; 127fb4d8502Sjsg float socclk; 128fb4d8502Sjsg float fabric_and_dram_bandwidth_vmax0p9; 129fb4d8502Sjsg float fabric_and_dram_bandwidth_vnom0p8; 130fb4d8502Sjsg float fabric_and_dram_bandwidth_vmid0p72; 131fb4d8502Sjsg float fabric_and_dram_bandwidth_vmin0p65; 132fb4d8502Sjsg float round_trip_ping_latency_cycles; 133fb4d8502Sjsg float urgent_out_of_order_return_per_channel; 134fb4d8502Sjsg float number_of_channels; 135fb4d8502Sjsg float vmm_page_size; 136fb4d8502Sjsg float return_bus_width; 137fb4d8502Sjsg float rob_buffer_size_in_kbyte; 138fb4d8502Sjsg float det_buffer_size_in_kbyte; 139fb4d8502Sjsg float dpp_output_buffer_pixels; 140fb4d8502Sjsg float opp_output_buffer_lines; 141fb4d8502Sjsg float pixel_chunk_size_in_kbyte; 142fb4d8502Sjsg float pte_chunk_size; 143fb4d8502Sjsg float meta_chunk_size; 144fb4d8502Sjsg float writeback_chunk_size; 145fb4d8502Sjsg enum dcn_bw_defs odm_capability; 146fb4d8502Sjsg enum dcn_bw_defs dsc_capability; 147fb4d8502Sjsg float line_buffer_size; 148fb4d8502Sjsg enum dcn_bw_defs is_line_buffer_bpp_fixed; 149fb4d8502Sjsg float line_buffer_fixed_bpp; 150fb4d8502Sjsg float max_line_buffer_lines; 151fb4d8502Sjsg float writeback_luma_buffer_size; 152fb4d8502Sjsg float writeback_chroma_buffer_size; 153fb4d8502Sjsg float max_num_dpp; 154fb4d8502Sjsg float max_num_writeback; 155fb4d8502Sjsg float max_dchub_topscl_throughput; 156fb4d8502Sjsg float max_pscl_tolb_throughput; 157fb4d8502Sjsg float max_lb_tovscl_throughput; 158fb4d8502Sjsg float max_vscl_tohscl_throughput; 159fb4d8502Sjsg float max_hscl_ratio; 160fb4d8502Sjsg float max_vscl_ratio; 161fb4d8502Sjsg float max_hscl_taps; 162fb4d8502Sjsg float max_vscl_taps; 163fb4d8502Sjsg float under_scan_factor; 164fb4d8502Sjsg float phyclkv_max0p9; 165fb4d8502Sjsg float phyclkv_nom0p8; 166fb4d8502Sjsg float phyclkv_mid0p72; 167fb4d8502Sjsg float phyclkv_min0p65; 168fb4d8502Sjsg float pte_buffer_size_in_requests; 169fb4d8502Sjsg float dispclk_ramping_margin; 170fb4d8502Sjsg float downspreading; 171fb4d8502Sjsg float max_inter_dcn_tile_repeaters; 172fb4d8502Sjsg enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one; 173fb4d8502Sjsg enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed; 174fb4d8502Sjsg int mode; 175fb4d8502Sjsg float viewport_width[number_of_planes_minus_one + 1]; 176fb4d8502Sjsg float htotal[number_of_planes_minus_one + 1]; 177fb4d8502Sjsg float vtotal[number_of_planes_minus_one + 1]; 178fb4d8502Sjsg float v_sync_plus_back_porch[number_of_planes_minus_one + 1]; 179fb4d8502Sjsg float vactive[number_of_planes_minus_one + 1]; 180fb4d8502Sjsg float pixel_clock[number_of_planes_minus_one + 1]; /*MHz*/ 181fb4d8502Sjsg float viewport_height[number_of_planes_minus_one + 1]; 182fb4d8502Sjsg enum dcn_bw_defs dcc_enable[number_of_planes_minus_one + 1]; 183fb4d8502Sjsg float dcc_rate[number_of_planes_minus_one + 1]; 184fb4d8502Sjsg enum dcn_bw_defs source_scan[number_of_planes_minus_one + 1]; 185fb4d8502Sjsg float lb_bit_per_pixel[number_of_planes_minus_one + 1]; 186fb4d8502Sjsg enum dcn_bw_defs source_pixel_format[number_of_planes_minus_one + 1]; 187fb4d8502Sjsg enum dcn_bw_defs source_surface_mode[number_of_planes_minus_one + 1]; 188fb4d8502Sjsg enum dcn_bw_defs output_format[number_of_planes_minus_one + 1]; 189fb4d8502Sjsg enum dcn_bw_defs output_deep_color[number_of_planes_minus_one + 1]; 190fb4d8502Sjsg enum dcn_bw_defs output[number_of_planes_minus_one + 1]; 191fb4d8502Sjsg float scaler_rec_out_width[number_of_planes_minus_one + 1]; 192fb4d8502Sjsg float scaler_recout_height[number_of_planes_minus_one + 1]; 193fb4d8502Sjsg float underscan_output[number_of_planes_minus_one + 1]; 194fb4d8502Sjsg float interlace_output[number_of_planes_minus_one + 1]; 195fb4d8502Sjsg float override_hta_ps[number_of_planes_minus_one + 1]; 196fb4d8502Sjsg float override_vta_ps[number_of_planes_minus_one + 1]; 197fb4d8502Sjsg float override_hta_pschroma[number_of_planes_minus_one + 1]; 198fb4d8502Sjsg float override_vta_pschroma[number_of_planes_minus_one + 1]; 199fb4d8502Sjsg float urgent_latency_support_us[number_of_planes_minus_one + 1]; 200fb4d8502Sjsg float h_ratio[number_of_planes_minus_one + 1]; 201fb4d8502Sjsg float v_ratio[number_of_planes_minus_one + 1]; 202fb4d8502Sjsg float htaps[number_of_planes_minus_one + 1]; 203fb4d8502Sjsg float vtaps[number_of_planes_minus_one + 1]; 204fb4d8502Sjsg float hta_pschroma[number_of_planes_minus_one + 1]; 205fb4d8502Sjsg float vta_pschroma[number_of_planes_minus_one + 1]; 206fb4d8502Sjsg enum dcn_bw_defs pte_enable; 207fb4d8502Sjsg enum dcn_bw_defs synchronized_vblank; 208fb4d8502Sjsg enum dcn_bw_defs ta_pscalculation; 209fb4d8502Sjsg int voltage_override_level; 210fb4d8502Sjsg int number_of_active_planes; 211fb4d8502Sjsg int voltage_level; 212fb4d8502Sjsg enum dcn_bw_defs immediate_flip_supported; 213fb4d8502Sjsg float dcfclk; 214fb4d8502Sjsg float max_phyclk; 215fb4d8502Sjsg float fabric_and_dram_bandwidth; 216fb4d8502Sjsg float dpp_per_plane_per_ratio[1 + 1][number_of_planes_minus_one + 1]; 217fb4d8502Sjsg enum dcn_bw_defs dispclk_dppclk_support_per_ratio[1 + 1]; 218fb4d8502Sjsg float required_dispclk_per_ratio[1 + 1]; 219fb4d8502Sjsg enum dcn_bw_defs error_message[1 + 1]; 220fb4d8502Sjsg int dispclk_dppclk_ratio; 221fb4d8502Sjsg float dpp_per_plane[number_of_planes_minus_one + 1]; 222fb4d8502Sjsg float det_buffer_size_y[number_of_planes_minus_one + 1]; 223fb4d8502Sjsg float det_buffer_size_c[number_of_planes_minus_one + 1]; 224fb4d8502Sjsg float swath_height_y[number_of_planes_minus_one + 1]; 225fb4d8502Sjsg float swath_height_c[number_of_planes_minus_one + 1]; 226fb4d8502Sjsg enum dcn_bw_defs final_error_message; 227fb4d8502Sjsg float frequency; 228fb4d8502Sjsg float header_line; 229fb4d8502Sjsg float header; 230fb4d8502Sjsg enum dcn_bw_defs voltage_override; 231fb4d8502Sjsg enum dcn_bw_defs allow_different_hratio_vratio; 232fb4d8502Sjsg float acceptable_quality_hta_ps; 233fb4d8502Sjsg float acceptable_quality_vta_ps; 234fb4d8502Sjsg float no_of_dpp[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 235fb4d8502Sjsg float swath_width_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 236fb4d8502Sjsg float swath_height_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 237fb4d8502Sjsg float swath_height_cper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 238fb4d8502Sjsg float urgent_latency_support_us_per_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 239fb4d8502Sjsg float v_ratio_pre_ywith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 240fb4d8502Sjsg float v_ratio_pre_cwith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 241fb4d8502Sjsg float required_prefetch_pixel_data_bw_with_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 242fb4d8502Sjsg float v_ratio_pre_ywithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 243fb4d8502Sjsg float v_ratio_pre_cwithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 244fb4d8502Sjsg float required_prefetch_pixel_data_bw_without_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1]; 245fb4d8502Sjsg enum dcn_bw_defs prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1]; 246fb4d8502Sjsg enum dcn_bw_defs prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1]; 247fb4d8502Sjsg enum dcn_bw_defs v_ratio_in_prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1]; 248fb4d8502Sjsg enum dcn_bw_defs v_ratio_in_prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1]; 249fb4d8502Sjsg float required_dispclk[number_of_states_plus_one + 1][1 + 1]; 250fb4d8502Sjsg enum dcn_bw_defs dispclk_dppclk_support[number_of_states_plus_one + 1][1 + 1]; 251fb4d8502Sjsg enum dcn_bw_defs total_available_pipes_support[number_of_states_plus_one + 1][1 + 1]; 252fb4d8502Sjsg float total_number_of_active_dpp[number_of_states_plus_one + 1][1 + 1]; 253fb4d8502Sjsg float total_number_of_dcc_active_dpp[number_of_states_plus_one + 1][1 + 1]; 254fb4d8502Sjsg enum dcn_bw_defs urgent_latency_support[number_of_states_plus_one + 1][1 + 1]; 255fb4d8502Sjsg enum dcn_bw_defs mode_support_with_immediate_flip[number_of_states_plus_one + 1][1 + 1]; 256fb4d8502Sjsg enum dcn_bw_defs mode_support_without_immediate_flip[number_of_states_plus_one + 1][1 + 1]; 257fb4d8502Sjsg float return_bw_per_state[number_of_states_plus_one + 1]; 258fb4d8502Sjsg enum dcn_bw_defs dio_support[number_of_states_plus_one + 1]; 259fb4d8502Sjsg float urgent_round_trip_and_out_of_order_latency_per_state[number_of_states_plus_one + 1]; 260fb4d8502Sjsg enum dcn_bw_defs rob_support[number_of_states_plus_one + 1]; 261fb4d8502Sjsg enum dcn_bw_defs bandwidth_support[number_of_states_plus_one + 1]; 262fb4d8502Sjsg float prefetch_bw[number_of_planes_minus_one + 1]; 263fb4d8502Sjsg float meta_pte_bytes_per_frame[number_of_planes_minus_one + 1]; 264fb4d8502Sjsg float meta_row_bytes[number_of_planes_minus_one + 1]; 265fb4d8502Sjsg float dpte_bytes_per_row[number_of_planes_minus_one + 1]; 266fb4d8502Sjsg float prefetch_lines_y[number_of_planes_minus_one + 1]; 267fb4d8502Sjsg float prefetch_lines_c[number_of_planes_minus_one + 1]; 268fb4d8502Sjsg float max_num_sw_y[number_of_planes_minus_one + 1]; 269fb4d8502Sjsg float max_num_sw_c[number_of_planes_minus_one + 1]; 270fb4d8502Sjsg float line_times_for_prefetch[number_of_planes_minus_one + 1]; 271fb4d8502Sjsg float lines_for_meta_pte_with_immediate_flip[number_of_planes_minus_one + 1]; 272fb4d8502Sjsg float lines_for_meta_pte_without_immediate_flip[number_of_planes_minus_one + 1]; 273fb4d8502Sjsg float lines_for_meta_and_dpte_row_with_immediate_flip[number_of_planes_minus_one + 1]; 274fb4d8502Sjsg float lines_for_meta_and_dpte_row_without_immediate_flip[number_of_planes_minus_one + 1]; 275fb4d8502Sjsg float min_dppclk_using_single_dpp[number_of_planes_minus_one + 1]; 276fb4d8502Sjsg float swath_width_ysingle_dpp[number_of_planes_minus_one + 1]; 277fb4d8502Sjsg float byte_per_pixel_in_dety[number_of_planes_minus_one + 1]; 278fb4d8502Sjsg float byte_per_pixel_in_detc[number_of_planes_minus_one + 1]; 279fb4d8502Sjsg float number_of_dpp_required_for_det_and_lb_size[number_of_planes_minus_one + 1]; 280fb4d8502Sjsg float required_phyclk[number_of_planes_minus_one + 1]; 281fb4d8502Sjsg float read256_block_height_y[number_of_planes_minus_one + 1]; 282fb4d8502Sjsg float read256_block_width_y[number_of_planes_minus_one + 1]; 283fb4d8502Sjsg float read256_block_height_c[number_of_planes_minus_one + 1]; 284fb4d8502Sjsg float read256_block_width_c[number_of_planes_minus_one + 1]; 285fb4d8502Sjsg float max_swath_height_y[number_of_planes_minus_one + 1]; 286fb4d8502Sjsg float max_swath_height_c[number_of_planes_minus_one + 1]; 287fb4d8502Sjsg float min_swath_height_y[number_of_planes_minus_one + 1]; 288fb4d8502Sjsg float min_swath_height_c[number_of_planes_minus_one + 1]; 289fb4d8502Sjsg float read_bandwidth[number_of_planes_minus_one + 1]; 290fb4d8502Sjsg float write_bandwidth[number_of_planes_minus_one + 1]; 291fb4d8502Sjsg float pscl_factor[number_of_planes_minus_one + 1]; 292fb4d8502Sjsg float pscl_factor_chroma[number_of_planes_minus_one + 1]; 293fb4d8502Sjsg enum dcn_bw_defs scale_ratio_support; 294fb4d8502Sjsg enum dcn_bw_defs source_format_pixel_and_scan_support; 295fb4d8502Sjsg float total_read_bandwidth_consumed_gbyte_per_second; 296fb4d8502Sjsg float total_write_bandwidth_consumed_gbyte_per_second; 297fb4d8502Sjsg float total_bandwidth_consumed_gbyte_per_second; 298fb4d8502Sjsg enum dcn_bw_defs dcc_enabled_in_any_plane; 299fb4d8502Sjsg float return_bw_todcn_per_state; 300fb4d8502Sjsg float critical_point; 301fb4d8502Sjsg enum dcn_bw_defs writeback_latency_support; 302fb4d8502Sjsg float required_output_bw; 303fb4d8502Sjsg float total_number_of_active_writeback; 304fb4d8502Sjsg enum dcn_bw_defs total_available_writeback_support; 305fb4d8502Sjsg float maximum_swath_width; 306fb4d8502Sjsg float number_of_dpp_required_for_det_size; 307fb4d8502Sjsg float number_of_dpp_required_for_lb_size; 308fb4d8502Sjsg float min_dispclk_using_single_dpp; 309fb4d8502Sjsg float min_dispclk_using_dual_dpp; 310fb4d8502Sjsg enum dcn_bw_defs viewport_size_support; 311fb4d8502Sjsg float swath_width_granularity_y; 312fb4d8502Sjsg float rounded_up_max_swath_size_bytes_y; 313fb4d8502Sjsg float swath_width_granularity_c; 314fb4d8502Sjsg float rounded_up_max_swath_size_bytes_c; 315fb4d8502Sjsg float lines_in_det_luma; 316fb4d8502Sjsg float lines_in_det_chroma; 317fb4d8502Sjsg float effective_lb_latency_hiding_source_lines_luma; 318fb4d8502Sjsg float effective_lb_latency_hiding_source_lines_chroma; 319fb4d8502Sjsg float effective_detlb_lines_luma; 320fb4d8502Sjsg float effective_detlb_lines_chroma; 321fb4d8502Sjsg float projected_dcfclk_deep_sleep; 322fb4d8502Sjsg float meta_req_height_y; 323fb4d8502Sjsg float meta_req_width_y; 324fb4d8502Sjsg float meta_surface_width_y; 325fb4d8502Sjsg float meta_surface_height_y; 326fb4d8502Sjsg float meta_pte_bytes_per_frame_y; 327fb4d8502Sjsg float meta_row_bytes_y; 328fb4d8502Sjsg float macro_tile_block_size_bytes_y; 329fb4d8502Sjsg float macro_tile_block_height_y; 330fb4d8502Sjsg float data_pte_req_height_y; 331fb4d8502Sjsg float data_pte_req_width_y; 332fb4d8502Sjsg float dpte_bytes_per_row_y; 333fb4d8502Sjsg float meta_req_height_c; 334fb4d8502Sjsg float meta_req_width_c; 335fb4d8502Sjsg float meta_surface_width_c; 336fb4d8502Sjsg float meta_surface_height_c; 337fb4d8502Sjsg float meta_pte_bytes_per_frame_c; 338fb4d8502Sjsg float meta_row_bytes_c; 339fb4d8502Sjsg float macro_tile_block_size_bytes_c; 340fb4d8502Sjsg float macro_tile_block_height_c; 341fb4d8502Sjsg float macro_tile_block_width_c; 342fb4d8502Sjsg float data_pte_req_height_c; 343fb4d8502Sjsg float data_pte_req_width_c; 344fb4d8502Sjsg float dpte_bytes_per_row_c; 345fb4d8502Sjsg float v_init_y; 346fb4d8502Sjsg float max_partial_sw_y; 347fb4d8502Sjsg float v_init_c; 348fb4d8502Sjsg float max_partial_sw_c; 349fb4d8502Sjsg float dst_x_after_scaler; 350fb4d8502Sjsg float dst_y_after_scaler; 351fb4d8502Sjsg float time_calc; 352fb4d8502Sjsg float v_update_offset[number_of_planes_minus_one + 1][2]; 353fb4d8502Sjsg float total_repeater_delay; 354fb4d8502Sjsg float v_update_width[number_of_planes_minus_one + 1][2]; 355fb4d8502Sjsg float v_ready_offset[number_of_planes_minus_one + 1][2]; 356fb4d8502Sjsg float time_setup; 357fb4d8502Sjsg float extra_latency; 358fb4d8502Sjsg float maximum_vstartup; 359fb4d8502Sjsg float bw_available_for_immediate_flip; 360fb4d8502Sjsg float total_immediate_flip_bytes[number_of_planes_minus_one + 1]; 361fb4d8502Sjsg float time_for_meta_pte_with_immediate_flip; 362fb4d8502Sjsg float time_for_meta_pte_without_immediate_flip; 363fb4d8502Sjsg float time_for_meta_and_dpte_row_with_immediate_flip; 364fb4d8502Sjsg float time_for_meta_and_dpte_row_without_immediate_flip; 365fb4d8502Sjsg float line_times_to_request_prefetch_pixel_data_with_immediate_flip; 366fb4d8502Sjsg float line_times_to_request_prefetch_pixel_data_without_immediate_flip; 367fb4d8502Sjsg float maximum_read_bandwidth_with_prefetch_with_immediate_flip; 368fb4d8502Sjsg float maximum_read_bandwidth_with_prefetch_without_immediate_flip; 369fb4d8502Sjsg float voltage_level_with_immediate_flip; 370fb4d8502Sjsg float voltage_level_without_immediate_flip; 371fb4d8502Sjsg float total_number_of_active_dpp_per_ratio[1 + 1]; 372fb4d8502Sjsg float byte_per_pix_dety; 373fb4d8502Sjsg float byte_per_pix_detc; 374fb4d8502Sjsg float read256_bytes_block_height_y; 375fb4d8502Sjsg float read256_bytes_block_width_y; 376fb4d8502Sjsg float read256_bytes_block_height_c; 377fb4d8502Sjsg float read256_bytes_block_width_c; 378fb4d8502Sjsg float maximum_swath_height_y; 379fb4d8502Sjsg float maximum_swath_height_c; 380fb4d8502Sjsg float minimum_swath_height_y; 381fb4d8502Sjsg float minimum_swath_height_c; 382fb4d8502Sjsg float swath_width; 383fb4d8502Sjsg float prefetch_bandwidth[number_of_planes_minus_one + 1]; 384fb4d8502Sjsg float v_init_pre_fill_y[number_of_planes_minus_one + 1]; 385fb4d8502Sjsg float v_init_pre_fill_c[number_of_planes_minus_one + 1]; 386fb4d8502Sjsg float max_num_swath_y[number_of_planes_minus_one + 1]; 387fb4d8502Sjsg float max_num_swath_c[number_of_planes_minus_one + 1]; 388fb4d8502Sjsg float prefill_y[number_of_planes_minus_one + 1]; 389fb4d8502Sjsg float prefill_c[number_of_planes_minus_one + 1]; 390fb4d8502Sjsg float v_startup[number_of_planes_minus_one + 1]; 391fb4d8502Sjsg enum dcn_bw_defs allow_dram_clock_change_during_vblank[number_of_planes_minus_one + 1]; 392fb4d8502Sjsg float allow_dram_self_refresh_during_vblank[number_of_planes_minus_one + 1]; 393fb4d8502Sjsg float v_ratio_prefetch_y[number_of_planes_minus_one + 1]; 394fb4d8502Sjsg float v_ratio_prefetch_c[number_of_planes_minus_one + 1]; 395fb4d8502Sjsg float destination_lines_for_prefetch[number_of_planes_minus_one + 1]; 396fb4d8502Sjsg float destination_lines_to_request_vm_inv_blank[number_of_planes_minus_one + 1]; 397fb4d8502Sjsg float destination_lines_to_request_row_in_vblank[number_of_planes_minus_one + 1]; 398fb4d8502Sjsg float min_ttuv_blank[number_of_planes_minus_one + 1]; 399fb4d8502Sjsg float byte_per_pixel_dety[number_of_planes_minus_one + 1]; 400fb4d8502Sjsg float byte_per_pixel_detc[number_of_planes_minus_one + 1]; 401fb4d8502Sjsg float swath_width_y[number_of_planes_minus_one + 1]; 402fb4d8502Sjsg float lines_in_dety[number_of_planes_minus_one + 1]; 403fb4d8502Sjsg float lines_in_dety_rounded_down_to_swath[number_of_planes_minus_one + 1]; 404fb4d8502Sjsg float lines_in_detc[number_of_planes_minus_one + 1]; 405fb4d8502Sjsg float lines_in_detc_rounded_down_to_swath[number_of_planes_minus_one + 1]; 406fb4d8502Sjsg float full_det_buffering_time_y[number_of_planes_minus_one + 1]; 407fb4d8502Sjsg float full_det_buffering_time_c[number_of_planes_minus_one + 1]; 408fb4d8502Sjsg float active_dram_clock_change_latency_margin[number_of_planes_minus_one + 1]; 409fb4d8502Sjsg float v_blank_dram_clock_change_latency_margin[number_of_planes_minus_one + 1]; 410fb4d8502Sjsg float dcfclk_deep_sleep_per_plane[number_of_planes_minus_one + 1]; 411fb4d8502Sjsg float read_bandwidth_plane_luma[number_of_planes_minus_one + 1]; 412fb4d8502Sjsg float read_bandwidth_plane_chroma[number_of_planes_minus_one + 1]; 413fb4d8502Sjsg float display_pipe_line_delivery_time_luma[number_of_planes_minus_one + 1]; 414fb4d8502Sjsg float display_pipe_line_delivery_time_chroma[number_of_planes_minus_one + 1]; 415fb4d8502Sjsg float display_pipe_line_delivery_time_luma_prefetch[number_of_planes_minus_one + 1]; 416fb4d8502Sjsg float display_pipe_line_delivery_time_chroma_prefetch[number_of_planes_minus_one + 1]; 417fb4d8502Sjsg float pixel_pte_bytes_per_row[number_of_planes_minus_one + 1]; 418fb4d8502Sjsg float meta_pte_bytes_frame[number_of_planes_minus_one + 1]; 419fb4d8502Sjsg float meta_row_byte[number_of_planes_minus_one + 1]; 420fb4d8502Sjsg float prefetch_source_lines_y[number_of_planes_minus_one + 1]; 421fb4d8502Sjsg float prefetch_source_lines_c[number_of_planes_minus_one + 1]; 422fb4d8502Sjsg float pscl_throughput[number_of_planes_minus_one + 1]; 423fb4d8502Sjsg float pscl_throughput_chroma[number_of_planes_minus_one + 1]; 424fb4d8502Sjsg float output_bpphdmi[number_of_planes_minus_one + 1]; 425fb4d8502Sjsg float output_bppdp4_lane_hbr[number_of_planes_minus_one + 1]; 426fb4d8502Sjsg float output_bppdp4_lane_hbr2[number_of_planes_minus_one + 1]; 427fb4d8502Sjsg float output_bppdp4_lane_hbr3[number_of_planes_minus_one + 1]; 428fb4d8502Sjsg float max_vstartup_lines[number_of_planes_minus_one + 1]; 429fb4d8502Sjsg float dispclk_with_ramping; 430fb4d8502Sjsg float dispclk_without_ramping; 431fb4d8502Sjsg float dppclk_using_single_dpp_luma; 432fb4d8502Sjsg float dppclk_using_single_dpp; 433fb4d8502Sjsg float dppclk_using_single_dpp_chroma; 434fb4d8502Sjsg enum dcn_bw_defs odm_capable; 435fb4d8502Sjsg float dispclk; 436fb4d8502Sjsg float dppclk; 437fb4d8502Sjsg float return_bandwidth_to_dcn; 438fb4d8502Sjsg enum dcn_bw_defs dcc_enabled_any_plane; 439fb4d8502Sjsg float return_bw; 440fb4d8502Sjsg float critical_compression; 441fb4d8502Sjsg float total_data_read_bandwidth; 442fb4d8502Sjsg float total_active_dpp; 443fb4d8502Sjsg float total_dcc_active_dpp; 444fb4d8502Sjsg float urgent_round_trip_and_out_of_order_latency; 445fb4d8502Sjsg float last_pixel_of_line_extra_watermark; 446fb4d8502Sjsg float data_fabric_line_delivery_time_luma; 447fb4d8502Sjsg float data_fabric_line_delivery_time_chroma; 448fb4d8502Sjsg float urgent_extra_latency; 449fb4d8502Sjsg float urgent_watermark; 450fb4d8502Sjsg float ptemeta_urgent_watermark; 451fb4d8502Sjsg float dram_clock_change_watermark; 452fb4d8502Sjsg float total_active_writeback; 453fb4d8502Sjsg float writeback_dram_clock_change_watermark; 454fb4d8502Sjsg float min_full_det_buffering_time; 455fb4d8502Sjsg float frame_time_for_min_full_det_buffering_time; 456fb4d8502Sjsg float average_read_bandwidth_gbyte_per_second; 457fb4d8502Sjsg float part_of_burst_that_fits_in_rob; 458fb4d8502Sjsg float stutter_burst_time; 459fb4d8502Sjsg float stutter_efficiency_not_including_vblank; 460fb4d8502Sjsg float smallest_vblank; 461fb4d8502Sjsg float v_blank_time; 462fb4d8502Sjsg float stutter_efficiency; 463fb4d8502Sjsg float dcf_clk_deep_sleep; 464fb4d8502Sjsg float stutter_exit_watermark; 465fb4d8502Sjsg float stutter_enter_plus_exit_watermark; 466fb4d8502Sjsg float effective_det_plus_lb_lines_luma; 467fb4d8502Sjsg float urgent_latency_support_us_luma; 468fb4d8502Sjsg float effective_det_plus_lb_lines_chroma; 469fb4d8502Sjsg float urgent_latency_support_us_chroma; 470fb4d8502Sjsg float min_urgent_latency_support_us; 471fb4d8502Sjsg float non_urgent_latency_tolerance; 472fb4d8502Sjsg float block_height256_bytes_y; 473fb4d8502Sjsg float block_height256_bytes_c; 474fb4d8502Sjsg float meta_request_width_y; 475fb4d8502Sjsg float meta_surf_width_y; 476fb4d8502Sjsg float meta_surf_height_y; 477fb4d8502Sjsg float meta_pte_bytes_frame_y; 478fb4d8502Sjsg float meta_row_byte_y; 479fb4d8502Sjsg float macro_tile_size_byte_y; 480fb4d8502Sjsg float macro_tile_height_y; 481fb4d8502Sjsg float pixel_pte_req_height_y; 482fb4d8502Sjsg float pixel_pte_req_width_y; 483fb4d8502Sjsg float pixel_pte_bytes_per_row_y; 484fb4d8502Sjsg float meta_request_width_c; 485fb4d8502Sjsg float meta_surf_width_c; 486fb4d8502Sjsg float meta_surf_height_c; 487fb4d8502Sjsg float meta_pte_bytes_frame_c; 488fb4d8502Sjsg float meta_row_byte_c; 489fb4d8502Sjsg float macro_tile_size_bytes_c; 490fb4d8502Sjsg float macro_tile_height_c; 491fb4d8502Sjsg float pixel_pte_req_height_c; 492fb4d8502Sjsg float pixel_pte_req_width_c; 493fb4d8502Sjsg float pixel_pte_bytes_per_row_c; 494fb4d8502Sjsg float max_partial_swath_y; 495fb4d8502Sjsg float max_partial_swath_c; 496fb4d8502Sjsg float t_calc; 497fb4d8502Sjsg float next_prefetch_mode; 498fb4d8502Sjsg float v_startup_lines; 499fb4d8502Sjsg enum dcn_bw_defs planes_with_room_to_increase_vstartup_prefetch_bw_less_than_active_bw; 500fb4d8502Sjsg enum dcn_bw_defs planes_with_room_to_increase_vstartup_vratio_prefetch_more_than4; 501fb4d8502Sjsg enum dcn_bw_defs planes_with_room_to_increase_vstartup_destination_line_times_for_prefetch_less_than2; 502fb4d8502Sjsg enum dcn_bw_defs v_ratio_prefetch_more_than4; 503fb4d8502Sjsg enum dcn_bw_defs destination_line_times_for_prefetch_less_than2; 504fb4d8502Sjsg float prefetch_mode; 505fb4d8502Sjsg float dstx_after_scaler; 506fb4d8502Sjsg float dsty_after_scaler; 507c349dbc7Sjsg float v_update_offset_pix[number_of_planes_minus_one + 1]; 508fb4d8502Sjsg float total_repeater_delay_time; 509c349dbc7Sjsg float v_update_width_pix[number_of_planes_minus_one + 1]; 510c349dbc7Sjsg float v_ready_offset_pix[number_of_planes_minus_one + 1]; 511fb4d8502Sjsg float t_setup; 512fb4d8502Sjsg float t_wait; 513fb4d8502Sjsg float bandwidth_available_for_immediate_flip; 514fb4d8502Sjsg float tot_immediate_flip_bytes; 515fb4d8502Sjsg float max_rd_bandwidth; 516fb4d8502Sjsg float time_for_fetching_meta_pte; 517fb4d8502Sjsg float time_for_fetching_row_in_vblank; 518fb4d8502Sjsg float lines_to_request_prefetch_pixel_data; 519fb4d8502Sjsg float required_prefetch_pix_data_bw; 520fb4d8502Sjsg enum dcn_bw_defs prefetch_mode_supported; 521fb4d8502Sjsg float active_dp_ps; 522fb4d8502Sjsg float lb_latency_hiding_source_lines_y; 523fb4d8502Sjsg float lb_latency_hiding_source_lines_c; 524fb4d8502Sjsg float effective_lb_latency_hiding_y; 525fb4d8502Sjsg float effective_lb_latency_hiding_c; 526fb4d8502Sjsg float dpp_output_buffer_lines_y; 527fb4d8502Sjsg float dpp_output_buffer_lines_c; 528fb4d8502Sjsg float dppopp_buffering_y; 529fb4d8502Sjsg float max_det_buffering_time_y; 530fb4d8502Sjsg float active_dram_clock_change_latency_margin_y; 531fb4d8502Sjsg float dppopp_buffering_c; 532fb4d8502Sjsg float max_det_buffering_time_c; 533fb4d8502Sjsg float active_dram_clock_change_latency_margin_c; 534fb4d8502Sjsg float writeback_dram_clock_change_latency_margin; 535fb4d8502Sjsg float min_active_dram_clock_change_margin; 536fb4d8502Sjsg float v_blank_of_min_active_dram_clock_change_margin; 537fb4d8502Sjsg float second_min_active_dram_clock_change_margin; 538fb4d8502Sjsg float min_vblank_dram_clock_change_margin; 539fb4d8502Sjsg float dram_clock_change_margin; 540fb4d8502Sjsg float dram_clock_change_support; 541fb4d8502Sjsg float wr_bandwidth; 542fb4d8502Sjsg float max_used_bw; 543fb4d8502Sjsg }; 544fb4d8502Sjsg 545fb4d8502Sjsg struct dcn_soc_bounding_box { 546fb4d8502Sjsg float sr_exit_time; /*us*/ 547fb4d8502Sjsg float sr_enter_plus_exit_time; /*us*/ 548fb4d8502Sjsg float urgent_latency; /*us*/ 549fb4d8502Sjsg float write_back_latency; /*us*/ 550fb4d8502Sjsg float percent_of_ideal_drambw_received_after_urg_latency; /*%*/ 551fb4d8502Sjsg int max_request_size; /*bytes*/ 552fb4d8502Sjsg float dcfclkv_max0p9; /*MHz*/ 553fb4d8502Sjsg float dcfclkv_nom0p8; /*MHz*/ 554fb4d8502Sjsg float dcfclkv_mid0p72; /*MHz*/ 555fb4d8502Sjsg float dcfclkv_min0p65; /*MHz*/ 556fb4d8502Sjsg float max_dispclk_vmax0p9; /*MHz*/ 557fb4d8502Sjsg float max_dispclk_vmid0p72; /*MHz*/ 558fb4d8502Sjsg float max_dispclk_vnom0p8; /*MHz*/ 559fb4d8502Sjsg float max_dispclk_vmin0p65; /*MHz*/ 560fb4d8502Sjsg float max_dppclk_vmax0p9; /*MHz*/ 561fb4d8502Sjsg float max_dppclk_vnom0p8; /*MHz*/ 562fb4d8502Sjsg float max_dppclk_vmid0p72; /*MHz*/ 563fb4d8502Sjsg float max_dppclk_vmin0p65; /*MHz*/ 564fb4d8502Sjsg float socclk; /*MHz*/ 565fb4d8502Sjsg float fabric_and_dram_bandwidth_vmax0p9; /*GB/s*/ 566fb4d8502Sjsg float fabric_and_dram_bandwidth_vnom0p8; /*GB/s*/ 567fb4d8502Sjsg float fabric_and_dram_bandwidth_vmid0p72; /*GB/s*/ 568fb4d8502Sjsg float fabric_and_dram_bandwidth_vmin0p65; /*GB/s*/ 569fb4d8502Sjsg float phyclkv_max0p9; /*MHz*/ 570fb4d8502Sjsg float phyclkv_nom0p8; /*MHz*/ 571fb4d8502Sjsg float phyclkv_mid0p72; /*MHz*/ 572fb4d8502Sjsg float phyclkv_min0p65; /*MHz*/ 573fb4d8502Sjsg float downspreading; /*%*/ 574fb4d8502Sjsg int round_trip_ping_latency_cycles; /*DCFCLK Cycles*/ 575fb4d8502Sjsg int urgent_out_of_order_return_per_channel; /*bytes*/ 576fb4d8502Sjsg int number_of_channels; 577fb4d8502Sjsg int vmm_page_size; /*bytes*/ 578fb4d8502Sjsg float dram_clock_change_latency; /*us*/ 579fb4d8502Sjsg int return_bus_width; /*bytes*/ 580fb4d8502Sjsg float percent_disp_bw_limit; /*%*/ 581fb4d8502Sjsg }; 582fb4d8502Sjsg extern const struct dcn_soc_bounding_box dcn10_soc_defaults; 583fb4d8502Sjsg 584fb4d8502Sjsg struct dcn_ip_params { 585fb4d8502Sjsg float rob_buffer_size_in_kbyte; 586fb4d8502Sjsg float det_buffer_size_in_kbyte; 587fb4d8502Sjsg float dpp_output_buffer_pixels; 588fb4d8502Sjsg float opp_output_buffer_lines; 589fb4d8502Sjsg float pixel_chunk_size_in_kbyte; 590fb4d8502Sjsg enum dcn_bw_defs pte_enable; 591fb4d8502Sjsg int pte_chunk_size; /*kbytes*/ 592fb4d8502Sjsg int meta_chunk_size; /*kbytes*/ 593fb4d8502Sjsg int writeback_chunk_size; /*kbytes*/ 594fb4d8502Sjsg enum dcn_bw_defs odm_capability; 595fb4d8502Sjsg enum dcn_bw_defs dsc_capability; 596fb4d8502Sjsg int line_buffer_size; /*bit*/ 597fb4d8502Sjsg int max_line_buffer_lines; 598fb4d8502Sjsg enum dcn_bw_defs is_line_buffer_bpp_fixed; 599fb4d8502Sjsg int line_buffer_fixed_bpp; 600fb4d8502Sjsg int writeback_luma_buffer_size; /*kbytes*/ 601fb4d8502Sjsg int writeback_chroma_buffer_size; /*kbytes*/ 602fb4d8502Sjsg int max_num_dpp; 603fb4d8502Sjsg int max_num_writeback; 604fb4d8502Sjsg int max_dchub_topscl_throughput; /*pixels/dppclk*/ 605fb4d8502Sjsg int max_pscl_tolb_throughput; /*pixels/dppclk*/ 606fb4d8502Sjsg int max_lb_tovscl_throughput; /*pixels/dppclk*/ 607fb4d8502Sjsg int max_vscl_tohscl_throughput; /*pixels/dppclk*/ 608fb4d8502Sjsg float max_hscl_ratio; 609fb4d8502Sjsg float max_vscl_ratio; 610fb4d8502Sjsg int max_hscl_taps; 611fb4d8502Sjsg int max_vscl_taps; 612fb4d8502Sjsg int pte_buffer_size_in_requests; 613fb4d8502Sjsg float dispclk_ramping_margin; /*%*/ 614fb4d8502Sjsg float under_scan_factor; 615fb4d8502Sjsg int max_inter_dcn_tile_repeaters; 616fb4d8502Sjsg enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one; 617fb4d8502Sjsg enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed; 618fb4d8502Sjsg int dcfclk_cstate_latency; 619fb4d8502Sjsg }; 620fb4d8502Sjsg extern const struct dcn_ip_params dcn10_ip_defaults; 621fb4d8502Sjsg 622fb4d8502Sjsg bool dcn_validate_bandwidth( 623fb4d8502Sjsg struct dc *dc, 624c349dbc7Sjsg struct dc_state *context, 625c349dbc7Sjsg bool fast_validate); 626fb4d8502Sjsg 627fb4d8502Sjsg unsigned int dcn_find_dcfclk_suits_all( 628fb4d8502Sjsg const struct dc *dc, 629fb4d8502Sjsg struct dc_clocks *clocks); 630fb4d8502Sjsg 631*1bb76ff1Sjsg void dcn_get_soc_clks( 632*1bb76ff1Sjsg struct dc *dc, 633*1bb76ff1Sjsg int *min_fclk_khz, 634*1bb76ff1Sjsg int *min_dcfclk_khz, 635*1bb76ff1Sjsg int *socclk_khz); 636*1bb76ff1Sjsg 637*1bb76ff1Sjsg void dcn_bw_update_from_pplib_fclks( 638*1bb76ff1Sjsg struct dc *dc, 639*1bb76ff1Sjsg struct dm_pp_clock_levels_with_voltage *fclks); 640*1bb76ff1Sjsg void dcn_bw_update_from_pplib_dcfclks( 641*1bb76ff1Sjsg struct dc *dc, 642*1bb76ff1Sjsg struct dm_pp_clock_levels_with_voltage *dcfclks); 643*1bb76ff1Sjsg void dcn_bw_notify_pplib_of_wm_ranges( 644*1bb76ff1Sjsg struct dc *dc, 645*1bb76ff1Sjsg int min_fclk_khz, 646*1bb76ff1Sjsg int min_dcfclk_khz, 647*1bb76ff1Sjsg int socclk_khz); 648fb4d8502Sjsg void dcn_bw_sync_calcs_and_dml(struct dc *dc); 649fb4d8502Sjsg 650c349dbc7Sjsg enum source_macro_tile_size swizzle_mode_to_macro_tile_size(enum swizzle_mode_values sw_mode); 651c349dbc7Sjsg 652fb4d8502Sjsg #endif /* __DCN_CALCS_H__ */ 653fb4d8502Sjsg 654