1 /*
2  * Copyright 2017 Advanced Micro Devices, Inc.
3  *
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:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
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.
21  *
22  * Authors: AMD
23  *
24  */
25 
26 
27 #ifndef __DML2_DISPLAY_MODE_VBA_H__
28 #define __DML2_DISPLAY_MODE_VBA_H__
29 
30 struct display_mode_lib;
31 
32 void ModeSupportAndSystemConfiguration(struct display_mode_lib *mode_lib);
33 
34 #define dml_get_attr_decl(attr) double get_##attr(struct display_mode_lib *mode_lib, const display_e2e_pipe_params_st *pipes, unsigned int num_pipes)
35 
36 dml_get_attr_decl(clk_dcf_deepsleep);
37 dml_get_attr_decl(wm_urgent);
38 dml_get_attr_decl(wm_memory_trip);
39 dml_get_attr_decl(wm_writeback_urgent);
40 dml_get_attr_decl(wm_stutter_exit);
41 dml_get_attr_decl(wm_stutter_enter_exit);
42 dml_get_attr_decl(wm_z8_stutter_exit);
43 dml_get_attr_decl(wm_z8_stutter_enter_exit);
44 dml_get_attr_decl(stutter_efficiency_z8);
45 dml_get_attr_decl(stutter_num_bursts_z8);
46 dml_get_attr_decl(wm_dram_clock_change);
47 dml_get_attr_decl(wm_writeback_dram_clock_change);
48 dml_get_attr_decl(stutter_efficiency_no_vblank);
49 dml_get_attr_decl(stutter_efficiency);
50 dml_get_attr_decl(stutter_period);
51 dml_get_attr_decl(urgent_latency);
52 dml_get_attr_decl(urgent_extra_latency);
53 dml_get_attr_decl(nonurgent_latency);
54 dml_get_attr_decl(dram_clock_change_latency);
55 dml_get_attr_decl(dispclk_calculated);
56 dml_get_attr_decl(total_data_read_bw);
57 dml_get_attr_decl(return_bw);
58 dml_get_attr_decl(tcalc);
59 dml_get_attr_decl(fraction_of_urgent_bandwidth);
60 dml_get_attr_decl(fraction_of_urgent_bandwidth_imm_flip);
61 dml_get_attr_decl(cstate_max_cap_mode);
62 dml_get_attr_decl(comp_buffer_size_kbytes);
63 dml_get_attr_decl(pixel_chunk_size_in_kbyte);
64 dml_get_attr_decl(alpha_pixel_chunk_size_in_kbyte);
65 dml_get_attr_decl(meta_chunk_size_in_kbyte);
66 dml_get_attr_decl(min_pixel_chunk_size_in_byte);
67 dml_get_attr_decl(min_meta_chunk_size_in_byte);
68 dml_get_attr_decl(fclk_watermark);
69 dml_get_attr_decl(usr_retraining_watermark);
70 dml_get_attr_decl(comp_buffer_reserved_space_kbytes);
71 dml_get_attr_decl(comp_buffer_reserved_space_64bytes);
72 dml_get_attr_decl(comp_buffer_reserved_space_zs);
73 dml_get_attr_decl(unbounded_request_enabled);
74 
75 #define dml_get_pipe_attr_decl(attr) double get_##attr(struct display_mode_lib *mode_lib, const display_e2e_pipe_params_st *pipes, unsigned int num_pipes, unsigned int which_pipe)
76 
77 dml_get_pipe_attr_decl(dsc_delay);
78 dml_get_pipe_attr_decl(dppclk_calculated);
79 dml_get_pipe_attr_decl(dscclk_calculated);
80 dml_get_pipe_attr_decl(min_ttu_vblank);
81 dml_get_pipe_attr_decl(min_ttu_vblank_in_us);
82 dml_get_pipe_attr_decl(vratio_prefetch_l);
83 dml_get_pipe_attr_decl(vratio_prefetch_c);
84 dml_get_pipe_attr_decl(dst_x_after_scaler);
85 dml_get_pipe_attr_decl(dst_y_after_scaler);
86 dml_get_pipe_attr_decl(dst_y_per_vm_vblank);
87 dml_get_pipe_attr_decl(dst_y_per_row_vblank);
88 dml_get_pipe_attr_decl(dst_y_prefetch);
89 dml_get_pipe_attr_decl(dst_y_per_vm_flip);
90 dml_get_pipe_attr_decl(dst_y_per_row_flip);
91 dml_get_pipe_attr_decl(dst_y_per_pte_row_nom_l);
92 dml_get_pipe_attr_decl(dst_y_per_pte_row_nom_c);
93 dml_get_pipe_attr_decl(dst_y_per_meta_row_nom_l);
94 dml_get_pipe_attr_decl(dst_y_per_meta_row_nom_c);
95 dml_get_pipe_attr_decl(dpte_row_height_linear_c);
96 dml_get_pipe_attr_decl(swath_height_l);
97 dml_get_pipe_attr_decl(swath_height_c);
98 dml_get_pipe_attr_decl(det_stored_buffer_size_l_bytes);
99 dml_get_pipe_attr_decl(det_stored_buffer_size_c_bytes);
100 dml_get_pipe_attr_decl(dpte_group_size_in_bytes);
101 dml_get_pipe_attr_decl(vm_group_size_in_bytes);
102 dml_get_pipe_attr_decl(det_buffer_size_kbytes);
103 dml_get_pipe_attr_decl(dpte_row_height_linear_l);
104 dml_get_pipe_attr_decl(refcyc_per_pte_group_nom_l_in_us);
105 dml_get_pipe_attr_decl(refcyc_per_pte_group_nom_c_in_us);
106 dml_get_pipe_attr_decl(refcyc_per_pte_group_vblank_l_in_us);
107 dml_get_pipe_attr_decl(refcyc_per_pte_group_vblank_c_in_us);
108 dml_get_pipe_attr_decl(refcyc_per_pte_group_flip_l_in_us);
109 dml_get_pipe_attr_decl(refcyc_per_pte_group_flip_c_in_us);
110 dml_get_pipe_attr_decl(pte_buffer_mode);
111 dml_get_pipe_attr_decl(refcyc_per_vm_group_vblank);
112 dml_get_pipe_attr_decl(refcyc_per_vm_group_flip);
113 dml_get_pipe_attr_decl(refcyc_per_vm_req_vblank);
114 dml_get_pipe_attr_decl(refcyc_per_vm_req_flip);
115 dml_get_pipe_attr_decl(refcyc_per_vm_group_vblank_in_us);
116 dml_get_pipe_attr_decl(refcyc_per_vm_group_flip_in_us);
117 dml_get_pipe_attr_decl(refcyc_per_vm_req_vblank_in_us);
118 dml_get_pipe_attr_decl(refcyc_per_vm_req_flip_in_us);
119 dml_get_pipe_attr_decl(refcyc_per_vm_dmdata_in_us);
120 dml_get_pipe_attr_decl(dmdata_dl_delta_in_us);
121 dml_get_pipe_attr_decl(refcyc_per_line_delivery_l_in_us);
122 dml_get_pipe_attr_decl(refcyc_per_line_delivery_c_in_us);
123 dml_get_pipe_attr_decl(refcyc_per_line_delivery_pre_l_in_us);
124 dml_get_pipe_attr_decl(refcyc_per_line_delivery_pre_c_in_us);
125 dml_get_pipe_attr_decl(refcyc_per_req_delivery_l_in_us);
126 dml_get_pipe_attr_decl(refcyc_per_req_delivery_c_in_us);
127 dml_get_pipe_attr_decl(refcyc_per_req_delivery_pre_l_in_us);
128 dml_get_pipe_attr_decl(refcyc_per_req_delivery_pre_c_in_us);
129 dml_get_pipe_attr_decl(refcyc_per_cursor_req_delivery_in_us);
130 dml_get_pipe_attr_decl(refcyc_per_cursor_req_delivery_pre_in_us);
131 dml_get_pipe_attr_decl(refcyc_per_meta_chunk_nom_l_in_us);
132 dml_get_pipe_attr_decl(refcyc_per_meta_chunk_nom_c_in_us);
133 dml_get_pipe_attr_decl(refcyc_per_meta_chunk_vblank_l_in_us);
134 dml_get_pipe_attr_decl(refcyc_per_meta_chunk_vblank_c_in_us);
135 dml_get_pipe_attr_decl(refcyc_per_meta_chunk_flip_l_in_us);
136 dml_get_pipe_attr_decl(refcyc_per_meta_chunk_flip_c_in_us);
137 
138 dml_get_pipe_attr_decl(vstartup);
139 dml_get_pipe_attr_decl(vupdate_offset);
140 dml_get_pipe_attr_decl(vupdate_width);
141 dml_get_pipe_attr_decl(vready_offset);
142 dml_get_pipe_attr_decl(vready_at_or_after_vsync);
143 dml_get_pipe_attr_decl(min_dst_y_next_start);
144 dml_get_pipe_attr_decl(vstartup_calculated);
145 dml_get_pipe_attr_decl(subviewport_lines_needed_in_mall);
146 dml_get_pipe_attr_decl(surface_size_in_mall);
147 
148 double get_total_immediate_flip_bytes(
149 		struct display_mode_lib *mode_lib,
150 		const display_e2e_pipe_params_st *pipes,
151 		unsigned int num_pipes);
152 double get_total_immediate_flip_bw(
153 		struct display_mode_lib *mode_lib,
154 		const display_e2e_pipe_params_st *pipes,
155 		unsigned int num_pipes);
156 double get_total_prefetch_bw(
157 		struct display_mode_lib *mode_lib,
158 		const display_e2e_pipe_params_st *pipes,
159 		unsigned int num_pipes);
160 unsigned int dml_get_voltage_level(
161 		struct display_mode_lib *mode_lib,
162 		const display_e2e_pipe_params_st *pipes,
163 		unsigned int num_pipes);
164 
165 unsigned int get_total_surface_size_in_mall_bytes(
166 		struct display_mode_lib *mode_lib,
167 		const display_e2e_pipe_params_st *pipes,
168 		unsigned int num_pipes);
169 
170 bool get_is_phantom_pipe(struct display_mode_lib *mode_lib,
171 		const display_e2e_pipe_params_st *pipes,
172 		unsigned int num_pipes,
173 		unsigned int pipe_idx);
174 void PixelClockAdjustmentForProgressiveToInterlaceUnit(struct display_mode_lib *mode_lib);
175 
176 void Calculate256BBlockSizes(
177 		enum source_format_class SourcePixelFormat,
178 		enum dm_swizzle_mode SurfaceTiling,
179 		unsigned int BytePerPixelY,
180 		unsigned int BytePerPixelC,
181 		unsigned int *BlockHeight256BytesY,
182 		unsigned int *BlockHeight256BytesC,
183 		unsigned int *BlockWidth256BytesY,
184 		unsigned int *BlockWidth256BytesC);
185 
186 struct DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation {
187 	unsigned int dummy_integer_array[2][DC__NUM_DPP__MAX];
188 	double dummy_single_array[2][DC__NUM_DPP__MAX];
189 	unsigned int dummy_long_array[2][DC__NUM_DPP__MAX];
190 	double dummy_double_array[2][DC__NUM_DPP__MAX];
191 	bool dummy_boolean_array[DC__NUM_DPP__MAX];
192 	bool dummy_boolean;
193 	bool dummy_boolean2;
194 	enum output_encoder_class dummy_output_encoder_array[DC__NUM_DPP__MAX];
195 	DmlPipe SurfaceParameters[DC__NUM_DPP__MAX];
196 	bool dummy_boolean_array2[2][DC__NUM_DPP__MAX];
197 	unsigned int ReorderBytes;
198 	unsigned int VMDataOnlyReturnBW;
199 	double HostVMInefficiencyFactor;
200 	DmlPipe myPipe;
201 	SOCParametersList mmSOCParameters;
202 	double dummy_unit_vector[DC__NUM_DPP__MAX];
203 	double dummy_single[2];
204 	enum clock_change_support dummy_dramchange_support;
205 	enum dm_fclock_change_support dummy_fclkchange_support;
206 	bool dummy_USRRetrainingSupport;
207 };
208 
209 struct dml32_ModeSupportAndSystemConfigurationFull {
210 	unsigned int dummy_integer_array[22][DC__NUM_DPP__MAX];
211 	double dummy_double_array[2][DC__NUM_DPP__MAX];
212 	DmlPipe SurfParameters[DC__NUM_DPP__MAX];
213 	double dummy_single[5];
214 	double dummy_single2[5];
215 	SOCParametersList mSOCParameters;
216 	unsigned int MaximumSwathWidthSupportLuma;
217 	unsigned int MaximumSwathWidthSupportChroma;
218 	double DSTYAfterScaler[DC__NUM_DPP__MAX];
219 	double DSTXAfterScaler[DC__NUM_DPP__MAX];
220 	double MaxTotalVActiveRDBandwidth;
221 	bool dummy_boolean_array[2][DC__NUM_DPP__MAX];
222 	enum odm_combine_mode dummy_odm_mode[DC__NUM_DPP__MAX];
223 	DmlPipe myPipe;
224 	unsigned int dummy_integer[4];
225 	unsigned int TotalNumberOfActiveOTG;
226 	unsigned int TotalNumberOfActiveHDMIFRL;
227 	unsigned int TotalNumberOfActiveDP2p0;
228 	unsigned int TotalNumberOfActiveDP2p0Outputs;
229 	unsigned int TotalDSCUnitsRequired;
230 	unsigned int ReorderingBytes;
231 	unsigned int TotalSlots;
232 	unsigned int NumberOfDPPDSC;
233 	unsigned int NumberOfDPPNoDSC;
234 	unsigned int NextPrefetchModeState;
235 	bool MPCCombineMethodAsNeededForPStateChangeAndVoltage;
236 	bool MPCCombineMethodAsPossible;
237 	bool FullFrameMALLPStateMethod;
238 	bool SubViewportMALLPStateMethod;
239 	bool PhantomPipeMALLPStateMethod;
240 	bool NoChroma;
241 	bool TotalAvailablePipesSupportNoDSC;
242 	bool TotalAvailablePipesSupportDSC;
243 	enum odm_combine_mode ODMModeNoDSC;
244 	enum odm_combine_mode ODMModeDSC;
245 	double RequiredDISPCLKPerSurfaceNoDSC;
246 	double RequiredDISPCLKPerSurfaceDSC;
247 	double BWOfNonCombinedSurfaceOfMaximumBandwidth;
248 	double VMDataOnlyReturnBWPerState;
249 	double HostVMInefficiencyFactor;
250 	bool dummy_boolean[2];
251 };
252 
253 struct dummy_vars {
254 	struct DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation
255 	DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation;
256 	struct dml32_ModeSupportAndSystemConfigurationFull dml32_ModeSupportAndSystemConfigurationFull;
257 };
258 
259 struct vba_vars_st {
260 	ip_params_st ip;
261 	soc_bounding_box_st soc;
262 
263 	int maxMpcComb;
264 	bool UseMaximumVStartup;
265 
266 	double MaxVRatioPre;
267 	double WritebackDISPCLK;
268 	double DPPCLKUsingSingleDPPLuma;
269 	double DPPCLKUsingSingleDPPChroma;
270 	double DISPCLKWithRamping;
271 	double DISPCLKWithoutRamping;
272 	double GlobalDPPCLK;
273 	double DISPCLKWithRampingRoundedToDFSGranularity;
274 	double DISPCLKWithoutRampingRoundedToDFSGranularity;
275 	double MaxDispclkRoundedToDFSGranularity;
276 	bool DCCEnabledAnyPlane;
277 	double ReturnBandwidthToDCN;
278 	unsigned int TotalActiveDPP;
279 	unsigned int TotalDCCActiveDPP;
280 	double UrgentRoundTripAndOutOfOrderLatency;
281 	double StutterPeriod;
282 	double FrameTimeForMinFullDETBufferingTime;
283 	double AverageReadBandwidth;
284 	double TotalRowReadBandwidth;
285 	double PartOfBurstThatFitsInROB;
286 	double StutterBurstTime;
287 	unsigned int NextPrefetchMode;
288 	double NextMaxVStartup;
289 	double VBlankTime;
290 	double SmallestVBlank;
291 	enum dm_prefetch_modes AllowForPStateChangeOrStutterInVBlankFinal; // Mode Support only
292 	double DCFCLKDeepSleepPerPlane[DC__NUM_DPP__MAX];
293 	double EffectiveDETPlusLBLinesLuma;
294 	double EffectiveDETPlusLBLinesChroma;
295 	double UrgentLatencySupportUsLuma;
296 	double UrgentLatencySupportUsChroma;
297 	unsigned int DSCFormatFactor;
298 
299 	bool DummyPStateCheck;
300 	bool DRAMClockChangeSupportsVActive;
301 	bool PrefetchModeSupported;
302 	bool PrefetchAndImmediateFlipSupported;
303 	enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank; // Mode Support only
304 	double XFCRemoteSurfaceFlipDelay;
305 	double TInitXFill;
306 	double TslvChk;
307 	double SrcActiveDrainRate;
308 	bool ImmediateFlipSupported;
309 	enum mpc_combine_affinity WhenToDoMPCCombine; // Mode Support only
310 
311 	bool PrefetchERROR;
312 
313 	unsigned int VStartupLines;
314 	unsigned int ActiveDPPs;
315 	unsigned int LBLatencyHidingSourceLinesY;
316 	unsigned int LBLatencyHidingSourceLinesC;
317 	double ActiveDRAMClockChangeLatencyMarginPerState[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];// DML doesn't save active margin per state
318 	double ActiveDRAMClockChangeLatencyMargin[DC__NUM_DPP__MAX];
319 	double CachedActiveDRAMClockChangeLatencyMargin[DC__NUM_DPP__MAX]; // Cache in dml_get_voltage_level for debug purposes only
320 	double MinActiveDRAMClockChangeMargin;
321 	double InitFillLevel;
322 	double FinalFillMargin;
323 	double FinalFillLevel;
324 	double RemainingFillLevel;
325 	double TFinalxFill;
326 
327 	//
328 	// SOC Bounding Box Parameters
329 	//
330 	double SRExitTime;
331 	double SREnterPlusExitTime;
332 	double UrgentLatencyPixelDataOnly;
333 	double UrgentLatencyPixelMixedWithVMData;
334 	double UrgentLatencyVMDataOnly;
335 	double UrgentLatency; // max of the above three
336 	double USRRetrainingLatency;
337 	double SMNLatency;
338 	double FCLKChangeLatency;
339 	unsigned int MALLAllocatedForDCNFinal;
340 	double MaxAveragePercentOfIdealFabricBWDisplayCanUseInNormalSystemOperation;
341 	double MaxAveragePercentOfIdealDRAMBWDisplayCanUseInNormalSystemOperationSTROBE;
342 	double PercentOfIdealDRAMBWReceivedAfterUrgLatencySTROBE;
343 	double WritebackLatency;
344 	double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly; // Mode Support
345 	double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData; // Mode Support
346 	double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly; // Mode Support
347 	double MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation; // Mode Support
348 	double MaxAveragePercentOfIdealDRAMBWDisplayCanUseInNormalSystemOperation; // Mode Support
349 	double NumberOfChannels;
350 	double DRAMChannelWidth;
351 	double FabricDatapathToDCNDataReturn;
352 	double ReturnBusWidth;
353 	double Downspreading;
354 	double DISPCLKDPPCLKDSCCLKDownSpreading;
355 	double DISPCLKDPPCLKVCOSpeed;
356 	double RoundTripPingLatencyCycles;
357 	double UrgentOutOfOrderReturnPerChannel;
358 	double UrgentOutOfOrderReturnPerChannelPixelDataOnly;
359 	double UrgentOutOfOrderReturnPerChannelPixelMixedWithVMData;
360 	double UrgentOutOfOrderReturnPerChannelVMDataOnly;
361 	unsigned int VMMPageSize;
362 	double DRAMClockChangeLatency;
363 	double XFCBusTransportTime;
364 	bool UseUrgentBurstBandwidth;
365 	double XFCXBUFLatencyTolerance;
366 
367 	//
368 	// IP Parameters
369 	//
370 	unsigned int ROBBufferSizeInKByte;
371 	unsigned int DETBufferSizeInKByte[DC__NUM_DPP__MAX];
372 	double DETBufferSizeInTime;
373 	unsigned int DPPOutputBufferPixels;
374 	unsigned int OPPOutputBufferLines;
375 	unsigned int PixelChunkSizeInKByte;
376 	double ReturnBW;
377 	bool GPUVMEnable;
378 	bool HostVMEnable;
379 	unsigned int GPUVMMaxPageTableLevels;
380 	unsigned int HostVMMaxPageTableLevels;
381 	unsigned int HostVMCachedPageTableLevels;
382 	unsigned int OverrideGPUVMPageTableLevels;
383 	unsigned int OverrideHostVMPageTableLevels;
384 	unsigned int MetaChunkSize;
385 	unsigned int MinMetaChunkSizeBytes;
386 	unsigned int WritebackChunkSize;
387 	bool ODMCapability;
388 	unsigned int NumberOfDSC;
389 	unsigned int LineBufferSize;
390 	unsigned int MaxLineBufferLines;
391 	unsigned int WritebackInterfaceLumaBufferSize;
392 	unsigned int WritebackInterfaceChromaBufferSize;
393 	unsigned int WritebackChromaLineBufferWidth;
394 	enum writeback_config WritebackConfiguration;
395 	double MaxDCHUBToPSCLThroughput;
396 	double MaxPSCLToLBThroughput;
397 	unsigned int PTEBufferSizeInRequestsLuma;
398 	unsigned int PTEBufferSizeInRequestsChroma;
399 	double DISPCLKRampingMargin;
400 	unsigned int MaxInterDCNTileRepeaters;
401 	bool XFCSupported;
402 	double XFCSlvChunkSize;
403 	double XFCFillBWOverhead;
404 	double XFCFillConstant;
405 	double XFCTSlvVupdateOffset;
406 	double XFCTSlvVupdateWidth;
407 	double XFCTSlvVreadyOffset;
408 	double DPPCLKDelaySubtotal;
409 	double DPPCLKDelaySCL;
410 	double DPPCLKDelaySCLLBOnly;
411 	double DPPCLKDelayCNVCFormater;
412 	double DPPCLKDelayCNVCCursor;
413 	double DISPCLKDelaySubtotal;
414 	bool ProgressiveToInterlaceUnitInOPP;
415 	unsigned int CompressedBufferSegmentSizeInkByteFinal;
416 	unsigned int CompbufReservedSpace64B;
417 	unsigned int CompbufReservedSpaceZs;
418 	unsigned int LineBufferSizeFinal;
419 	unsigned int MaximumPixelsPerLinePerDSCUnit;
420 	unsigned int AlphaPixelChunkSizeInKByte;
421 	double MinPixelChunkSizeBytes;
422 	unsigned int DCCMetaBufferSizeBytes;
423 	// Pipe/Plane Parameters
424 
425 	/** @VoltageLevel:
426 	 * Every ASIC has a fixed number of DPM states, and some devices might
427 	 * have some particular voltage configuration that does not map
428 	 * directly to the DPM states. This field tells how many states the
429 	 * target device supports; even though this field combines the DPM and
430 	 * special SOC voltages, it mostly matches the total number of DPM
431 	 * states.
432 	 */
433 	int VoltageLevel;
434 	double FabricClock;
435 	double DRAMSpeed;
436 	double DISPCLK;
437 	double SOCCLK;
438 	double DCFCLK;
439 	unsigned int MaxTotalDETInKByte;
440 	unsigned int MinCompressedBufferSizeInKByte;
441 	unsigned int NumberOfActiveSurfaces;
442 	bool ViewportStationary[DC__NUM_DPP__MAX];
443 	unsigned int RefreshRate[DC__NUM_DPP__MAX];
444 	double       OutputBPP[DC__NUM_DPP__MAX];
445 	unsigned int GPUVMMinPageSizeKBytes[DC__NUM_DPP__MAX];
446 	bool SynchronizeTimingsFinal;
447 	bool SynchronizeDRRDisplaysForUCLKPStateChangeFinal;
448 	bool ForceOneRowForFrame[DC__NUM_DPP__MAX];
449 	unsigned int ViewportXStartY[DC__NUM_DPP__MAX];
450 	unsigned int ViewportXStartC[DC__NUM_DPP__MAX];
451 	enum dm_rotation_angle SourceRotation[DC__NUM_DPP__MAX];
452 	bool DRRDisplay[DC__NUM_DPP__MAX];
453 	bool PteBufferMode[DC__NUM_DPP__MAX];
454 	enum dm_output_type OutputType[DC__NUM_DPP__MAX];
455 	enum dm_output_rate OutputRate[DC__NUM_DPP__MAX];
456 
457 	unsigned int NumberOfActivePlanes;
458 	unsigned int NumberOfDSCSlices[DC__NUM_DPP__MAX];
459 	unsigned int ViewportWidth[DC__NUM_DPP__MAX];
460 	unsigned int ViewportHeight[DC__NUM_DPP__MAX];
461 	unsigned int ViewportYStartY[DC__NUM_DPP__MAX];
462 	unsigned int ViewportYStartC[DC__NUM_DPP__MAX];
463 	unsigned int PitchY[DC__NUM_DPP__MAX];
464 	unsigned int PitchC[DC__NUM_DPP__MAX];
465 	double HRatio[DC__NUM_DPP__MAX];
466 	double VRatio[DC__NUM_DPP__MAX];
467 	unsigned int htaps[DC__NUM_DPP__MAX];
468 	unsigned int vtaps[DC__NUM_DPP__MAX];
469 	unsigned int HTAPsChroma[DC__NUM_DPP__MAX];
470 	unsigned int VTAPsChroma[DC__NUM_DPP__MAX];
471 	unsigned int HTotal[DC__NUM_DPP__MAX];
472 	unsigned int VTotal[DC__NUM_DPP__MAX];
473 	unsigned int VTotal_Max[DC__NUM_DPP__MAX];
474 	unsigned int VTotal_Min[DC__NUM_DPP__MAX];
475 	int DPPPerPlane[DC__NUM_DPP__MAX];
476 	double PixelClock[DC__NUM_DPP__MAX];
477 	double PixelClockBackEnd[DC__NUM_DPP__MAX];
478 	bool DCCEnable[DC__NUM_DPP__MAX];
479 	bool FECEnable[DC__NUM_DPP__MAX];
480 	unsigned int DCCMetaPitchY[DC__NUM_DPP__MAX];
481 	unsigned int DCCMetaPitchC[DC__NUM_DPP__MAX];
482 	enum scan_direction_class SourceScan[DC__NUM_DPP__MAX];
483 	enum source_format_class SourcePixelFormat[DC__NUM_DPP__MAX];
484 	bool WritebackEnable[DC__NUM_DPP__MAX];
485 	unsigned int ActiveWritebacksPerPlane[DC__NUM_DPP__MAX];
486 	double WritebackDestinationWidth[DC__NUM_DPP__MAX];
487 	double WritebackDestinationHeight[DC__NUM_DPP__MAX];
488 	double WritebackSourceHeight[DC__NUM_DPP__MAX];
489 	enum source_format_class WritebackPixelFormat[DC__NUM_DPP__MAX];
490 	unsigned int WritebackLumaHTaps[DC__NUM_DPP__MAX];
491 	unsigned int WritebackLumaVTaps[DC__NUM_DPP__MAX];
492 	unsigned int WritebackChromaHTaps[DC__NUM_DPP__MAX];
493 	unsigned int WritebackChromaVTaps[DC__NUM_DPP__MAX];
494 	double WritebackHRatio[DC__NUM_DPP__MAX];
495 	double WritebackVRatio[DC__NUM_DPP__MAX];
496 	unsigned int HActive[DC__NUM_DPP__MAX];
497 	unsigned int VActive[DC__NUM_DPP__MAX];
498 	bool Interlace[DC__NUM_DPP__MAX];
499 	enum dm_swizzle_mode SurfaceTiling[DC__NUM_DPP__MAX];
500 	unsigned int ScalerRecoutWidth[DC__NUM_DPP__MAX];
501 	bool DynamicMetadataEnable[DC__NUM_DPP__MAX];
502 	int DynamicMetadataLinesBeforeActiveRequired[DC__NUM_DPP__MAX];
503 	unsigned int DynamicMetadataTransmittedBytes[DC__NUM_DPP__MAX];
504 	double DCCRate[DC__NUM_DPP__MAX];
505 	double AverageDCCCompressionRate;
506 	enum odm_combine_mode ODMCombineEnabled[DC__NUM_DPP__MAX];
507 	double OutputBpp[DC__NUM_DPP__MAX];
508 	bool DSCEnabled[DC__NUM_DPP__MAX];
509 	unsigned int DSCInputBitPerComponent[DC__NUM_DPP__MAX];
510 	enum output_format_class OutputFormat[DC__NUM_DPP__MAX];
511 	enum output_encoder_class Output[DC__NUM_DPP__MAX];
512 	bool skip_dio_check[DC__NUM_DPP__MAX];
513 	unsigned int BlendingAndTiming[DC__NUM_DPP__MAX];
514 	bool SynchronizedVBlank;
515 	unsigned int NumberOfCursors[DC__NUM_DPP__MAX];
516 	unsigned int CursorWidth[DC__NUM_DPP__MAX][DC__NUM_CURSOR__MAX];
517 	unsigned int CursorBPP[DC__NUM_DPP__MAX][DC__NUM_CURSOR__MAX];
518 	bool XFCEnabled[DC__NUM_DPP__MAX];
519 	bool ScalerEnabled[DC__NUM_DPP__MAX];
520 	unsigned int VBlankNom[DC__NUM_DPP__MAX];
521 	bool DisableUnboundRequestIfCompBufReservedSpaceNeedAdjustment;
522 
523 	// Intermediates/Informational
524 	bool ImmediateFlipSupport;
525 	unsigned int DETBufferSizeY[DC__NUM_DPP__MAX];
526 	unsigned int DETBufferSizeC[DC__NUM_DPP__MAX];
527 	unsigned int SwathHeightY[DC__NUM_DPP__MAX];
528 	unsigned int SwathHeightC[DC__NUM_DPP__MAX];
529 	unsigned int LBBitPerPixel[DC__NUM_DPP__MAX];
530 	double LastPixelOfLineExtraWatermark;
531 	double TotalDataReadBandwidth;
532 	unsigned int TotalActiveWriteback;
533 	unsigned int EffectiveLBLatencyHidingSourceLinesLuma;
534 	unsigned int EffectiveLBLatencyHidingSourceLinesChroma;
535 	double BandwidthAvailableForImmediateFlip;
536 	unsigned int PrefetchMode[DC__VOLTAGE_STATES][2];
537 	unsigned int PrefetchModePerState[DC__VOLTAGE_STATES][2];
538 	unsigned int MinPrefetchMode;
539 	unsigned int MaxPrefetchMode;
540 	bool AnyLinesForVMOrRowTooLarge;
541 	double MaxVStartup;
542 	bool IgnoreViewportPositioning;
543 	bool ErrorResult[DC__NUM_DPP__MAX];
544 	//
545 	// Calculated dml_ml->vba.Outputs
546 	//
547 	double DCFCLKDeepSleep;
548 	double UrgentWatermark;
549 	double UrgentExtraLatency;
550 	double WritebackUrgentWatermark;
551 	double StutterExitWatermark;
552 	double StutterEnterPlusExitWatermark;
553 	double DRAMClockChangeWatermark;
554 	double WritebackDRAMClockChangeWatermark;
555 	double StutterEfficiency;
556 	double StutterEfficiencyNotIncludingVBlank;
557 	double NonUrgentLatencyTolerance;
558 	double MinActiveDRAMClockChangeLatencySupported;
559 	double Z8StutterEfficiencyBestCase;
560 	unsigned int Z8NumberOfStutterBurstsPerFrameBestCase;
561 	double Z8StutterEfficiencyNotIncludingVBlankBestCase;
562 	double StutterPeriodBestCase;
563 	Watermarks      Watermark;
564 	bool DCHUBBUB_ARB_CSTATE_MAX_CAP_MODE;
565 	unsigned int CompBufReservedSpaceKBytes;
566 	unsigned int CompBufReservedSpace64B;
567 	unsigned int CompBufReservedSpaceZs;
568 	bool CompBufReservedSpaceNeedAdjustment;
569 
570 	// These are the clocks calcuated by the library but they are not actually
571 	// used explicitly. They are fetched by tests and then possibly used. The
572 	// ultimate values to use are the ones specified by the parameters to DML
573 	double DISPCLK_calculated;
574 	double DPPCLK_calculated[DC__NUM_DPP__MAX];
575 
576 	bool ImmediateFlipSupportedSurface[DC__NUM_DPP__MAX];
577 
578 	bool Use_One_Row_For_Frame[DC__NUM_DPP__MAX];
579 	bool Use_One_Row_For_Frame_Flip[DC__NUM_DPP__MAX];
580 	unsigned int VUpdateOffsetPix[DC__NUM_DPP__MAX];
581 	double VUpdateWidthPix[DC__NUM_DPP__MAX];
582 	double VReadyOffsetPix[DC__NUM_DPP__MAX];
583 
584 	unsigned int TotImmediateFlipBytes;
585 	double TCalc;
586 
587 	display_e2e_pipe_params_st cache_pipes[DC__NUM_DPP__MAX];
588 	unsigned int cache_num_pipes;
589 	unsigned int pipe_plane[DC__NUM_DPP__MAX];
590 
591 	/* vba mode support */
592 	/*inputs*/
593 	bool SupportGFX7CompatibleTilingIn32bppAnd64bpp;
594 	double MaxHSCLRatio;
595 	double MaxVSCLRatio;
596 	unsigned int MaxNumWriteback;
597 	bool WritebackLumaAndChromaScalingSupported;
598 	bool Cursor64BppSupport;
599 	double DCFCLKPerState[DC__VOLTAGE_STATES];
600 	double DCFCLKState[DC__VOLTAGE_STATES][2];
601 	double FabricClockPerState[DC__VOLTAGE_STATES];
602 	double SOCCLKPerState[DC__VOLTAGE_STATES];
603 	double PHYCLKPerState[DC__VOLTAGE_STATES];
604 	double DTBCLKPerState[DC__VOLTAGE_STATES];
605 	double MaxDppclk[DC__VOLTAGE_STATES];
606 	double MaxDSCCLK[DC__VOLTAGE_STATES];
607 	double DRAMSpeedPerState[DC__VOLTAGE_STATES];
608 	double MaxDispclk[DC__VOLTAGE_STATES];
609 	int VoltageOverrideLevel;
610 	double PHYCLKD32PerState[DC__VOLTAGE_STATES];
611 
612 	/*outputs*/
613 	bool ScaleRatioAndTapsSupport;
614 	bool SourceFormatPixelAndScanSupport;
615 	double TotalBandwidthConsumedGBytePerSecond;
616 	bool DCCEnabledInAnyPlane;
617 	bool WritebackLatencySupport;
618 	bool WritebackModeSupport;
619 	bool Writeback10bpc420Supported;
620 	bool BandwidthSupport[DC__VOLTAGE_STATES];
621 	unsigned int TotalNumberOfActiveWriteback;
622 	double CriticalPoint;
623 	double ReturnBWToDCNPerState;
624 	bool IsErrorResult[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
625 	bool prefetch_vm_bw_valid;
626 	bool prefetch_row_bw_valid;
627 	bool NumberOfOTGSupport;
628 	bool NonsupportedDSCInputBPC;
629 	bool WritebackScaleRatioAndTapsSupport;
630 	bool CursorSupport;
631 	bool PitchSupport;
632 	enum dm_validation_status ValidationStatus[DC__VOLTAGE_STATES];
633 
634 	/* Mode Support Reason */
635 	bool P2IWith420;
636 	bool DSCOnlyIfNecessaryWithBPP;
637 	bool DSC422NativeNotSupported;
638 	bool LinkRateDoesNotMatchDPVersion;
639 	bool LinkRateForMultistreamNotIndicated;
640 	bool BPPForMultistreamNotIndicated;
641 	bool MultistreamWithHDMIOreDP;
642 	bool MSOOrODMSplitWithNonDPLink;
643 	bool NotEnoughLanesForMSO;
644 	bool ViewportExceedsSurface;
645 
646 	bool ImmediateFlipRequiredButTheRequirementForEachSurfaceIsNotSpecified;
647 	bool ImmediateFlipOrHostVMAndPStateWithMALLFullFrameOrPhantomPipe;
648 	bool InvalidCombinationOfMALLUseForPStateAndStaticScreen;
649 	bool InvalidCombinationOfMALLUseForPState;
650 
651 	enum dm_output_link_dp_rate OutputLinkDPRate[DC__NUM_DPP__MAX];
652 	double PrefetchLinesYThisState[DC__NUM_DPP__MAX];
653 	double PrefetchLinesCThisState[DC__NUM_DPP__MAX];
654 	double meta_row_bandwidth_this_state[DC__NUM_DPP__MAX];
655 	double dpte_row_bandwidth_this_state[DC__NUM_DPP__MAX];
656 	double DPTEBytesPerRowThisState[DC__NUM_DPP__MAX];
657 	double PDEAndMetaPTEBytesPerFrameThisState[DC__NUM_DPP__MAX];
658 	double MetaRowBytesThisState[DC__NUM_DPP__MAX];
659 	bool use_one_row_for_frame[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
660 	bool use_one_row_for_frame_flip[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
661 	bool use_one_row_for_frame_this_state[DC__NUM_DPP__MAX];
662 	bool use_one_row_for_frame_flip_this_state[DC__NUM_DPP__MAX];
663 
664 	unsigned int OutputTypeAndRatePerState[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
665 	double RequiredDISPCLKPerSurface[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
666 	unsigned int MacroTileHeightY[DC__NUM_DPP__MAX];
667 	unsigned int MacroTileHeightC[DC__NUM_DPP__MAX];
668 	unsigned int MacroTileWidthY[DC__NUM_DPP__MAX];
669 	unsigned int MacroTileWidthC[DC__NUM_DPP__MAX];
670 	bool ImmediateFlipRequiredFinal;
671 	bool DCCProgrammingAssumesScanDirectionUnknownFinal;
672 	bool EnoughWritebackUnits;
673 	bool ODMCombine2To1SupportCheckOK[DC__VOLTAGE_STATES];
674 	bool NumberOfDP2p0Support;
675 	unsigned int MaxNumDP2p0Streams;
676 	unsigned int MaxNumDP2p0Outputs;
677 	enum dm_output_type OutputTypePerState[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
678 	enum dm_output_rate OutputRatePerState[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
679 	double WritebackLineBufferLumaBufferSize;
680 	double WritebackLineBufferChromaBufferSize;
681 	double WritebackMinHSCLRatio;
682 	double WritebackMinVSCLRatio;
683 	double WritebackMaxHSCLRatio;
684 	double WritebackMaxVSCLRatio;
685 	double WritebackMaxHSCLTaps;
686 	double WritebackMaxVSCLTaps;
687 	unsigned int MaxNumDPP;
688 	unsigned int MaxNumOTG;
689 	double CursorBufferSize;
690 	double CursorChunkSize;
691 	unsigned int Mode;
692 	double OutputLinkDPLanes[DC__NUM_DPP__MAX];
693 	double ForcedOutputLinkBPP[DC__NUM_DPP__MAX]; // Mode Support only
694 	double ImmediateFlipBW[DC__NUM_DPP__MAX];
695 	double MaxMaxVStartup[DC__VOLTAGE_STATES][2];
696 
697 	double WritebackLumaVExtra;
698 	double WritebackChromaVExtra;
699 	double WritebackRequiredDISPCLK;
700 	double MaximumSwathWidthSupport;
701 	double MaximumSwathWidthInDETBuffer;
702 	double MaximumSwathWidthInLineBuffer;
703 	double MaxDispclkRoundedDownToDFSGranularity;
704 	double MaxDppclkRoundedDownToDFSGranularity;
705 	double PlaneRequiredDISPCLKWithoutODMCombine;
706 	double PlaneRequiredDISPCLKWithODMCombine;
707 	double PlaneRequiredDISPCLK;
708 	double TotalNumberOfActiveOTG;
709 	double FECOverhead;
710 	double EffectiveFECOverhead;
711 	double Outbpp;
712 	unsigned int OutbppDSC;
713 	double TotalDSCUnitsRequired;
714 	double bpp;
715 	unsigned int slices;
716 	double SwathWidthGranularityY;
717 	double RoundedUpMaxSwathSizeBytesY;
718 	double SwathWidthGranularityC;
719 	double RoundedUpMaxSwathSizeBytesC;
720 	double EffectiveDETLBLinesLuma;
721 	double EffectiveDETLBLinesChroma;
722 	double ProjectedDCFCLKDeepSleep[DC__VOLTAGE_STATES][2];
723 	double PDEAndMetaPTEBytesPerFrameY;
724 	double PDEAndMetaPTEBytesPerFrameC;
725 	unsigned int MetaRowBytesY;
726 	unsigned int MetaRowBytesC;
727 	unsigned int DPTEBytesPerRowC;
728 	unsigned int DPTEBytesPerRowY;
729 	double ExtraLatency;
730 	double TimeCalc;
731 	double TWait;
732 	double MaximumReadBandwidthWithPrefetch;
733 	double MaximumReadBandwidthWithoutPrefetch;
734 	double total_dcn_read_bw_with_flip;
735 	double total_dcn_read_bw_with_flip_no_urgent_burst;
736 	double FractionOfUrgentBandwidth;
737 	double FractionOfUrgentBandwidthImmediateFlip; // Mode Support debugging output
738 
739 	/* ms locals */
740 	double IdealSDPPortBandwidthPerState[DC__VOLTAGE_STATES][2];
741 	unsigned int NoOfDPP[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
742 	int NoOfDPPThisState[DC__NUM_DPP__MAX];
743 	enum odm_combine_mode ODMCombineEnablePerState[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
744 	double SwathWidthYThisState[DC__NUM_DPP__MAX];
745 	unsigned int SwathHeightCPerState[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
746 	unsigned int SwathHeightYThisState[DC__NUM_DPP__MAX];
747 	unsigned int SwathHeightCThisState[DC__NUM_DPP__MAX];
748 	double VRatioPreY[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
749 	double VRatioPreC[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
750 	double RequiredPrefetchPixelDataBWLuma[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
751 	double RequiredPrefetchPixelDataBWChroma[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
752 	double RequiredDPPCLK[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
753 	double RequiredDPPCLKThisState[DC__NUM_DPP__MAX];
754 	bool PTEBufferSizeNotExceededY[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
755 	bool PTEBufferSizeNotExceededC[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
756 	bool BandwidthWithoutPrefetchSupported[DC__VOLTAGE_STATES][2];
757 	bool PrefetchSupported[DC__VOLTAGE_STATES][2];
758 	bool VRatioInPrefetchSupported[DC__VOLTAGE_STATES][2];
759 	double RequiredDISPCLK[DC__VOLTAGE_STATES][2];
760 	bool DISPCLK_DPPCLK_Support[DC__VOLTAGE_STATES][2];
761 	bool TotalAvailablePipesSupport[DC__VOLTAGE_STATES][2];
762 	unsigned int TotalNumberOfActiveDPP[DC__VOLTAGE_STATES][2];
763 	unsigned int TotalNumberOfDCCActiveDPP[DC__VOLTAGE_STATES][2];
764 	bool ModeSupport[DC__VOLTAGE_STATES][2];
765 	double ReturnBWPerState[DC__VOLTAGE_STATES][2];
766 	bool DIOSupport[DC__VOLTAGE_STATES];
767 	bool NotEnoughDSCUnits[DC__VOLTAGE_STATES];
768 	bool DSCCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES];
769 	bool DTBCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES];
770 	double UrgentRoundTripAndOutOfOrderLatencyPerState[DC__VOLTAGE_STATES];
771 	bool ROBSupport[DC__VOLTAGE_STATES][2];
772 	//based on rev 99: Dim DCCMetaBufferSizeSupport(NumberOfStates, 1) As Boolean
773 	bool DCCMetaBufferSizeSupport[DC__VOLTAGE_STATES][2];
774 	bool PTEBufferSizeNotExceeded[DC__VOLTAGE_STATES][2];
775 	bool TotalVerticalActiveBandwidthSupport[DC__VOLTAGE_STATES][2];
776 	double MaxTotalVerticalActiveAvailableBandwidth[DC__VOLTAGE_STATES][2];
777 	double PrefetchBW[DC__NUM_DPP__MAX];
778 	double PDEAndMetaPTEBytesPerFrame[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
779 	double MetaRowBytes[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
780 	double DPTEBytesPerRow[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
781 	double PrefetchLinesY[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
782 	double PrefetchLinesC[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
783 	unsigned int MaxNumSwY[DC__NUM_DPP__MAX];
784 	unsigned int MaxNumSwC[DC__NUM_DPP__MAX];
785 	double PrefillY[DC__NUM_DPP__MAX];
786 	double PrefillC[DC__NUM_DPP__MAX];
787 	double LineTimesForPrefetch[DC__NUM_DPP__MAX];
788 	double LinesForMetaPTE[DC__NUM_DPP__MAX];
789 	double LinesForMetaAndDPTERow[DC__NUM_DPP__MAX];
790 	double MinDPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
791 	double SwathWidthYSingleDPP[DC__NUM_DPP__MAX];
792 	double BytePerPixelInDETY[DC__NUM_DPP__MAX];
793 	double BytePerPixelInDETC[DC__NUM_DPP__MAX];
794 	bool RequiresDSC[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
795 	unsigned int NumberOfDSCSlice[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
796 	double RequiresFEC[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
797 	double OutputBppPerState[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
798 	double DSCDelayPerState[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
799 	bool ViewportSizeSupport[DC__VOLTAGE_STATES][2];
800 	unsigned int Read256BlockHeightY[DC__NUM_DPP__MAX];
801 	unsigned int Read256BlockWidthY[DC__NUM_DPP__MAX];
802 	unsigned int Read256BlockHeightC[DC__NUM_DPP__MAX];
803 	unsigned int Read256BlockWidthC[DC__NUM_DPP__MAX];
804 	double MaxSwathHeightY[DC__NUM_DPP__MAX];
805 	double MaxSwathHeightC[DC__NUM_DPP__MAX];
806 	double MinSwathHeightY[DC__NUM_DPP__MAX];
807 	double MinSwathHeightC[DC__NUM_DPP__MAX];
808 	double ReadBandwidthLuma[DC__NUM_DPP__MAX];
809 	double ReadBandwidthChroma[DC__NUM_DPP__MAX];
810 	double ReadBandwidth[DC__NUM_DPP__MAX];
811 	double WriteBandwidth[DC__NUM_DPP__MAX];
812 	double PSCL_FACTOR[DC__NUM_DPP__MAX];
813 	double PSCL_FACTOR_CHROMA[DC__NUM_DPP__MAX];
814 	double MaximumVStartup[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
815 	double AlignedDCCMetaPitch[DC__NUM_DPP__MAX];
816 	double AlignedYPitch[DC__NUM_DPP__MAX];
817 	double AlignedCPitch[DC__NUM_DPP__MAX];
818 	double MaximumSwathWidth[DC__NUM_DPP__MAX];
819 	double cursor_bw[DC__NUM_DPP__MAX];
820 	double cursor_bw_pre[DC__NUM_DPP__MAX];
821 	double Tno_bw[DC__NUM_DPP__MAX];
822 	double prefetch_vmrow_bw[DC__NUM_DPP__MAX];
823 	double DestinationLinesToRequestVMInImmediateFlip[DC__NUM_DPP__MAX];
824 	double DestinationLinesToRequestRowInImmediateFlip[DC__NUM_DPP__MAX];
825 	double final_flip_bw[DC__NUM_DPP__MAX];
826 	bool ImmediateFlipSupportedForState[DC__VOLTAGE_STATES][2];
827 	double WritebackDelay[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
828 	unsigned int vm_group_bytes[DC__NUM_DPP__MAX];
829 	unsigned int dpte_group_bytes[DC__NUM_DPP__MAX];
830 	unsigned int dpte_row_height[DC__NUM_DPP__MAX];
831 	unsigned int meta_req_height[DC__NUM_DPP__MAX];
832 	unsigned int meta_req_width[DC__NUM_DPP__MAX];
833 	unsigned int meta_row_height[DC__NUM_DPP__MAX];
834 	unsigned int meta_row_width[DC__NUM_DPP__MAX];
835 	unsigned int dpte_row_height_chroma[DC__NUM_DPP__MAX];
836 	unsigned int meta_req_height_chroma[DC__NUM_DPP__MAX];
837 	unsigned int meta_req_width_chroma[DC__NUM_DPP__MAX];
838 	unsigned int meta_row_height_chroma[DC__NUM_DPP__MAX];
839 	unsigned int meta_row_width_chroma[DC__NUM_DPP__MAX];
840 	bool ImmediateFlipSupportedForPipe[DC__NUM_DPP__MAX];
841 	double meta_row_bw[DC__NUM_DPP__MAX];
842 	double dpte_row_bw[DC__NUM_DPP__MAX];
843 	double DisplayPipeLineDeliveryTimeLuma[DC__NUM_DPP__MAX];                     // WM
844 	double DisplayPipeLineDeliveryTimeChroma[DC__NUM_DPP__MAX];                     // WM
845 	double DisplayPipeRequestDeliveryTimeLuma[DC__NUM_DPP__MAX];
846 	double DisplayPipeRequestDeliveryTimeChroma[DC__NUM_DPP__MAX];
847 	enum clock_change_support DRAMClockChangeSupport[DC__VOLTAGE_STATES][2];
848 	double UrgentBurstFactorCursor[DC__NUM_DPP__MAX];
849 	double UrgentBurstFactorCursorPre[DC__NUM_DPP__MAX];
850 	double UrgentBurstFactorLuma[DC__NUM_DPP__MAX];
851 	double UrgentBurstFactorLumaPre[DC__NUM_DPP__MAX];
852 	double UrgentBurstFactorChroma[DC__NUM_DPP__MAX];
853 	double UrgentBurstFactorChromaPre[DC__NUM_DPP__MAX];
854 
855 
856 	bool           MPCCombine[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
857 	double         SwathWidthCSingleDPP[DC__NUM_DPP__MAX];
858 	double         MaximumSwathWidthInLineBufferLuma;
859 	double         MaximumSwathWidthInLineBufferChroma;
860 	double         MaximumSwathWidthLuma[DC__NUM_DPP__MAX];
861 	double         MaximumSwathWidthChroma[DC__NUM_DPP__MAX];
862 	enum odm_combine_mode odm_combine_dummy[DC__NUM_DPP__MAX];
863 	double         dummy1[DC__NUM_DPP__MAX];
864 	double         dummy2[DC__NUM_DPP__MAX];
865 	unsigned int   dummy3[DC__NUM_DPP__MAX];
866 	unsigned int   dummy4[DC__NUM_DPP__MAX];
867 	double         dummy5;
868 	double         dummy6;
869 	double         dummy7[DC__NUM_DPP__MAX];
870 	double         dummy8[DC__NUM_DPP__MAX];
871 	double         dummy13[DC__NUM_DPP__MAX];
872 	double         dummy_double_array[2][DC__NUM_DPP__MAX];
873 	unsigned int        dummyinteger3[DC__NUM_DPP__MAX];
874 	unsigned int        dummyinteger4[DC__NUM_DPP__MAX];
875 	unsigned int        dummyinteger5;
876 	unsigned int        dummyinteger6;
877 	unsigned int        dummyinteger7;
878 	unsigned int        dummyinteger8;
879 	unsigned int        dummyinteger9;
880 	unsigned int        dummyinteger10;
881 	unsigned int        dummyinteger11;
882 	unsigned int        dummy_integer_array[8][DC__NUM_DPP__MAX];
883 
884 	bool           dummysinglestring;
885 	bool           SingleDPPViewportSizeSupportPerPlane[DC__NUM_DPP__MAX];
886 	double         PlaneRequiredDISPCLKWithODMCombine2To1;
887 	double         PlaneRequiredDISPCLKWithODMCombine4To1;
888 	unsigned int   TotalNumberOfSingleDPPPlanes[DC__VOLTAGE_STATES][2];
889 	bool           LinkDSCEnable;
890 	bool           ODMCombine4To1SupportCheckOK[DC__VOLTAGE_STATES];
891 	enum odm_combine_mode ODMCombineEnableThisState[DC__NUM_DPP__MAX];
892 	double   SwathWidthCThisState[DC__NUM_DPP__MAX];
893 	bool           ViewportSizeSupportPerPlane[DC__NUM_DPP__MAX];
894 	double         AlignedDCCMetaPitchY[DC__NUM_DPP__MAX];
895 	double         AlignedDCCMetaPitchC[DC__NUM_DPP__MAX];
896 
897 	unsigned int NotEnoughUrgentLatencyHiding[DC__VOLTAGE_STATES][2];
898 	unsigned int NotEnoughUrgentLatencyHidingPre;
899 	int PTEBufferSizeInRequestsForLuma;
900 	int PTEBufferSizeInRequestsForChroma;
901 
902 	// Missing from VBA
903 	int dpte_group_bytes_chroma;
904 	unsigned int vm_group_bytes_chroma;
905 	double dst_x_after_scaler;
906 	double dst_y_after_scaler;
907 	unsigned int VStartupRequiredWhenNotEnoughTimeForDynamicMetadata;
908 
909 	/* perf locals*/
910 	double PrefetchBandwidth[DC__NUM_DPP__MAX];
911 	double VInitPreFillY[DC__NUM_DPP__MAX];
912 	double VInitPreFillC[DC__NUM_DPP__MAX];
913 	unsigned int MaxNumSwathY[DC__NUM_DPP__MAX];
914 	unsigned int MaxNumSwathC[DC__NUM_DPP__MAX];
915 	unsigned int VStartup[DC__NUM_DPP__MAX];
916 	double DSTYAfterScaler[DC__NUM_DPP__MAX];
917 	double DSTXAfterScaler[DC__NUM_DPP__MAX];
918 	bool AllowDRAMClockChangeDuringVBlank[DC__NUM_DPP__MAX];
919 	bool AllowDRAMSelfRefreshDuringVBlank[DC__NUM_DPP__MAX];
920 	double VRatioPrefetchY[DC__NUM_DPP__MAX];
921 	double VRatioPrefetchC[DC__NUM_DPP__MAX];
922 	double DestinationLinesForPrefetch[DC__NUM_DPP__MAX];
923 	double DestinationLinesToRequestVMInVBlank[DC__NUM_DPP__MAX];
924 	double DestinationLinesToRequestRowInVBlank[DC__NUM_DPP__MAX];
925 	double MinTTUVBlank[DC__NUM_DPP__MAX];
926 	double BytePerPixelDETY[DC__NUM_DPP__MAX];
927 	double BytePerPixelDETC[DC__NUM_DPP__MAX];
928 	double SwathWidthY[DC__NUM_DPP__MAX];
929 	double SwathWidthSingleDPPY[DC__NUM_DPP__MAX];
930 	double CursorRequestDeliveryTime[DC__NUM_DPP__MAX];
931 	double CursorRequestDeliveryTimePrefetch[DC__NUM_DPP__MAX];
932 	double ReadBandwidthPlaneLuma[DC__NUM_DPP__MAX];
933 	double ReadBandwidthPlaneChroma[DC__NUM_DPP__MAX];
934 	double DisplayPipeLineDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
935 	double DisplayPipeLineDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
936 	double DisplayPipeRequestDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
937 	double DisplayPipeRequestDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
938 	double PixelPTEBytesPerRow[DC__NUM_DPP__MAX];
939 	double PDEAndMetaPTEBytesFrame[DC__NUM_DPP__MAX];
940 	double MetaRowByte[DC__NUM_DPP__MAX];
941 	double PrefetchSourceLinesY[DC__NUM_DPP__MAX];
942 	double RequiredPrefetchPixDataBWLuma[DC__NUM_DPP__MAX];
943 	double RequiredPrefetchPixDataBWChroma[DC__NUM_DPP__MAX];
944 	double PrefetchSourceLinesC[DC__NUM_DPP__MAX];
945 	double PSCL_THROUGHPUT_LUMA[DC__NUM_DPP__MAX];
946 	double PSCL_THROUGHPUT_CHROMA[DC__NUM_DPP__MAX];
947 	double DSCCLK_calculated[DC__NUM_DPP__MAX];
948 	unsigned int DSCDelay[DC__NUM_DPP__MAX];
949 	unsigned int MaxVStartupLines[DC__NUM_DPP__MAX];
950 	double DPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
951 	double DPPCLK[DC__NUM_DPP__MAX];
952 	unsigned int DCCYMaxUncompressedBlock[DC__NUM_DPP__MAX];
953 	unsigned int DCCYMaxCompressedBlock[DC__NUM_DPP__MAX];
954 	unsigned int DCCYIndependent64ByteBlock[DC__NUM_DPP__MAX];
955 	double MaximumDCCCompressionYSurface[DC__NUM_DPP__MAX];
956 	unsigned int BlockHeight256BytesY[DC__NUM_DPP__MAX];
957 	unsigned int BlockHeight256BytesC[DC__NUM_DPP__MAX];
958 	unsigned int BlockWidth256BytesY[DC__NUM_DPP__MAX];
959 	unsigned int BlockWidth256BytesC[DC__NUM_DPP__MAX];
960 	double XFCSlaveVUpdateOffset[DC__NUM_DPP__MAX];
961 	double XFCSlaveVupdateWidth[DC__NUM_DPP__MAX];
962 	double XFCSlaveVReadyOffset[DC__NUM_DPP__MAX];
963 	double XFCTransferDelay[DC__NUM_DPP__MAX];
964 	double XFCPrechargeDelay[DC__NUM_DPP__MAX];
965 	double XFCRemoteSurfaceFlipLatency[DC__NUM_DPP__MAX];
966 	double XFCPrefetchMargin[DC__NUM_DPP__MAX];
967 	unsigned int dpte_row_width_luma_ub[DC__NUM_DPP__MAX];
968 	unsigned int dpte_row_width_chroma_ub[DC__NUM_DPP__MAX];
969 	double FullDETBufferingTimeY[DC__NUM_DPP__MAX];                     // WM
970 	double FullDETBufferingTimeC[DC__NUM_DPP__MAX];                     // WM
971 	double DST_Y_PER_PTE_ROW_NOM_L[DC__NUM_DPP__MAX];
972 	double DST_Y_PER_PTE_ROW_NOM_C[DC__NUM_DPP__MAX];
973 	double DST_Y_PER_META_ROW_NOM_L[DC__NUM_DPP__MAX];
974 	double TimePerMetaChunkNominal[DC__NUM_DPP__MAX];
975 	double TimePerMetaChunkVBlank[DC__NUM_DPP__MAX];
976 	double TimePerMetaChunkFlip[DC__NUM_DPP__MAX];
977 	unsigned int swath_width_luma_ub[DC__NUM_DPP__MAX];
978 	unsigned int swath_width_chroma_ub[DC__NUM_DPP__MAX];
979 	unsigned int PixelPTEReqWidthY[DC__NUM_DPP__MAX];
980 	unsigned int PixelPTEReqHeightY[DC__NUM_DPP__MAX];
981 	unsigned int PTERequestSizeY[DC__NUM_DPP__MAX];
982 	unsigned int PixelPTEReqWidthC[DC__NUM_DPP__MAX];
983 	unsigned int PixelPTEReqHeightC[DC__NUM_DPP__MAX];
984 	unsigned int PTERequestSizeC[DC__NUM_DPP__MAX];
985 	double time_per_pte_group_nom_luma[DC__NUM_DPP__MAX];
986 	double time_per_pte_group_nom_chroma[DC__NUM_DPP__MAX];
987 	double time_per_pte_group_vblank_luma[DC__NUM_DPP__MAX];
988 	double time_per_pte_group_vblank_chroma[DC__NUM_DPP__MAX];
989 	double time_per_pte_group_flip_luma[DC__NUM_DPP__MAX];
990 	double time_per_pte_group_flip_chroma[DC__NUM_DPP__MAX];
991 	double TimePerVMGroupVBlank[DC__NUM_DPP__MAX];
992 	double TimePerVMGroupFlip[DC__NUM_DPP__MAX];
993 	double TimePerVMRequestVBlank[DC__NUM_DPP__MAX];
994 	double TimePerVMRequestFlip[DC__NUM_DPP__MAX];
995 	unsigned int dpde0_bytes_per_frame_ub_l[DC__NUM_DPP__MAX];
996 	unsigned int meta_pte_bytes_per_frame_ub_l[DC__NUM_DPP__MAX];
997 	unsigned int dpde0_bytes_per_frame_ub_c[DC__NUM_DPP__MAX];
998 	unsigned int meta_pte_bytes_per_frame_ub_c[DC__NUM_DPP__MAX];
999 	double LinesToFinishSwathTransferStutterCriticalPlane;
1000 	unsigned int BytePerPixelYCriticalPlane;
1001 	double SwathWidthYCriticalPlane;
1002 	double LinesInDETY[DC__NUM_DPP__MAX];
1003 	double LinesInDETYRoundedDownToSwath[DC__NUM_DPP__MAX];
1004 
1005 	double SwathWidthSingleDPPC[DC__NUM_DPP__MAX];
1006 	double SwathWidthC[DC__NUM_DPP__MAX];
1007 	unsigned int BytePerPixelY[DC__NUM_DPP__MAX];
1008 	unsigned int BytePerPixelC[DC__NUM_DPP__MAX];
1009 	unsigned int dummyinteger1;
1010 	unsigned int dummyinteger2;
1011 	double FinalDRAMClockChangeLatency;
1012 	double Tdmdl_vm[DC__NUM_DPP__MAX];
1013 	double Tdmdl[DC__NUM_DPP__MAX];
1014 	double TSetup[DC__NUM_DPP__MAX];
1015 	unsigned int ThisVStartup;
1016 	bool WritebackAllowDRAMClockChangeEndPosition[DC__NUM_DPP__MAX];
1017 	double DST_Y_PER_META_ROW_NOM_C[DC__NUM_DPP__MAX];
1018 	double TimePerChromaMetaChunkNominal[DC__NUM_DPP__MAX];
1019 	double TimePerChromaMetaChunkVBlank[DC__NUM_DPP__MAX];
1020 	double TimePerChromaMetaChunkFlip[DC__NUM_DPP__MAX];
1021 	unsigned int DCCCMaxUncompressedBlock[DC__NUM_DPP__MAX];
1022 	unsigned int DCCCMaxCompressedBlock[DC__NUM_DPP__MAX];
1023 	double VStartupMargin;
1024 	bool NotEnoughTimeForDynamicMetadata[DC__NUM_DPP__MAX];
1025 
1026 	/* Missing from VBA */
1027 	unsigned int MaximumMaxVStartupLines;
1028 	double FabricAndDRAMBandwidth;
1029 	double LinesInDETLuma;
1030 	double LinesInDETChroma;
1031 	unsigned int ImmediateFlipBytes[DC__NUM_DPP__MAX];
1032 	unsigned int LinesInDETC[DC__NUM_DPP__MAX];
1033 	unsigned int LinesInDETCRoundedDownToSwath[DC__NUM_DPP__MAX];
1034 	double UrgentLatencySupportUsPerState[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1035 	double UrgentLatencySupportUs[DC__NUM_DPP__MAX];
1036 	double FabricAndDRAMBandwidthPerState[DC__VOLTAGE_STATES];
1037 	bool UrgentLatencySupport[DC__VOLTAGE_STATES][2];
1038 	unsigned int SwathWidthYPerState[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1039 	unsigned int SwathHeightYPerState[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1040 	double qual_row_bw[DC__NUM_DPP__MAX];
1041 	double prefetch_row_bw[DC__NUM_DPP__MAX];
1042 	double prefetch_vm_bw[DC__NUM_DPP__MAX];
1043 
1044 	double PTEGroupSize;
1045 	unsigned int PDEProcessingBufIn64KBReqs;
1046 
1047 	double MaxTotalVActiveRDBandwidth;
1048 	bool DoUrgentLatencyAdjustment;
1049 	double UrgentLatencyAdjustmentFabricClockComponent;
1050 	double UrgentLatencyAdjustmentFabricClockReference;
1051 	double MinUrgentLatencySupportUs;
1052 	double MinFullDETBufferingTime;
1053 	double AverageReadBandwidthGBytePerSecond;
1054 	bool   FirstMainPlane;
1055 	bool NotEnoughDETSwathFillLatencyHiding;
1056 
1057 	unsigned int ViewportWidthChroma[DC__NUM_DPP__MAX];
1058 	unsigned int ViewportHeightChroma[DC__NUM_DPP__MAX];
1059 	double HRatioChroma[DC__NUM_DPP__MAX];
1060 	double VRatioChroma[DC__NUM_DPP__MAX];
1061 	int WritebackSourceWidth[DC__NUM_DPP__MAX];
1062 
1063 	bool ModeIsSupported;
1064 	bool ODMCombine4To1Supported;
1065 
1066 	unsigned int SurfaceWidthY[DC__NUM_DPP__MAX];
1067 	unsigned int SurfaceWidthC[DC__NUM_DPP__MAX];
1068 	unsigned int SurfaceHeightY[DC__NUM_DPP__MAX];
1069 	unsigned int SurfaceHeightC[DC__NUM_DPP__MAX];
1070 	unsigned int WritebackHTaps[DC__NUM_DPP__MAX];
1071 	unsigned int WritebackVTaps[DC__NUM_DPP__MAX];
1072 	bool DSCEnable[DC__NUM_DPP__MAX];
1073 
1074 	double DRAMClockChangeLatencyOverride;
1075 
1076 	double GPUVMMinPageSize;
1077 	double HostVMMinPageSize;
1078 
1079 	bool   MPCCombineEnable[DC__NUM_DPP__MAX];
1080 	unsigned int HostVMMaxNonCachedPageTableLevels;
1081 	bool   DynamicMetadataVMEnabled;
1082 	double       WritebackInterfaceBufferSize;
1083 	double       WritebackLineBufferSize;
1084 
1085 	double DCCRateLuma[DC__NUM_DPP__MAX];
1086 	double DCCRateChroma[DC__NUM_DPP__MAX];
1087 
1088 	double PHYCLKD18PerState[DC__VOLTAGE_STATES];
1089 
1090 	bool WritebackSupportInterleaveAndUsingWholeBufferForASingleStream;
1091 	bool NumberOfHDMIFRLSupport;
1092 	unsigned int MaxNumHDMIFRLOutputs;
1093 	int    AudioSampleRate[DC__NUM_DPP__MAX];
1094 	int    AudioSampleLayout[DC__NUM_DPP__MAX];
1095 
1096 	int PercentMarginOverMinimumRequiredDCFCLK;
1097 	bool DynamicMetadataSupported[DC__VOLTAGE_STATES][2];
1098 	enum immediate_flip_requirement ImmediateFlipRequirement[DC__NUM_DPP__MAX];
1099 	unsigned int DETBufferSizeYThisState[DC__NUM_DPP__MAX];
1100 	unsigned int DETBufferSizeCThisState[DC__NUM_DPP__MAX];
1101 	bool NoUrgentLatencyHiding[DC__NUM_DPP__MAX];
1102 	bool NoUrgentLatencyHidingPre[DC__NUM_DPP__MAX];
1103 	int swath_width_luma_ub_this_state[DC__NUM_DPP__MAX];
1104 	int swath_width_chroma_ub_this_state[DC__NUM_DPP__MAX];
1105 	double UrgLatency[DC__VOLTAGE_STATES];
1106 	double VActiveCursorBandwidth[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1107 	double VActivePixelBandwidth[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1108 	bool NoTimeForPrefetch[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1109 	bool NoTimeForDynamicMetadata[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1110 	double dpte_row_bandwidth[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1111 	double meta_row_bandwidth[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1112 	double DETBufferSizeYAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1113 	double DETBufferSizeCAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1114 	unsigned int swath_width_luma_ub_all_states[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1115 	unsigned int swath_width_chroma_ub_all_states[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1116 	bool NotUrgentLatencyHiding[DC__VOLTAGE_STATES][2];
1117 	unsigned int SwathHeightYAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1118 	unsigned int SwathHeightCAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1119 	unsigned int SwathWidthYAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1120 	unsigned int SwathWidthCAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1121 	double TotalDPTERowBandwidth[DC__VOLTAGE_STATES][2];
1122 	double TotalMetaRowBandwidth[DC__VOLTAGE_STATES][2];
1123 	double TotalVActiveCursorBandwidth[DC__VOLTAGE_STATES][2];
1124 	double TotalVActivePixelBandwidth[DC__VOLTAGE_STATES][2];
1125 	double WritebackDelayTime[DC__NUM_DPP__MAX];
1126 	unsigned int DCCYIndependentBlock[DC__NUM_DPP__MAX];
1127 	unsigned int DCCCIndependentBlock[DC__NUM_DPP__MAX];
1128 	unsigned int dummyinteger17;
1129 	unsigned int dummyinteger18;
1130 	unsigned int dummyinteger19;
1131 	unsigned int dummyinteger20;
1132 	unsigned int dummyinteger21;
1133 	unsigned int dummyinteger22;
1134 	unsigned int dummyinteger23;
1135 	unsigned int dummyinteger24;
1136 	unsigned int dummyinteger25;
1137 	unsigned int dummyinteger26;
1138 	unsigned int dummyinteger27;
1139 	unsigned int dummyinteger28;
1140 	unsigned int dummyinteger29;
1141 	bool dummystring[DC__NUM_DPP__MAX];
1142 	double BPP;
1143 	enum odm_combine_policy ODMCombinePolicy;
1144 	bool UseMinimumRequiredDCFCLK;
1145 	bool ClampMinDCFCLK;
1146 	bool AllowDramClockChangeOneDisplayVactive;
1147 
1148 	double MaxAveragePercentOfIdealFabricAndSDPPortBWDisplayCanUseInNormalSystemOperation;
1149 	double PercentOfIdealFabricAndSDPPortBWReceivedAfterUrgLatency;
1150 	double PercentOfIdealDRAMBWReceivedAfterUrgLatencyPixelMixedWithVMData;
1151 	double PercentOfIdealDRAMBWReceivedAfterUrgLatencyVMDataOnly;
1152 	double PercentOfIdealDRAMBWReceivedAfterUrgLatencyPixelDataOnly;
1153 	double SRExitZ8Time;
1154 	double SREnterPlusExitZ8Time;
1155 	double Z8StutterExitWatermark;
1156 	double Z8StutterEnterPlusExitWatermark;
1157 	double Z8StutterEfficiencyNotIncludingVBlank;
1158 	double Z8StutterEfficiency;
1159 	double DCCFractionOfZeroSizeRequestsLuma[DC__NUM_DPP__MAX];
1160 	double DCCFractionOfZeroSizeRequestsChroma[DC__NUM_DPP__MAX];
1161 	double UrgBurstFactorCursor[DC__NUM_DPP__MAX];
1162 	double UrgBurstFactorLuma[DC__NUM_DPP__MAX];
1163 	double UrgBurstFactorChroma[DC__NUM_DPP__MAX];
1164 	double UrgBurstFactorCursorPre[DC__NUM_DPP__MAX];
1165 	double UrgBurstFactorLumaPre[DC__NUM_DPP__MAX];
1166 	double UrgBurstFactorChromaPre[DC__NUM_DPP__MAX];
1167 	bool NotUrgentLatencyHidingPre[DC__NUM_DPP__MAX];
1168 	bool LinkCapacitySupport[DC__VOLTAGE_STATES];
1169 	bool VREADY_AT_OR_AFTER_VSYNC[DC__NUM_DPP__MAX];
1170 	unsigned int MIN_DST_Y_NEXT_START[DC__NUM_DPP__MAX];
1171 	unsigned int VFrontPorch[DC__NUM_DPP__MAX];
1172 	int ConfigReturnBufferSizeInKByte;
1173 	enum unbounded_requesting_policy UseUnboundedRequesting;
1174 	int CompressedBufferSegmentSizeInkByte;
1175 	int CompressedBufferSizeInkByte;
1176 	int MetaFIFOSizeInKEntries;
1177 	int ZeroSizeBufferEntries;
1178 	int COMPBUF_RESERVED_SPACE_64B;
1179 	int COMPBUF_RESERVED_SPACE_ZS;
1180 	bool UnboundedRequestEnabled;
1181 	bool DSC422NativeSupport;
1182 	bool NoEnoughUrgentLatencyHiding;
1183 	bool NoEnoughUrgentLatencyHidingPre;
1184 	int NumberOfStutterBurstsPerFrame;
1185 	int Z8NumberOfStutterBurstsPerFrame;
1186 	unsigned int MaximumDSCBitsPerComponent;
1187 	unsigned int NotEnoughUrgentLatencyHidingA[DC__VOLTAGE_STATES][2];
1188 	double ReadBandwidthSurfaceLuma[DC__NUM_DPP__MAX];
1189 	double ReadBandwidthSurfaceChroma[DC__NUM_DPP__MAX];
1190 	double SurfaceRequiredDISPCLKWithoutODMCombine;
1191 	double SurfaceRequiredDISPCLK;
1192 	double MinActiveFCLKChangeLatencySupported;
1193 	int MinVoltageLevel;
1194 	int MaxVoltageLevel;
1195 	unsigned int TotalNumberOfSingleDPPSurfaces[DC__VOLTAGE_STATES][2];
1196 	unsigned int CompressedBufferSizeInkByteAllStates[DC__VOLTAGE_STATES][2];
1197 	unsigned int DETBufferSizeInKByteAllStates[DC__VOLTAGE_STATES][2][DC__NUM_DPP__MAX];
1198 	unsigned int DETBufferSizeInKByteThisState[DC__NUM_DPP__MAX];
1199 	unsigned int SurfaceSizeInMALL[DC__NUM_DPP__MAX];
1200 	bool ExceededMALLSize;
1201 	bool PTE_BUFFER_MODE[DC__NUM_DPP__MAX];
1202 	unsigned int BIGK_FRAGMENT_SIZE[DC__NUM_DPP__MAX];
1203 	unsigned int CompressedBufferSizeInkByteThisState;
1204 	enum dm_fclock_change_support FCLKChangeSupport[DC__VOLTAGE_STATES][2];
1205 	bool USRRetrainingSupport[DC__VOLTAGE_STATES][2];
1206 	enum dm_use_mall_for_pstate_change_mode UsesMALLForPStateChange[DC__NUM_DPP__MAX];
1207 	bool UnboundedRequestEnabledAllStates[DC__VOLTAGE_STATES][2];
1208 	bool SingleDPPViewportSizeSupportPerSurface[DC__NUM_DPP__MAX];
1209 	enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[DC__NUM_DPP__MAX];
1210 	bool UnboundedRequestEnabledThisState;
1211 	bool DRAMClockChangeRequirementFinal;
1212 	bool FCLKChangeRequirementFinal;
1213 	bool USRRetrainingRequiredFinal;
1214 	unsigned int DETSizeOverride[DC__NUM_DPP__MAX];
1215 	unsigned int nomDETInKByte;
1216 	enum mpc_combine_affinity  MPCCombineUse[DC__NUM_DPP__MAX];
1217 	bool MPCCombineMethodIncompatible;
1218 	unsigned int RequiredSlots[DC__VOLTAGE_STATES][DC__NUM_DPP__MAX];
1219 	bool ExceededMultistreamSlots[DC__VOLTAGE_STATES];
1220 	enum odm_combine_policy ODMUse[DC__NUM_DPP__MAX];
1221 	unsigned int OutputMultistreamId[DC__NUM_DPP__MAX];
1222 	bool OutputMultistreamEn[DC__NUM_DPP__MAX];
1223 	bool UsesMALLForStaticScreen[DC__NUM_DPP__MAX];
1224 	double MaxActiveDRAMClockChangeLatencySupported[DC__NUM_DPP__MAX];
1225 	double WritebackAllowFCLKChangeEndPosition[DC__NUM_DPP__MAX];
1226 	bool PTEBufferSizeNotExceededPerState[DC__NUM_DPP__MAX]; // new in DML32
1227 	bool DCCMetaBufferSizeNotExceededPerState[DC__NUM_DPP__MAX]; // new in DML32
1228 	bool NotEnoughDSCSlices[DC__VOLTAGE_STATES];
1229 	bool PixelsPerLinePerDSCUnitSupport[DC__VOLTAGE_STATES];
1230 	bool DCCMetaBufferSizeNotExceeded[DC__VOLTAGE_STATES][2];
1231 	unsigned int dpte_row_height_linear[DC__NUM_DPP__MAX];
1232 	unsigned int dpte_row_height_linear_chroma[DC__NUM_DPP__MAX];
1233 	unsigned int BlockHeightY[DC__NUM_DPP__MAX];
1234 	unsigned int BlockHeightC[DC__NUM_DPP__MAX];
1235 	unsigned int BlockWidthY[DC__NUM_DPP__MAX];
1236 	unsigned int BlockWidthC[DC__NUM_DPP__MAX];
1237 	unsigned int SubViewportLinesNeededInMALL[DC__NUM_DPP__MAX];
1238 	bool VActiveBandwithSupport[DC__VOLTAGE_STATES][2];
1239 	bool NotEnoughDETSwathFillLatencyHidingPerState[DC__VOLTAGE_STATES][2];
1240 	struct dummy_vars dummy_vars;
1241 };
1242 
1243 bool CalculateMinAndMaxPrefetchMode(
1244 		enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank,
1245 		unsigned int *MinPrefetchMode,
1246 		unsigned int *MaxPrefetchMode);
1247 
1248 double CalculateWriteBackDISPCLK(
1249 		enum source_format_class WritebackPixelFormat,
1250 		double PixelClock,
1251 		double WritebackHRatio,
1252 		double WritebackVRatio,
1253 		unsigned int WritebackLumaHTaps,
1254 		unsigned int WritebackLumaVTaps,
1255 		unsigned int WritebackChromaHTaps,
1256 		unsigned int WritebackChromaVTaps,
1257 		double WritebackDestinationWidth,
1258 		unsigned int HTotal,
1259 		unsigned int WritebackChromaLineBufferWidth);
1260 
1261 #endif /* _DML2_DISPLAY_MODE_VBA_H_ */
1262