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