xref: /openbsd-src/sys/dev/pci/drm/amd/display/dc/inc/dcn_calcs.h (revision 1bb76ff151c0aba8e3312a604e4cd2e5195cf4b7)
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