0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #ifndef __DCN_CALCS_H__
0031 #define __DCN_CALCS_H__
0032
0033 #include "bw_fixed.h"
0034 #include "../dml/display_mode_lib.h"
0035
0036
0037 struct dc;
0038 struct dc_state;
0039
0040
0041
0042
0043
0044 #define number_of_planes 6
0045 #define number_of_planes_minus_one 5
0046 #define number_of_states 4
0047 #define number_of_states_plus_one 5
0048
0049 #define ddr4_dram_width 64
0050 #define ddr4_dram_factor_single_Channel 16
0051 enum dcn_bw_defs {
0052 dcn_bw_v_min0p65,
0053 dcn_bw_v_mid0p72,
0054 dcn_bw_v_nom0p8,
0055 dcn_bw_v_max0p9,
0056 dcn_bw_v_max0p91,
0057 dcn_bw_no_support = 5,
0058 dcn_bw_yes,
0059 dcn_bw_hor,
0060 dcn_bw_vert,
0061 dcn_bw_override,
0062 dcn_bw_rgb_sub_64,
0063 dcn_bw_rgb_sub_32,
0064 dcn_bw_rgb_sub_16,
0065 dcn_bw_no,
0066 dcn_bw_sw_linear,
0067 dcn_bw_sw_4_kb_d,
0068 dcn_bw_sw_4_kb_d_x,
0069 dcn_bw_sw_64_kb_d,
0070 dcn_bw_sw_64_kb_d_t,
0071 dcn_bw_sw_64_kb_d_x,
0072 dcn_bw_sw_var_d,
0073 dcn_bw_sw_var_d_x,
0074 dcn_bw_yuv420_sub_8,
0075 dcn_bw_sw_4_kb_s,
0076 dcn_bw_sw_4_kb_s_x,
0077 dcn_bw_sw_64_kb_s,
0078 dcn_bw_sw_64_kb_s_t,
0079 dcn_bw_sw_64_kb_s_x,
0080 dcn_bw_writeback,
0081 dcn_bw_444,
0082 dcn_bw_dp,
0083 dcn_bw_420,
0084 dcn_bw_hdmi,
0085 dcn_bw_sw_var_s,
0086 dcn_bw_sw_var_s_x,
0087 dcn_bw_yuv420_sub_10,
0088 dcn_bw_supported_in_v_active,
0089 dcn_bw_supported_in_v_blank,
0090 dcn_bw_not_supported,
0091 dcn_bw_na,
0092 dcn_bw_encoder_8bpc,
0093 dcn_bw_encoder_10bpc,
0094 dcn_bw_encoder_12bpc,
0095 dcn_bw_encoder_16bpc,
0096 };
0097
0098
0099
0100
0101
0102 struct dcn_bw_internal_vars {
0103 float voltage[number_of_states_plus_one + 1];
0104 float max_dispclk[number_of_states_plus_one + 1];
0105 float max_dppclk[number_of_states_plus_one + 1];
0106 float dcfclk_per_state[number_of_states_plus_one + 1];
0107 float phyclk_per_state[number_of_states_plus_one + 1];
0108 float fabric_and_dram_bandwidth_per_state[number_of_states_plus_one + 1];
0109 float sr_exit_time;
0110 float sr_enter_plus_exit_time;
0111 float dram_clock_change_latency;
0112 float urgent_latency;
0113 float write_back_latency;
0114 float percent_of_ideal_drambw_received_after_urg_latency;
0115 float dcfclkv_max0p9;
0116 float dcfclkv_nom0p8;
0117 float dcfclkv_mid0p72;
0118 float dcfclkv_min0p65;
0119 float max_dispclk_vmax0p9;
0120 float max_dppclk_vmax0p9;
0121 float max_dispclk_vnom0p8;
0122 float max_dppclk_vnom0p8;
0123 float max_dispclk_vmid0p72;
0124 float max_dppclk_vmid0p72;
0125 float max_dispclk_vmin0p65;
0126 float max_dppclk_vmin0p65;
0127 float socclk;
0128 float fabric_and_dram_bandwidth_vmax0p9;
0129 float fabric_and_dram_bandwidth_vnom0p8;
0130 float fabric_and_dram_bandwidth_vmid0p72;
0131 float fabric_and_dram_bandwidth_vmin0p65;
0132 float round_trip_ping_latency_cycles;
0133 float urgent_out_of_order_return_per_channel;
0134 float number_of_channels;
0135 float vmm_page_size;
0136 float return_bus_width;
0137 float rob_buffer_size_in_kbyte;
0138 float det_buffer_size_in_kbyte;
0139 float dpp_output_buffer_pixels;
0140 float opp_output_buffer_lines;
0141 float pixel_chunk_size_in_kbyte;
0142 float pte_chunk_size;
0143 float meta_chunk_size;
0144 float writeback_chunk_size;
0145 enum dcn_bw_defs odm_capability;
0146 enum dcn_bw_defs dsc_capability;
0147 float line_buffer_size;
0148 enum dcn_bw_defs is_line_buffer_bpp_fixed;
0149 float line_buffer_fixed_bpp;
0150 float max_line_buffer_lines;
0151 float writeback_luma_buffer_size;
0152 float writeback_chroma_buffer_size;
0153 float max_num_dpp;
0154 float max_num_writeback;
0155 float max_dchub_topscl_throughput;
0156 float max_pscl_tolb_throughput;
0157 float max_lb_tovscl_throughput;
0158 float max_vscl_tohscl_throughput;
0159 float max_hscl_ratio;
0160 float max_vscl_ratio;
0161 float max_hscl_taps;
0162 float max_vscl_taps;
0163 float under_scan_factor;
0164 float phyclkv_max0p9;
0165 float phyclkv_nom0p8;
0166 float phyclkv_mid0p72;
0167 float phyclkv_min0p65;
0168 float pte_buffer_size_in_requests;
0169 float dispclk_ramping_margin;
0170 float downspreading;
0171 float max_inter_dcn_tile_repeaters;
0172 enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
0173 enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed;
0174 int mode;
0175 float viewport_width[number_of_planes_minus_one + 1];
0176 float htotal[number_of_planes_minus_one + 1];
0177 float vtotal[number_of_planes_minus_one + 1];
0178 float v_sync_plus_back_porch[number_of_planes_minus_one + 1];
0179 float vactive[number_of_planes_minus_one + 1];
0180 float pixel_clock[number_of_planes_minus_one + 1];
0181 float viewport_height[number_of_planes_minus_one + 1];
0182 enum dcn_bw_defs dcc_enable[number_of_planes_minus_one + 1];
0183 float dcc_rate[number_of_planes_minus_one + 1];
0184 enum dcn_bw_defs source_scan[number_of_planes_minus_one + 1];
0185 float lb_bit_per_pixel[number_of_planes_minus_one + 1];
0186 enum dcn_bw_defs source_pixel_format[number_of_planes_minus_one + 1];
0187 enum dcn_bw_defs source_surface_mode[number_of_planes_minus_one + 1];
0188 enum dcn_bw_defs output_format[number_of_planes_minus_one + 1];
0189 enum dcn_bw_defs output_deep_color[number_of_planes_minus_one + 1];
0190 enum dcn_bw_defs output[number_of_planes_minus_one + 1];
0191 float scaler_rec_out_width[number_of_planes_minus_one + 1];
0192 float scaler_recout_height[number_of_planes_minus_one + 1];
0193 float underscan_output[number_of_planes_minus_one + 1];
0194 float interlace_output[number_of_planes_minus_one + 1];
0195 float override_hta_ps[number_of_planes_minus_one + 1];
0196 float override_vta_ps[number_of_planes_minus_one + 1];
0197 float override_hta_pschroma[number_of_planes_minus_one + 1];
0198 float override_vta_pschroma[number_of_planes_minus_one + 1];
0199 float urgent_latency_support_us[number_of_planes_minus_one + 1];
0200 float h_ratio[number_of_planes_minus_one + 1];
0201 float v_ratio[number_of_planes_minus_one + 1];
0202 float htaps[number_of_planes_minus_one + 1];
0203 float vtaps[number_of_planes_minus_one + 1];
0204 float hta_pschroma[number_of_planes_minus_one + 1];
0205 float vta_pschroma[number_of_planes_minus_one + 1];
0206 enum dcn_bw_defs pte_enable;
0207 enum dcn_bw_defs synchronized_vblank;
0208 enum dcn_bw_defs ta_pscalculation;
0209 int voltage_override_level;
0210 int number_of_active_planes;
0211 int voltage_level;
0212 enum dcn_bw_defs immediate_flip_supported;
0213 float dcfclk;
0214 float max_phyclk;
0215 float fabric_and_dram_bandwidth;
0216 float dpp_per_plane_per_ratio[1 + 1][number_of_planes_minus_one + 1];
0217 enum dcn_bw_defs dispclk_dppclk_support_per_ratio[1 + 1];
0218 float required_dispclk_per_ratio[1 + 1];
0219 enum dcn_bw_defs error_message[1 + 1];
0220 int dispclk_dppclk_ratio;
0221 float dpp_per_plane[number_of_planes_minus_one + 1];
0222 float det_buffer_size_y[number_of_planes_minus_one + 1];
0223 float det_buffer_size_c[number_of_planes_minus_one + 1];
0224 float swath_height_y[number_of_planes_minus_one + 1];
0225 float swath_height_c[number_of_planes_minus_one + 1];
0226 enum dcn_bw_defs final_error_message;
0227 float frequency;
0228 float header_line;
0229 float header;
0230 enum dcn_bw_defs voltage_override;
0231 enum dcn_bw_defs allow_different_hratio_vratio;
0232 float acceptable_quality_hta_ps;
0233 float acceptable_quality_vta_ps;
0234 float no_of_dpp[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0235 float swath_width_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0236 float swath_height_yper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0237 float swath_height_cper_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0238 float urgent_latency_support_us_per_state[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0239 float v_ratio_pre_ywith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0240 float v_ratio_pre_cwith_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0241 float required_prefetch_pixel_data_bw_with_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0242 float v_ratio_pre_ywithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0243 float v_ratio_pre_cwithout_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0244 float required_prefetch_pixel_data_bw_without_immediate_flip[number_of_states_plus_one + 1][1 + 1][number_of_planes_minus_one + 1];
0245 enum dcn_bw_defs prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
0246 enum dcn_bw_defs prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
0247 enum dcn_bw_defs v_ratio_in_prefetch_supported_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
0248 enum dcn_bw_defs v_ratio_in_prefetch_supported_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
0249 float required_dispclk[number_of_states_plus_one + 1][1 + 1];
0250 enum dcn_bw_defs dispclk_dppclk_support[number_of_states_plus_one + 1][1 + 1];
0251 enum dcn_bw_defs total_available_pipes_support[number_of_states_plus_one + 1][1 + 1];
0252 float total_number_of_active_dpp[number_of_states_plus_one + 1][1 + 1];
0253 float total_number_of_dcc_active_dpp[number_of_states_plus_one + 1][1 + 1];
0254 enum dcn_bw_defs urgent_latency_support[number_of_states_plus_one + 1][1 + 1];
0255 enum dcn_bw_defs mode_support_with_immediate_flip[number_of_states_plus_one + 1][1 + 1];
0256 enum dcn_bw_defs mode_support_without_immediate_flip[number_of_states_plus_one + 1][1 + 1];
0257 float return_bw_per_state[number_of_states_plus_one + 1];
0258 enum dcn_bw_defs dio_support[number_of_states_plus_one + 1];
0259 float urgent_round_trip_and_out_of_order_latency_per_state[number_of_states_plus_one + 1];
0260 enum dcn_bw_defs rob_support[number_of_states_plus_one + 1];
0261 enum dcn_bw_defs bandwidth_support[number_of_states_plus_one + 1];
0262 float prefetch_bw[number_of_planes_minus_one + 1];
0263 float meta_pte_bytes_per_frame[number_of_planes_minus_one + 1];
0264 float meta_row_bytes[number_of_planes_minus_one + 1];
0265 float dpte_bytes_per_row[number_of_planes_minus_one + 1];
0266 float prefetch_lines_y[number_of_planes_minus_one + 1];
0267 float prefetch_lines_c[number_of_planes_minus_one + 1];
0268 float max_num_sw_y[number_of_planes_minus_one + 1];
0269 float max_num_sw_c[number_of_planes_minus_one + 1];
0270 float line_times_for_prefetch[number_of_planes_minus_one + 1];
0271 float lines_for_meta_pte_with_immediate_flip[number_of_planes_minus_one + 1];
0272 float lines_for_meta_pte_without_immediate_flip[number_of_planes_minus_one + 1];
0273 float lines_for_meta_and_dpte_row_with_immediate_flip[number_of_planes_minus_one + 1];
0274 float lines_for_meta_and_dpte_row_without_immediate_flip[number_of_planes_minus_one + 1];
0275 float min_dppclk_using_single_dpp[number_of_planes_minus_one + 1];
0276 float swath_width_ysingle_dpp[number_of_planes_minus_one + 1];
0277 float byte_per_pixel_in_dety[number_of_planes_minus_one + 1];
0278 float byte_per_pixel_in_detc[number_of_planes_minus_one + 1];
0279 float number_of_dpp_required_for_det_and_lb_size[number_of_planes_minus_one + 1];
0280 float required_phyclk[number_of_planes_minus_one + 1];
0281 float read256_block_height_y[number_of_planes_minus_one + 1];
0282 float read256_block_width_y[number_of_planes_minus_one + 1];
0283 float read256_block_height_c[number_of_planes_minus_one + 1];
0284 float read256_block_width_c[number_of_planes_minus_one + 1];
0285 float max_swath_height_y[number_of_planes_minus_one + 1];
0286 float max_swath_height_c[number_of_planes_minus_one + 1];
0287 float min_swath_height_y[number_of_planes_minus_one + 1];
0288 float min_swath_height_c[number_of_planes_minus_one + 1];
0289 float read_bandwidth[number_of_planes_minus_one + 1];
0290 float write_bandwidth[number_of_planes_minus_one + 1];
0291 float pscl_factor[number_of_planes_minus_one + 1];
0292 float pscl_factor_chroma[number_of_planes_minus_one + 1];
0293 enum dcn_bw_defs scale_ratio_support;
0294 enum dcn_bw_defs source_format_pixel_and_scan_support;
0295 float total_read_bandwidth_consumed_gbyte_per_second;
0296 float total_write_bandwidth_consumed_gbyte_per_second;
0297 float total_bandwidth_consumed_gbyte_per_second;
0298 enum dcn_bw_defs dcc_enabled_in_any_plane;
0299 float return_bw_todcn_per_state;
0300 float critical_point;
0301 enum dcn_bw_defs writeback_latency_support;
0302 float required_output_bw;
0303 float total_number_of_active_writeback;
0304 enum dcn_bw_defs total_available_writeback_support;
0305 float maximum_swath_width;
0306 float number_of_dpp_required_for_det_size;
0307 float number_of_dpp_required_for_lb_size;
0308 float min_dispclk_using_single_dpp;
0309 float min_dispclk_using_dual_dpp;
0310 enum dcn_bw_defs viewport_size_support;
0311 float swath_width_granularity_y;
0312 float rounded_up_max_swath_size_bytes_y;
0313 float swath_width_granularity_c;
0314 float rounded_up_max_swath_size_bytes_c;
0315 float lines_in_det_luma;
0316 float lines_in_det_chroma;
0317 float effective_lb_latency_hiding_source_lines_luma;
0318 float effective_lb_latency_hiding_source_lines_chroma;
0319 float effective_detlb_lines_luma;
0320 float effective_detlb_lines_chroma;
0321 float projected_dcfclk_deep_sleep;
0322 float meta_req_height_y;
0323 float meta_req_width_y;
0324 float meta_surface_width_y;
0325 float meta_surface_height_y;
0326 float meta_pte_bytes_per_frame_y;
0327 float meta_row_bytes_y;
0328 float macro_tile_block_size_bytes_y;
0329 float macro_tile_block_height_y;
0330 float data_pte_req_height_y;
0331 float data_pte_req_width_y;
0332 float dpte_bytes_per_row_y;
0333 float meta_req_height_c;
0334 float meta_req_width_c;
0335 float meta_surface_width_c;
0336 float meta_surface_height_c;
0337 float meta_pte_bytes_per_frame_c;
0338 float meta_row_bytes_c;
0339 float macro_tile_block_size_bytes_c;
0340 float macro_tile_block_height_c;
0341 float macro_tile_block_width_c;
0342 float data_pte_req_height_c;
0343 float data_pte_req_width_c;
0344 float dpte_bytes_per_row_c;
0345 float v_init_y;
0346 float max_partial_sw_y;
0347 float v_init_c;
0348 float max_partial_sw_c;
0349 float dst_x_after_scaler;
0350 float dst_y_after_scaler;
0351 float time_calc;
0352 float v_update_offset[number_of_planes_minus_one + 1][2];
0353 float total_repeater_delay;
0354 float v_update_width[number_of_planes_minus_one + 1][2];
0355 float v_ready_offset[number_of_planes_minus_one + 1][2];
0356 float time_setup;
0357 float extra_latency;
0358 float maximum_vstartup;
0359 float bw_available_for_immediate_flip;
0360 float total_immediate_flip_bytes[number_of_planes_minus_one + 1];
0361 float time_for_meta_pte_with_immediate_flip;
0362 float time_for_meta_pte_without_immediate_flip;
0363 float time_for_meta_and_dpte_row_with_immediate_flip;
0364 float time_for_meta_and_dpte_row_without_immediate_flip;
0365 float line_times_to_request_prefetch_pixel_data_with_immediate_flip;
0366 float line_times_to_request_prefetch_pixel_data_without_immediate_flip;
0367 float maximum_read_bandwidth_with_prefetch_with_immediate_flip;
0368 float maximum_read_bandwidth_with_prefetch_without_immediate_flip;
0369 float voltage_level_with_immediate_flip;
0370 float voltage_level_without_immediate_flip;
0371 float total_number_of_active_dpp_per_ratio[1 + 1];
0372 float byte_per_pix_dety;
0373 float byte_per_pix_detc;
0374 float read256_bytes_block_height_y;
0375 float read256_bytes_block_width_y;
0376 float read256_bytes_block_height_c;
0377 float read256_bytes_block_width_c;
0378 float maximum_swath_height_y;
0379 float maximum_swath_height_c;
0380 float minimum_swath_height_y;
0381 float minimum_swath_height_c;
0382 float swath_width;
0383 float prefetch_bandwidth[number_of_planes_minus_one + 1];
0384 float v_init_pre_fill_y[number_of_planes_minus_one + 1];
0385 float v_init_pre_fill_c[number_of_planes_minus_one + 1];
0386 float max_num_swath_y[number_of_planes_minus_one + 1];
0387 float max_num_swath_c[number_of_planes_minus_one + 1];
0388 float prefill_y[number_of_planes_minus_one + 1];
0389 float prefill_c[number_of_planes_minus_one + 1];
0390 float v_startup[number_of_planes_minus_one + 1];
0391 enum dcn_bw_defs allow_dram_clock_change_during_vblank[number_of_planes_minus_one + 1];
0392 float allow_dram_self_refresh_during_vblank[number_of_planes_minus_one + 1];
0393 float v_ratio_prefetch_y[number_of_planes_minus_one + 1];
0394 float v_ratio_prefetch_c[number_of_planes_minus_one + 1];
0395 float destination_lines_for_prefetch[number_of_planes_minus_one + 1];
0396 float destination_lines_to_request_vm_inv_blank[number_of_planes_minus_one + 1];
0397 float destination_lines_to_request_row_in_vblank[number_of_planes_minus_one + 1];
0398 float min_ttuv_blank[number_of_planes_minus_one + 1];
0399 float byte_per_pixel_dety[number_of_planes_minus_one + 1];
0400 float byte_per_pixel_detc[number_of_planes_minus_one + 1];
0401 float swath_width_y[number_of_planes_minus_one + 1];
0402 float lines_in_dety[number_of_planes_minus_one + 1];
0403 float lines_in_dety_rounded_down_to_swath[number_of_planes_minus_one + 1];
0404 float lines_in_detc[number_of_planes_minus_one + 1];
0405 float lines_in_detc_rounded_down_to_swath[number_of_planes_minus_one + 1];
0406 float full_det_buffering_time_y[number_of_planes_minus_one + 1];
0407 float full_det_buffering_time_c[number_of_planes_minus_one + 1];
0408 float active_dram_clock_change_latency_margin[number_of_planes_minus_one + 1];
0409 float v_blank_dram_clock_change_latency_margin[number_of_planes_minus_one + 1];
0410 float dcfclk_deep_sleep_per_plane[number_of_planes_minus_one + 1];
0411 float read_bandwidth_plane_luma[number_of_planes_minus_one + 1];
0412 float read_bandwidth_plane_chroma[number_of_planes_minus_one + 1];
0413 float display_pipe_line_delivery_time_luma[number_of_planes_minus_one + 1];
0414 float display_pipe_line_delivery_time_chroma[number_of_planes_minus_one + 1];
0415 float display_pipe_line_delivery_time_luma_prefetch[number_of_planes_minus_one + 1];
0416 float display_pipe_line_delivery_time_chroma_prefetch[number_of_planes_minus_one + 1];
0417 float pixel_pte_bytes_per_row[number_of_planes_minus_one + 1];
0418 float meta_pte_bytes_frame[number_of_planes_minus_one + 1];
0419 float meta_row_byte[number_of_planes_minus_one + 1];
0420 float prefetch_source_lines_y[number_of_planes_minus_one + 1];
0421 float prefetch_source_lines_c[number_of_planes_minus_one + 1];
0422 float pscl_throughput[number_of_planes_minus_one + 1];
0423 float pscl_throughput_chroma[number_of_planes_minus_one + 1];
0424 float output_bpphdmi[number_of_planes_minus_one + 1];
0425 float output_bppdp4_lane_hbr[number_of_planes_minus_one + 1];
0426 float output_bppdp4_lane_hbr2[number_of_planes_minus_one + 1];
0427 float output_bppdp4_lane_hbr3[number_of_planes_minus_one + 1];
0428 float max_vstartup_lines[number_of_planes_minus_one + 1];
0429 float dispclk_with_ramping;
0430 float dispclk_without_ramping;
0431 float dppclk_using_single_dpp_luma;
0432 float dppclk_using_single_dpp;
0433 float dppclk_using_single_dpp_chroma;
0434 enum dcn_bw_defs odm_capable;
0435 float dispclk;
0436 float dppclk;
0437 float return_bandwidth_to_dcn;
0438 enum dcn_bw_defs dcc_enabled_any_plane;
0439 float return_bw;
0440 float critical_compression;
0441 float total_data_read_bandwidth;
0442 float total_active_dpp;
0443 float total_dcc_active_dpp;
0444 float urgent_round_trip_and_out_of_order_latency;
0445 float last_pixel_of_line_extra_watermark;
0446 float data_fabric_line_delivery_time_luma;
0447 float data_fabric_line_delivery_time_chroma;
0448 float urgent_extra_latency;
0449 float urgent_watermark;
0450 float ptemeta_urgent_watermark;
0451 float dram_clock_change_watermark;
0452 float total_active_writeback;
0453 float writeback_dram_clock_change_watermark;
0454 float min_full_det_buffering_time;
0455 float frame_time_for_min_full_det_buffering_time;
0456 float average_read_bandwidth_gbyte_per_second;
0457 float part_of_burst_that_fits_in_rob;
0458 float stutter_burst_time;
0459 float stutter_efficiency_not_including_vblank;
0460 float smallest_vblank;
0461 float v_blank_time;
0462 float stutter_efficiency;
0463 float dcf_clk_deep_sleep;
0464 float stutter_exit_watermark;
0465 float stutter_enter_plus_exit_watermark;
0466 float effective_det_plus_lb_lines_luma;
0467 float urgent_latency_support_us_luma;
0468 float effective_det_plus_lb_lines_chroma;
0469 float urgent_latency_support_us_chroma;
0470 float min_urgent_latency_support_us;
0471 float non_urgent_latency_tolerance;
0472 float block_height256_bytes_y;
0473 float block_height256_bytes_c;
0474 float meta_request_width_y;
0475 float meta_surf_width_y;
0476 float meta_surf_height_y;
0477 float meta_pte_bytes_frame_y;
0478 float meta_row_byte_y;
0479 float macro_tile_size_byte_y;
0480 float macro_tile_height_y;
0481 float pixel_pte_req_height_y;
0482 float pixel_pte_req_width_y;
0483 float pixel_pte_bytes_per_row_y;
0484 float meta_request_width_c;
0485 float meta_surf_width_c;
0486 float meta_surf_height_c;
0487 float meta_pte_bytes_frame_c;
0488 float meta_row_byte_c;
0489 float macro_tile_size_bytes_c;
0490 float macro_tile_height_c;
0491 float pixel_pte_req_height_c;
0492 float pixel_pte_req_width_c;
0493 float pixel_pte_bytes_per_row_c;
0494 float max_partial_swath_y;
0495 float max_partial_swath_c;
0496 float t_calc;
0497 float next_prefetch_mode;
0498 float v_startup_lines;
0499 enum dcn_bw_defs planes_with_room_to_increase_vstartup_prefetch_bw_less_than_active_bw;
0500 enum dcn_bw_defs planes_with_room_to_increase_vstartup_vratio_prefetch_more_than4;
0501 enum dcn_bw_defs planes_with_room_to_increase_vstartup_destination_line_times_for_prefetch_less_than2;
0502 enum dcn_bw_defs v_ratio_prefetch_more_than4;
0503 enum dcn_bw_defs destination_line_times_for_prefetch_less_than2;
0504 float prefetch_mode;
0505 float dstx_after_scaler;
0506 float dsty_after_scaler;
0507 float v_update_offset_pix[number_of_planes_minus_one + 1];
0508 float total_repeater_delay_time;
0509 float v_update_width_pix[number_of_planes_minus_one + 1];
0510 float v_ready_offset_pix[number_of_planes_minus_one + 1];
0511 float t_setup;
0512 float t_wait;
0513 float bandwidth_available_for_immediate_flip;
0514 float tot_immediate_flip_bytes;
0515 float max_rd_bandwidth;
0516 float time_for_fetching_meta_pte;
0517 float time_for_fetching_row_in_vblank;
0518 float lines_to_request_prefetch_pixel_data;
0519 float required_prefetch_pix_data_bw;
0520 enum dcn_bw_defs prefetch_mode_supported;
0521 float active_dp_ps;
0522 float lb_latency_hiding_source_lines_y;
0523 float lb_latency_hiding_source_lines_c;
0524 float effective_lb_latency_hiding_y;
0525 float effective_lb_latency_hiding_c;
0526 float dpp_output_buffer_lines_y;
0527 float dpp_output_buffer_lines_c;
0528 float dppopp_buffering_y;
0529 float max_det_buffering_time_y;
0530 float active_dram_clock_change_latency_margin_y;
0531 float dppopp_buffering_c;
0532 float max_det_buffering_time_c;
0533 float active_dram_clock_change_latency_margin_c;
0534 float writeback_dram_clock_change_latency_margin;
0535 float min_active_dram_clock_change_margin;
0536 float v_blank_of_min_active_dram_clock_change_margin;
0537 float second_min_active_dram_clock_change_margin;
0538 float min_vblank_dram_clock_change_margin;
0539 float dram_clock_change_margin;
0540 float dram_clock_change_support;
0541 float wr_bandwidth;
0542 float max_used_bw;
0543 };
0544
0545 struct dcn_soc_bounding_box {
0546 float sr_exit_time;
0547 float sr_enter_plus_exit_time;
0548 float urgent_latency;
0549 float write_back_latency;
0550 float percent_of_ideal_drambw_received_after_urg_latency;
0551 int max_request_size;
0552 float dcfclkv_max0p9;
0553 float dcfclkv_nom0p8;
0554 float dcfclkv_mid0p72;
0555 float dcfclkv_min0p65;
0556 float max_dispclk_vmax0p9;
0557 float max_dispclk_vmid0p72;
0558 float max_dispclk_vnom0p8;
0559 float max_dispclk_vmin0p65;
0560 float max_dppclk_vmax0p9;
0561 float max_dppclk_vnom0p8;
0562 float max_dppclk_vmid0p72;
0563 float max_dppclk_vmin0p65;
0564 float socclk;
0565 float fabric_and_dram_bandwidth_vmax0p9;
0566 float fabric_and_dram_bandwidth_vnom0p8;
0567 float fabric_and_dram_bandwidth_vmid0p72;
0568 float fabric_and_dram_bandwidth_vmin0p65;
0569 float phyclkv_max0p9;
0570 float phyclkv_nom0p8;
0571 float phyclkv_mid0p72;
0572 float phyclkv_min0p65;
0573 float downspreading;
0574 int round_trip_ping_latency_cycles;
0575 int urgent_out_of_order_return_per_channel;
0576 int number_of_channels;
0577 int vmm_page_size;
0578 float dram_clock_change_latency;
0579 int return_bus_width;
0580 float percent_disp_bw_limit;
0581 };
0582 extern const struct dcn_soc_bounding_box dcn10_soc_defaults;
0583
0584 struct dcn_ip_params {
0585 float rob_buffer_size_in_kbyte;
0586 float det_buffer_size_in_kbyte;
0587 float dpp_output_buffer_pixels;
0588 float opp_output_buffer_lines;
0589 float pixel_chunk_size_in_kbyte;
0590 enum dcn_bw_defs pte_enable;
0591 int pte_chunk_size;
0592 int meta_chunk_size;
0593 int writeback_chunk_size;
0594 enum dcn_bw_defs odm_capability;
0595 enum dcn_bw_defs dsc_capability;
0596 int line_buffer_size;
0597 int max_line_buffer_lines;
0598 enum dcn_bw_defs is_line_buffer_bpp_fixed;
0599 int line_buffer_fixed_bpp;
0600 int writeback_luma_buffer_size;
0601 int writeback_chroma_buffer_size;
0602 int max_num_dpp;
0603 int max_num_writeback;
0604 int max_dchub_topscl_throughput;
0605 int max_pscl_tolb_throughput;
0606 int max_lb_tovscl_throughput;
0607 int max_vscl_tohscl_throughput;
0608 float max_hscl_ratio;
0609 float max_vscl_ratio;
0610 int max_hscl_taps;
0611 int max_vscl_taps;
0612 int pte_buffer_size_in_requests;
0613 float dispclk_ramping_margin;
0614 float under_scan_factor;
0615 int max_inter_dcn_tile_repeaters;
0616 enum dcn_bw_defs can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
0617 enum dcn_bw_defs bug_forcing_luma_and_chroma_request_to_same_size_fixed;
0618 int dcfclk_cstate_latency;
0619 };
0620 extern const struct dcn_ip_params dcn10_ip_defaults;
0621
0622 bool dcn_validate_bandwidth(
0623 struct dc *dc,
0624 struct dc_state *context,
0625 bool fast_validate);
0626
0627 unsigned int dcn_find_dcfclk_suits_all(
0628 const struct dc *dc,
0629 struct dc_clocks *clocks);
0630
0631 void dcn_bw_update_from_pplib(struct dc *dc);
0632 void dcn_bw_notify_pplib_of_wm_ranges(struct dc *dc);
0633 void dcn_bw_sync_calcs_and_dml(struct dc *dc);
0634
0635 enum source_macro_tile_size swizzle_mode_to_macro_tile_size(enum swizzle_mode_values sw_mode);
0636
0637 #endif
0638