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