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 #ifdef CONFIG_DRM_AMD_DC_DCN2_0
27 
28 #ifndef __DML2_DISPLAY_MODE_VBA_H__
29 #define __DML2_DISPLAY_MODE_VBA_H__
30 
31 #include "dml_common_defs.h"
32 
33 struct display_mode_lib;
34 
35 void ModeSupportAndSystemConfiguration(struct display_mode_lib *mode_lib);
36 
37 #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)
38 
39 dml_get_attr_decl(clk_dcf_deepsleep);
40 dml_get_attr_decl(wm_urgent);
41 dml_get_attr_decl(wm_memory_trip);
42 dml_get_attr_decl(wm_writeback_urgent);
43 dml_get_attr_decl(wm_stutter_exit);
44 dml_get_attr_decl(wm_stutter_enter_exit);
45 dml_get_attr_decl(wm_dram_clock_change);
46 dml_get_attr_decl(wm_writeback_dram_clock_change);
47 dml_get_attr_decl(wm_xfc_underflow);
48 dml_get_attr_decl(stutter_efficiency_no_vblank);
49 dml_get_attr_decl(stutter_efficiency);
50 dml_get_attr_decl(urgent_latency);
51 dml_get_attr_decl(urgent_extra_latency);
52 dml_get_attr_decl(nonurgent_latency);
53 dml_get_attr_decl(dram_clock_change_latency);
54 dml_get_attr_decl(dispclk_calculated);
55 dml_get_attr_decl(total_data_read_bw);
56 dml_get_attr_decl(return_bw);
57 dml_get_attr_decl(tcalc);
58 dml_get_attr_decl(fraction_of_urgent_bandwidth);
59 dml_get_attr_decl(fraction_of_urgent_bandwidth_imm_flip);
60 
61 #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)
62 
63 dml_get_pipe_attr_decl(dsc_delay);
64 dml_get_pipe_attr_decl(dppclk_calculated);
65 dml_get_pipe_attr_decl(dscclk_calculated);
66 dml_get_pipe_attr_decl(min_ttu_vblank);
67 dml_get_pipe_attr_decl(vratio_prefetch_l);
68 dml_get_pipe_attr_decl(vratio_prefetch_c);
69 dml_get_pipe_attr_decl(dst_x_after_scaler);
70 dml_get_pipe_attr_decl(dst_y_after_scaler);
71 dml_get_pipe_attr_decl(dst_y_per_vm_vblank);
72 dml_get_pipe_attr_decl(dst_y_per_row_vblank);
73 dml_get_pipe_attr_decl(dst_y_prefetch);
74 dml_get_pipe_attr_decl(dst_y_per_vm_flip);
75 dml_get_pipe_attr_decl(dst_y_per_row_flip);
76 dml_get_pipe_attr_decl(xfc_transfer_delay);
77 dml_get_pipe_attr_decl(xfc_precharge_delay);
78 dml_get_pipe_attr_decl(xfc_remote_surface_flip_latency);
79 dml_get_pipe_attr_decl(xfc_prefetch_margin);
80 dml_get_pipe_attr_decl(refcyc_per_vm_group_vblank);
81 dml_get_pipe_attr_decl(refcyc_per_vm_group_flip);
82 dml_get_pipe_attr_decl(refcyc_per_vm_req_vblank);
83 dml_get_pipe_attr_decl(refcyc_per_vm_req_flip);
84 
85 unsigned int get_vstartup_calculated(
86 		struct display_mode_lib *mode_lib,
87 		const display_e2e_pipe_params_st *pipes,
88 		unsigned int num_pipes,
89 		unsigned int which_pipe);
90 
91 double get_total_immediate_flip_bytes(
92 		struct display_mode_lib *mode_lib,
93 		const display_e2e_pipe_params_st *pipes,
94 		unsigned int num_pipes);
95 double get_total_immediate_flip_bw(
96 		struct display_mode_lib *mode_lib,
97 		const display_e2e_pipe_params_st *pipes,
98 		unsigned int num_pipes);
99 double get_total_prefetch_bw(
100 		struct display_mode_lib *mode_lib,
101 		const display_e2e_pipe_params_st *pipes,
102 		unsigned int num_pipes);
103 unsigned int dml_get_voltage_level(
104 		struct display_mode_lib *mode_lib,
105 		const display_e2e_pipe_params_st *pipes,
106 		unsigned int num_pipes);
107 
108 void PixelClockAdjustmentForProgressiveToInterlaceUnit(struct display_mode_lib *mode_lib);
109 
110 bool Calculate256BBlockSizes(
111 		enum source_format_class SourcePixelFormat,
112 		enum dm_swizzle_mode SurfaceTiling,
113 		unsigned int BytePerPixelY,
114 		unsigned int BytePerPixelC,
115 		unsigned int *BlockHeight256BytesY,
116 		unsigned int *BlockHeight256BytesC,
117 		unsigned int *BlockWidth256BytesY,
118 		unsigned int *BlockWidth256BytesC);
119 
120 struct vba_vars_st {
121 	ip_params_st ip;
122 	soc_bounding_box_st soc;
123 
124 	int maxMpcComb;
125 	bool UseMaximumVStartup;
126 
127 	double WritebackDISPCLK;
128 	double DPPCLKUsingSingleDPPLuma;
129 	double DPPCLKUsingSingleDPPChroma;
130 	double DISPCLKWithRamping;
131 	double DISPCLKWithoutRamping;
132 	double GlobalDPPCLK;
133 	double DISPCLKWithRampingRoundedToDFSGranularity;
134 	double DISPCLKWithoutRampingRoundedToDFSGranularity;
135 	double MaxDispclkRoundedToDFSGranularity;
136 	bool DCCEnabledAnyPlane;
137 	double ReturnBandwidthToDCN;
138 	unsigned int TotalActiveDPP;
139 	unsigned int TotalDCCActiveDPP;
140 	double UrgentRoundTripAndOutOfOrderLatency;
141 	double StutterPeriod;
142 	double FrameTimeForMinFullDETBufferingTime;
143 	double AverageReadBandwidth;
144 	double TotalRowReadBandwidth;
145 	double PartOfBurstThatFitsInROB;
146 	double StutterBurstTime;
147 	unsigned int NextPrefetchMode;
148 	double NextMaxVStartup;
149 	double VBlankTime;
150 	double SmallestVBlank;
151 	double DCFCLKDeepSleepPerPlane[DC__NUM_DPP__MAX];
152 	double EffectiveDETPlusLBLinesLuma;
153 	double EffectiveDETPlusLBLinesChroma;
154 	double UrgentLatencySupportUsLuma;
155 	double UrgentLatencySupportUsChroma;
156 	unsigned int DSCFormatFactor;
157 
158 	bool PrefetchModeSupported;
159 	enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank; // Mode Support only
160 	double XFCRemoteSurfaceFlipDelay;
161 	double TInitXFill;
162 	double TslvChk;
163 	double SrcActiveDrainRate;
164 	bool ImmediateFlipSupported;
165 	enum mpc_combine_affinity WhenToDoMPCCombine; // Mode Support only
166 
167 	bool PrefetchERROR;
168 
169 	unsigned int VStartupLines;
170 	unsigned int ActiveDPPs;
171 	unsigned int LBLatencyHidingSourceLinesY;
172 	unsigned int LBLatencyHidingSourceLinesC;
173 	double ActiveDRAMClockChangeLatencyMargin[DC__NUM_DPP__MAX];
174 	double MinActiveDRAMClockChangeMargin;
175 	double InitFillLevel;
176 	double FinalFillMargin;
177 	double FinalFillLevel;
178 	double RemainingFillLevel;
179 	double TFinalxFill;
180 
181 	//
182 	// SOC Bounding Box Parameters
183 	//
184 	double SRExitTime;
185 	double SREnterPlusExitTime;
186 	double UrgentLatencyPixelDataOnly;
187 	double UrgentLatencyPixelMixedWithVMData;
188 	double UrgentLatencyVMDataOnly;
189 	double UrgentLatency; // max of the above three
190 	double WritebackLatency;
191 	double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly; // Mode Support
192 	double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData; // Mode Support
193 	double PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly; // Mode Support
194 	double MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation; // Mode Support
195 	double MaxAveragePercentOfIdealDRAMBWDisplayCanUseInNormalSystemOperation; // Mode Support
196 	double NumberOfChannels;
197 	double DRAMChannelWidth;
198 	double FabricDatapathToDCNDataReturn;
199 	double ReturnBusWidth;
200 	double Downspreading;
201 	double DISPCLKDPPCLKDSCCLKDownSpreading;
202 	double DISPCLKDPPCLKVCOSpeed;
203 	double RoundTripPingLatencyCycles;
204 	double UrgentOutOfOrderReturnPerChannel;
205 	double UrgentOutOfOrderReturnPerChannelPixelDataOnly;
206 	double UrgentOutOfOrderReturnPerChannelPixelMixedWithVMData;
207 	double UrgentOutOfOrderReturnPerChannelVMDataOnly;
208 	unsigned int VMMPageSize;
209 	double DRAMClockChangeLatency;
210 	double XFCBusTransportTime;
211 	bool UseUrgentBurstBandwidth;
212 	double XFCXBUFLatencyTolerance;
213 
214 	//
215 	// IP Parameters
216 	//
217 	unsigned int ROBBufferSizeInKByte;
218 	double DETBufferSizeInKByte;
219 	double DETBufferSizeInTime;
220 	unsigned int DPPOutputBufferPixels;
221 	unsigned int OPPOutputBufferLines;
222 	unsigned int PixelChunkSizeInKByte;
223 	double ReturnBW;
224 	bool GPUVMEnable;
225 	bool HostVMEnable;
226 	unsigned int GPUVMMaxPageTableLevels;
227 	unsigned int HostVMMaxPageTableLevels;
228 	unsigned int HostVMCachedPageTableLevels;
229 	unsigned int OverrideGPUVMPageTableLevels;
230 	unsigned int OverrideHostVMPageTableLevels;
231 	unsigned int MetaChunkSize;
232 	double MinPixelChunkSizeBytes;
233 	double MinMetaChunkSizeBytes;
234 	unsigned int WritebackChunkSize;
235 	bool ODMCapability;
236 	unsigned int NumberOfDSC;
237 	unsigned int LineBufferSize;
238 	unsigned int MaxLineBufferLines;
239 	unsigned int WritebackInterfaceLumaBufferSize;
240 	unsigned int WritebackInterfaceChromaBufferSize;
241 	unsigned int WritebackChromaLineBufferWidth;
242 	enum writeback_config WritebackConfiguration;
243 	double MaxDCHUBToPSCLThroughput;
244 	double MaxPSCLToLBThroughput;
245 	unsigned int PTEBufferSizeInRequestsLuma;
246 	unsigned int PTEBufferSizeInRequestsChroma;
247 	double DISPCLKRampingMargin;
248 	unsigned int MaxInterDCNTileRepeaters;
249 	bool XFCSupported;
250 	double XFCSlvChunkSize;
251 	double XFCFillBWOverhead;
252 	double XFCFillConstant;
253 	double XFCTSlvVupdateOffset;
254 	double XFCTSlvVupdateWidth;
255 	double XFCTSlvVreadyOffset;
256 	double DPPCLKDelaySubtotal;
257 	double DPPCLKDelaySCL;
258 	double DPPCLKDelaySCLLBOnly;
259 	double DPPCLKDelayCNVCFormater;
260 	double DPPCLKDelayCNVCCursor;
261 	double DISPCLKDelaySubtotal;
262 	bool ProgressiveToInterlaceUnitInOPP;
263 	// Pipe/Plane Parameters
264 	int VoltageLevel;
265 	double FabricClock;
266 	double DRAMSpeed;
267 	double DISPCLK;
268 	double SOCCLK;
269 	double DCFCLK;
270 
271 	unsigned int NumberOfActivePlanes;
272 	unsigned int NumberOfDSCSlices[DC__NUM_DPP__MAX];
273 	unsigned int ViewportWidth[DC__NUM_DPP__MAX];
274 	unsigned int ViewportHeight[DC__NUM_DPP__MAX];
275 	unsigned int ViewportYStartY[DC__NUM_DPP__MAX];
276 	unsigned int ViewportYStartC[DC__NUM_DPP__MAX];
277 	unsigned int PitchY[DC__NUM_DPP__MAX];
278 	unsigned int PitchC[DC__NUM_DPP__MAX];
279 	double HRatio[DC__NUM_DPP__MAX];
280 	double VRatio[DC__NUM_DPP__MAX];
281 	unsigned int htaps[DC__NUM_DPP__MAX];
282 	unsigned int vtaps[DC__NUM_DPP__MAX];
283 	unsigned int HTAPsChroma[DC__NUM_DPP__MAX];
284 	unsigned int VTAPsChroma[DC__NUM_DPP__MAX];
285 	unsigned int HTotal[DC__NUM_DPP__MAX];
286 	unsigned int VTotal[DC__NUM_DPP__MAX];
287 	unsigned int VTotal_Max[DC__NUM_DPP__MAX];
288 	unsigned int VTotal_Min[DC__NUM_DPP__MAX];
289 	int DPPPerPlane[DC__NUM_DPP__MAX];
290 	double PixelClock[DC__NUM_DPP__MAX];
291 	double PixelClockBackEnd[DC__NUM_DPP__MAX];
292 	bool DCCEnable[DC__NUM_DPP__MAX];
293 	bool FECEnable[DC__NUM_DPP__MAX];
294 	unsigned int DCCMetaPitchY[DC__NUM_DPP__MAX];
295 	unsigned int DCCMetaPitchC[DC__NUM_DPP__MAX];
296 	enum scan_direction_class SourceScan[DC__NUM_DPP__MAX];
297 	enum source_format_class SourcePixelFormat[DC__NUM_DPP__MAX];
298 	bool WritebackEnable[DC__NUM_DPP__MAX];
299 	unsigned int ActiveWritebacksPerPlane[DC__NUM_DPP__MAX];
300 	double WritebackDestinationWidth[DC__NUM_DPP__MAX];
301 	double WritebackDestinationHeight[DC__NUM_DPP__MAX];
302 	double WritebackSourceHeight[DC__NUM_DPP__MAX];
303 	enum source_format_class WritebackPixelFormat[DC__NUM_DPP__MAX];
304 	unsigned int WritebackLumaHTaps[DC__NUM_DPP__MAX];
305 	unsigned int WritebackLumaVTaps[DC__NUM_DPP__MAX];
306 	unsigned int WritebackChromaHTaps[DC__NUM_DPP__MAX];
307 	unsigned int WritebackChromaVTaps[DC__NUM_DPP__MAX];
308 	double WritebackHRatio[DC__NUM_DPP__MAX];
309 	double WritebackVRatio[DC__NUM_DPP__MAX];
310 	unsigned int HActive[DC__NUM_DPP__MAX];
311 	unsigned int VActive[DC__NUM_DPP__MAX];
312 	bool Interlace[DC__NUM_DPP__MAX];
313 	enum dm_swizzle_mode SurfaceTiling[DC__NUM_DPP__MAX];
314 	unsigned int ScalerRecoutWidth[DC__NUM_DPP__MAX];
315 	bool DynamicMetadataEnable[DC__NUM_DPP__MAX];
316 	int DynamicMetadataLinesBeforeActiveRequired[DC__NUM_DPP__MAX];
317 	unsigned int DynamicMetadataTransmittedBytes[DC__NUM_DPP__MAX];
318 	double DCCRate[DC__NUM_DPP__MAX];
319 	double AverageDCCCompressionRate;
320 	bool ODMCombineEnabled[DC__NUM_DPP__MAX];
321 	enum odm_combine_mode ODMCombineTypeEnabled[DC__NUM_DPP__MAX];
322 	double OutputBpp[DC__NUM_DPP__MAX];
323 	bool DSCEnabled[DC__NUM_DPP__MAX];
324 	unsigned int DSCInputBitPerComponent[DC__NUM_DPP__MAX];
325 	enum output_format_class OutputFormat[DC__NUM_DPP__MAX];
326 	enum output_encoder_class Output[DC__NUM_DPP__MAX];
327 	unsigned int BlendingAndTiming[DC__NUM_DPP__MAX];
328 	bool SynchronizedVBlank;
329 	unsigned int NumberOfCursors[DC__NUM_DPP__MAX];
330 	unsigned int CursorWidth[DC__NUM_DPP__MAX][DC__NUM_CURSOR__MAX];
331 	unsigned int CursorBPP[DC__NUM_DPP__MAX][DC__NUM_CURSOR__MAX];
332 	bool XFCEnabled[DC__NUM_DPP__MAX];
333 	bool ScalerEnabled[DC__NUM_DPP__MAX];
334 
335 	// Intermediates/Informational
336 	bool ImmediateFlipSupport;
337 	double DETBufferSizeY[DC__NUM_DPP__MAX];
338 	double DETBufferSizeC[DC__NUM_DPP__MAX];
339 	unsigned int SwathHeightY[DC__NUM_DPP__MAX];
340 	unsigned int SwathHeightC[DC__NUM_DPP__MAX];
341 	unsigned int LBBitPerPixel[DC__NUM_DPP__MAX];
342 	double LastPixelOfLineExtraWatermark;
343 	double TotalDataReadBandwidth;
344 	unsigned int TotalActiveWriteback;
345 	unsigned int EffectiveLBLatencyHidingSourceLinesLuma;
346 	unsigned int EffectiveLBLatencyHidingSourceLinesChroma;
347 	double BandwidthAvailableForImmediateFlip;
348 	unsigned int PrefetchMode[DC__VOLTAGE_STATES + 1][2];
349 	unsigned int MinPrefetchMode;
350 	unsigned int MaxPrefetchMode;
351 	bool AnyLinesForVMOrRowTooLarge;
352 	double MaxVStartup;
353 	bool IgnoreViewportPositioning;
354 	bool ErrorResult[DC__NUM_DPP__MAX];
355 	//
356 	// Calculated dml_ml->vba.Outputs
357 	//
358 	double DCFCLKDeepSleep;
359 	double UrgentWatermark;
360 	double UrgentExtraLatency;
361 	double WritebackUrgentWatermark;
362 	double StutterExitWatermark;
363 	double StutterEnterPlusExitWatermark;
364 	double DRAMClockChangeWatermark;
365 	double WritebackDRAMClockChangeWatermark;
366 	double StutterEfficiency;
367 	double StutterEfficiencyNotIncludingVBlank;
368 	double NonUrgentLatencyTolerance;
369 	double MinActiveDRAMClockChangeLatencySupported;
370 
371 	// These are the clocks calcuated by the library but they are not actually
372 	// used explicitly. They are fetched by tests and then possibly used. The
373 	// ultimate values to use are the ones specified by the parameters to DML
374 	double DISPCLK_calculated;
375 	double DPPCLK_calculated[DC__NUM_DPP__MAX];
376 
377 	unsigned int VUpdateOffsetPix[DC__NUM_DPP__MAX];
378 	double VUpdateWidthPix[DC__NUM_DPP__MAX];
379 	double VReadyOffsetPix[DC__NUM_DPP__MAX];
380 
381 	unsigned int TotImmediateFlipBytes;
382 	double TCalc;
383 
384 	display_e2e_pipe_params_st cache_pipes[DC__NUM_DPP__MAX];
385 	unsigned int cache_num_pipes;
386 	unsigned int pipe_plane[DC__NUM_DPP__MAX];
387 
388 	/* vba mode support */
389 	/*inputs*/
390 	bool EmbeddedPanel[DC__NUM_DPP__MAX];
391 	bool SupportGFX7CompatibleTilingIn32bppAnd64bpp;
392 	double MaxHSCLRatio;
393 	double MaxVSCLRatio;
394 	unsigned int MaxNumWriteback;
395 	bool WritebackLumaAndChromaScalingSupported;
396 	bool Cursor64BppSupport;
397 	double DCFCLKPerState[DC__VOLTAGE_STATES + 1];
398 	double FabricClockPerState[DC__VOLTAGE_STATES + 1];
399 	double SOCCLKPerState[DC__VOLTAGE_STATES + 1];
400 	double PHYCLKPerState[DC__VOLTAGE_STATES + 1];
401 	double DTBCLKPerState[DC__VOLTAGE_STATES + 1];
402 	double MaxDppclk[DC__VOLTAGE_STATES + 1];
403 	double MaxDSCCLK[DC__VOLTAGE_STATES + 1];
404 	double DRAMSpeedPerState[DC__VOLTAGE_STATES + 1];
405 	double MaxDispclk[DC__VOLTAGE_STATES + 1];
406 	int VoltageOverrideLevel;
407 
408 	/*outputs*/
409 	bool ScaleRatioAndTapsSupport;
410 	bool SourceFormatPixelAndScanSupport;
411 	double TotalBandwidthConsumedGBytePerSecond;
412 	bool DCCEnabledInAnyPlane;
413 	bool WritebackLatencySupport;
414 	bool WritebackModeSupport;
415 	bool Writeback10bpc420Supported;
416 	bool BandwidthSupport[DC__VOLTAGE_STATES + 1];
417 	unsigned int TotalNumberOfActiveWriteback;
418 	double CriticalPoint;
419 	double ReturnBWToDCNPerState;
420 	bool IsErrorResult[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
421 	bool prefetch_vm_bw_valid;
422 	bool prefetch_row_bw_valid;
423 	bool NumberOfOTGSupport;
424 	bool NonsupportedDSCInputBPC;
425 	bool WritebackScaleRatioAndTapsSupport;
426 	bool CursorSupport;
427 	bool PitchSupport;
428 	enum dm_validation_status ValidationStatus[DC__VOLTAGE_STATES + 1];
429 
430 	double WritebackLineBufferLumaBufferSize;
431 	double WritebackLineBufferChromaBufferSize;
432 	double WritebackMinHSCLRatio;
433 	double WritebackMinVSCLRatio;
434 	double WritebackMaxHSCLRatio;
435 	double WritebackMaxVSCLRatio;
436 	double WritebackMaxHSCLTaps;
437 	double WritebackMaxVSCLTaps;
438 	unsigned int MaxNumDPP;
439 	unsigned int MaxNumOTG;
440 	double CursorBufferSize;
441 	double CursorChunkSize;
442 	unsigned int Mode;
443 	double OutputLinkDPLanes[DC__NUM_DPP__MAX];
444 	double ForcedOutputLinkBPP[DC__NUM_DPP__MAX]; // Mode Support only
445 	double ImmediateFlipBW[DC__NUM_DPP__MAX];
446 	double MaxMaxVStartup;
447 
448 	double WritebackLumaVExtra;
449 	double WritebackChromaVExtra;
450 	double WritebackRequiredDISPCLK;
451 	double MaximumSwathWidthSupport;
452 	double MaximumSwathWidthInDETBuffer;
453 	double MaximumSwathWidthInLineBuffer;
454 	double MaxDispclkRoundedDownToDFSGranularity;
455 	double MaxDppclkRoundedDownToDFSGranularity;
456 	double PlaneRequiredDISPCLKWithoutODMCombine;
457 	double PlaneRequiredDISPCLKWithODMCombine;
458 	double PlaneRequiredDISPCLK;
459 	double TotalNumberOfActiveOTG;
460 	double FECOverhead;
461 	double EffectiveFECOverhead;
462 	double Outbpp;
463 	unsigned int OutbppDSC;
464 	double TotalDSCUnitsRequired;
465 	double bpp;
466 	unsigned int slices;
467 	double SwathWidthGranularityY;
468 	double RoundedUpMaxSwathSizeBytesY;
469 	double SwathWidthGranularityC;
470 	double RoundedUpMaxSwathSizeBytesC;
471 	double EffectiveDETLBLinesLuma;
472 	double EffectiveDETLBLinesChroma;
473 	double ProjectedDCFCLKDeepSleep;
474 	double PDEAndMetaPTEBytesPerFrameY;
475 	double PDEAndMetaPTEBytesPerFrameC;
476 	unsigned int MetaRowBytesY;
477 	unsigned int MetaRowBytesC;
478 	unsigned int DPTEBytesPerRowC;
479 	unsigned int DPTEBytesPerRowY;
480 	double ExtraLatency;
481 	double TimeCalc;
482 	double TWait;
483 	double MaximumReadBandwidthWithPrefetch;
484 	double MaximumReadBandwidthWithoutPrefetch;
485 	double total_dcn_read_bw_with_flip;
486 	double total_dcn_read_bw_with_flip_no_urgent_burst;
487 	double FractionOfUrgentBandwidth;
488 	double FractionOfUrgentBandwidthImmediateFlip; // Mode Support debugging output
489 
490 	/* ms locals */
491 	double IdealSDPPortBandwidthPerState[DC__VOLTAGE_STATES + 1];
492 	unsigned int NoOfDPP[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
493 	int NoOfDPPThisState[DC__NUM_DPP__MAX];
494 	bool ODMCombineEnablePerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
495 	enum odm_combine_mode ODMCombineTypeEnablePerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
496 	unsigned int SwathWidthYThisState[DC__NUM_DPP__MAX];
497 	unsigned int SwathHeightCPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
498 	unsigned int SwathHeightYThisState[DC__NUM_DPP__MAX];
499 	unsigned int SwathHeightCThisState[DC__NUM_DPP__MAX];
500 	double VRatioPreY[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
501 	double VRatioPreC[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
502 	double RequiredPrefetchPixelDataBWLuma[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
503 	double RequiredPrefetchPixelDataBWChroma[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
504 	double RequiredDPPCLK[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
505 	double RequiredDPPCLKThisState[DC__NUM_DPP__MAX];
506 	bool PTEBufferSizeNotExceededY[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
507 	bool PTEBufferSizeNotExceededC[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
508 	bool BandwidthWithoutPrefetchSupported[DC__VOLTAGE_STATES + 1];
509 	bool PrefetchSupported[DC__VOLTAGE_STATES + 1][2];
510 	bool VRatioInPrefetchSupported[DC__VOLTAGE_STATES + 1][2];
511 	double RequiredDISPCLK[DC__VOLTAGE_STATES + 1][2];
512 	bool DISPCLK_DPPCLK_Support[DC__VOLTAGE_STATES + 1][2];
513 	bool TotalAvailablePipesSupport[DC__VOLTAGE_STATES + 1][2];
514 	unsigned int TotalNumberOfActiveDPP[DC__VOLTAGE_STATES + 1][2];
515 	unsigned int TotalNumberOfDCCActiveDPP[DC__VOLTAGE_STATES + 1][2];
516 	bool ModeSupport[DC__VOLTAGE_STATES + 1][2];
517 	double ReturnBWPerState[DC__VOLTAGE_STATES + 1];
518 	bool DIOSupport[DC__VOLTAGE_STATES + 1];
519 	bool NotEnoughDSCUnits[DC__VOLTAGE_STATES + 1];
520 	bool DSCCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES + 1];
521 	bool DTBCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES + 1];
522 	double UrgentRoundTripAndOutOfOrderLatencyPerState[DC__VOLTAGE_STATES + 1];
523 	bool ROBSupport[DC__VOLTAGE_STATES + 1];
524 	bool PTEBufferSizeNotExceeded[DC__VOLTAGE_STATES + 1][2];
525 	bool TotalVerticalActiveBandwidthSupport[DC__VOLTAGE_STATES + 1];
526 	double MaxTotalVerticalActiveAvailableBandwidth[DC__VOLTAGE_STATES + 1];
527 	double PrefetchBW[DC__NUM_DPP__MAX];
528 	double PDEAndMetaPTEBytesPerFrame[DC__NUM_DPP__MAX];
529 	double MetaRowBytes[DC__NUM_DPP__MAX];
530 	double DPTEBytesPerRow[DC__NUM_DPP__MAX];
531 	double PrefetchLinesY[DC__NUM_DPP__MAX];
532 	double PrefetchLinesC[DC__NUM_DPP__MAX];
533 	unsigned int MaxNumSwY[DC__NUM_DPP__MAX];
534 	unsigned int MaxNumSwC[DC__NUM_DPP__MAX];
535 	double PrefillY[DC__NUM_DPP__MAX];
536 	double PrefillC[DC__NUM_DPP__MAX];
537 	double LineTimesForPrefetch[DC__NUM_DPP__MAX];
538 	double LinesForMetaPTE[DC__NUM_DPP__MAX];
539 	double LinesForMetaAndDPTERow[DC__NUM_DPP__MAX];
540 	double MinDPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
541 	unsigned int SwathWidthYSingleDPP[DC__NUM_DPP__MAX];
542 	double BytePerPixelInDETY[DC__NUM_DPP__MAX];
543 	double BytePerPixelInDETC[DC__NUM_DPP__MAX];
544 	bool RequiresDSC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
545 	unsigned int NumberOfDSCSlice[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
546 	double RequiresFEC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
547 	double OutputBppPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
548 	double DSCDelayPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
549 	bool ViewportSizeSupport[DC__VOLTAGE_STATES + 1];
550 	unsigned int Read256BlockHeightY[DC__NUM_DPP__MAX];
551 	unsigned int Read256BlockWidthY[DC__NUM_DPP__MAX];
552 	unsigned int Read256BlockHeightC[DC__NUM_DPP__MAX];
553 	unsigned int Read256BlockWidthC[DC__NUM_DPP__MAX];
554 	double MaxSwathHeightY[DC__NUM_DPP__MAX];
555 	double MaxSwathHeightC[DC__NUM_DPP__MAX];
556 	double MinSwathHeightY[DC__NUM_DPP__MAX];
557 	double MinSwathHeightC[DC__NUM_DPP__MAX];
558 	double ReadBandwidthLuma[DC__NUM_DPP__MAX];
559 	double ReadBandwidthChroma[DC__NUM_DPP__MAX];
560 	double ReadBandwidth[DC__NUM_DPP__MAX];
561 	double WriteBandwidth[DC__NUM_DPP__MAX];
562 	double PSCL_FACTOR[DC__NUM_DPP__MAX];
563 	double PSCL_FACTOR_CHROMA[DC__NUM_DPP__MAX];
564 	double MaximumVStartup[DC__NUM_DPP__MAX];
565 	unsigned int MacroTileWidthY[DC__NUM_DPP__MAX];
566 	unsigned int MacroTileWidthC[DC__NUM_DPP__MAX];
567 	double AlignedDCCMetaPitch[DC__NUM_DPP__MAX];
568 	double AlignedYPitch[DC__NUM_DPP__MAX];
569 	double AlignedCPitch[DC__NUM_DPP__MAX];
570 	double MaximumSwathWidth[DC__NUM_DPP__MAX];
571 	double cursor_bw[DC__NUM_DPP__MAX];
572 	double cursor_bw_pre[DC__NUM_DPP__MAX];
573 	double Tno_bw[DC__NUM_DPP__MAX];
574 	double prefetch_vmrow_bw[DC__NUM_DPP__MAX];
575 	double DestinationLinesToRequestVMInImmediateFlip[DC__NUM_DPP__MAX];
576 	double DestinationLinesToRequestRowInImmediateFlip[DC__NUM_DPP__MAX];
577 	double final_flip_bw[DC__NUM_DPP__MAX];
578 	bool ImmediateFlipSupportedForState[DC__VOLTAGE_STATES + 1][2];
579 	double WritebackDelay[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
580 	unsigned int vm_group_bytes[DC__NUM_DPP__MAX];
581 	long dpte_group_bytes[DC__NUM_DPP__MAX];
582 	unsigned int dpte_row_height[DC__NUM_DPP__MAX];
583 	unsigned int meta_req_height[DC__NUM_DPP__MAX];
584 	unsigned int meta_req_width[DC__NUM_DPP__MAX];
585 	unsigned int meta_row_height[DC__NUM_DPP__MAX];
586 	unsigned int meta_row_width[DC__NUM_DPP__MAX];
587 	unsigned int dpte_row_height_chroma[DC__NUM_DPP__MAX];
588 	unsigned int meta_req_height_chroma[DC__NUM_DPP__MAX];
589 	unsigned int meta_req_width_chroma[DC__NUM_DPP__MAX];
590 	unsigned int meta_row_height_chroma[DC__NUM_DPP__MAX];
591 	unsigned int meta_row_width_chroma[DC__NUM_DPP__MAX];
592 	bool ImmediateFlipSupportedForPipe[DC__NUM_DPP__MAX];
593 	double meta_row_bw[DC__NUM_DPP__MAX];
594 	double dpte_row_bw[DC__NUM_DPP__MAX];
595 	double DisplayPipeLineDeliveryTimeLuma[DC__NUM_DPP__MAX];                     // WM
596 	double DisplayPipeLineDeliveryTimeChroma[DC__NUM_DPP__MAX];                     // WM
597 	double DisplayPipeRequestDeliveryTimeLuma[DC__NUM_DPP__MAX];
598 	double DisplayPipeRequestDeliveryTimeChroma[DC__NUM_DPP__MAX];
599 	enum clock_change_support DRAMClockChangeSupport[DC__VOLTAGE_STATES + 1][2];
600 	double UrgentBurstFactorCursor[DC__NUM_DPP__MAX];
601 	double UrgentBurstFactorCursorPre[DC__NUM_DPP__MAX];
602 	double UrgentBurstFactorLuma[DC__NUM_DPP__MAX];
603 	double UrgentBurstFactorLumaPre[DC__NUM_DPP__MAX];
604 	double UrgentBurstFactorChroma[DC__NUM_DPP__MAX];
605 	double UrgentBurstFactorChromaPre[DC__NUM_DPP__MAX];
606 
607 	bool           MPCCombine[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
608 	double         SwathWidthCSingleDPP[DC__NUM_DPP__MAX];
609 	double         MaximumSwathWidthInLineBufferLuma;
610 	double         MaximumSwathWidthInLineBufferChroma;
611 	double         MaximumSwathWidthLuma[DC__NUM_DPP__MAX];
612 	double         MaximumSwathWidthChroma[DC__NUM_DPP__MAX];
613 	bool odm_combine_dummy[DC__NUM_DPP__MAX];
614 	enum odm_combine_mode odm_combine_mode_dummy[DC__NUM_DPP__MAX];
615 	double         dummy1[DC__NUM_DPP__MAX];
616 	double         dummy2[DC__NUM_DPP__MAX];
617 	double         dummy3[DC__NUM_DPP__MAX];
618 	double         dummy4[DC__NUM_DPP__MAX];
619 	double         dummy5;
620 	double         dummy6;
621 	double         dummy7[DC__NUM_DPP__MAX];
622 	double         dummy8[DC__NUM_DPP__MAX];
623 	unsigned int        dummyinteger1ms[DC__NUM_DPP__MAX];
624 	unsigned int        dummyinteger2ms[DC__NUM_DPP__MAX];
625 	unsigned int        dummyinteger3[DC__NUM_DPP__MAX];
626 	unsigned int        dummyinteger4;
627 	unsigned int        dummyinteger5;
628 	unsigned int        dummyinteger6;
629 	unsigned int        dummyinteger7;
630 	unsigned int        dummyinteger8;
631 	unsigned int        dummyinteger9;
632 	unsigned int        dummyinteger10;
633 	unsigned int        dummyinteger11;
634 	unsigned int        dummyinteger12;
635 	unsigned int        dummyintegerarr1[DC__NUM_DPP__MAX];
636 	unsigned int        dummyintegerarr2[DC__NUM_DPP__MAX];
637 	unsigned int        dummyintegerarr3[DC__NUM_DPP__MAX];
638 	unsigned int        dummyintegerarr4[DC__NUM_DPP__MAX];
639 	long                dummylongarr1[DC__NUM_DPP__MAX];
640 	bool           dummysinglestring;
641 	bool           SingleDPPViewportSizeSupportPerPlane[DC__NUM_DPP__MAX];
642 	double         PlaneRequiredDISPCLKWithODMCombine2To1;
643 	double         PlaneRequiredDISPCLKWithODMCombine4To1;
644 	unsigned int   TotalNumberOfSingleDPPPlanes[DC__VOLTAGE_STATES + 1][2];
645 	bool           LinkDSCEnable;
646 	bool           ODMCombine4To1SupportCheckOK[DC__VOLTAGE_STATES + 1];
647 	bool ODMCombineEnableThisState[DC__NUM_DPP__MAX];
648 	enum odm_combine_mode ODMCombineEnableTypeThisState[DC__NUM_DPP__MAX];
649 	unsigned int   SwathWidthCThisState[DC__NUM_DPP__MAX];
650 	bool           ViewportSizeSupportPerPlane[DC__NUM_DPP__MAX];
651 	double         AlignedDCCMetaPitchY[DC__NUM_DPP__MAX];
652 	double         AlignedDCCMetaPitchC[DC__NUM_DPP__MAX];
653 
654 	unsigned int NotEnoughUrgentLatencyHiding;
655 	unsigned int NotEnoughUrgentLatencyHidingPre;
656 	long PTEBufferSizeInRequestsForLuma;
657 	long PTEBufferSizeInRequestsForChroma;
658 
659 	// Missing from VBA
660 	long dpte_group_bytes_chroma;
661 	unsigned int vm_group_bytes_chroma;
662 	double dst_x_after_scaler;
663 	double dst_y_after_scaler;
664 	unsigned int VStartupRequiredWhenNotEnoughTimeForDynamicMetadata;
665 
666 	/* perf locals*/
667 	double PrefetchBandwidth[DC__NUM_DPP__MAX];
668 	double VInitPreFillY[DC__NUM_DPP__MAX];
669 	double VInitPreFillC[DC__NUM_DPP__MAX];
670 	unsigned int MaxNumSwathY[DC__NUM_DPP__MAX];
671 	unsigned int MaxNumSwathC[DC__NUM_DPP__MAX];
672 	unsigned int VStartup[DC__NUM_DPP__MAX];
673 	double DSTYAfterScaler[DC__NUM_DPP__MAX];
674 	double DSTXAfterScaler[DC__NUM_DPP__MAX];
675 	bool AllowDRAMClockChangeDuringVBlank[DC__NUM_DPP__MAX];
676 	bool AllowDRAMSelfRefreshDuringVBlank[DC__NUM_DPP__MAX];
677 	double VRatioPrefetchY[DC__NUM_DPP__MAX];
678 	double VRatioPrefetchC[DC__NUM_DPP__MAX];
679 	double DestinationLinesForPrefetch[DC__NUM_DPP__MAX];
680 	double DestinationLinesToRequestVMInVBlank[DC__NUM_DPP__MAX];
681 	double DestinationLinesToRequestRowInVBlank[DC__NUM_DPP__MAX];
682 	double MinTTUVBlank[DC__NUM_DPP__MAX];
683 	double BytePerPixelDETY[DC__NUM_DPP__MAX];
684 	double BytePerPixelDETC[DC__NUM_DPP__MAX];
685 	unsigned int SwathWidthY[DC__NUM_DPP__MAX];
686 	unsigned int SwathWidthSingleDPPY[DC__NUM_DPP__MAX];
687 	double CursorRequestDeliveryTime[DC__NUM_DPP__MAX];
688 	double CursorRequestDeliveryTimePrefetch[DC__NUM_DPP__MAX];
689 	double ReadBandwidthPlaneLuma[DC__NUM_DPP__MAX];
690 	double ReadBandwidthPlaneChroma[DC__NUM_DPP__MAX];
691 	double DisplayPipeLineDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
692 	double DisplayPipeLineDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
693 	double DisplayPipeRequestDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
694 	double DisplayPipeRequestDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
695 	double PixelPTEBytesPerRow[DC__NUM_DPP__MAX];
696 	double PDEAndMetaPTEBytesFrame[DC__NUM_DPP__MAX];
697 	double MetaRowByte[DC__NUM_DPP__MAX];
698 	double PrefetchSourceLinesY[DC__NUM_DPP__MAX];
699 	double RequiredPrefetchPixDataBWLuma[DC__NUM_DPP__MAX];
700 	double RequiredPrefetchPixDataBWChroma[DC__NUM_DPP__MAX];
701 	double PrefetchSourceLinesC[DC__NUM_DPP__MAX];
702 	double PSCL_THROUGHPUT_LUMA[DC__NUM_DPP__MAX];
703 	double PSCL_THROUGHPUT_CHROMA[DC__NUM_DPP__MAX];
704 	double DSCCLK_calculated[DC__NUM_DPP__MAX];
705 	unsigned int DSCDelay[DC__NUM_DPP__MAX];
706 	unsigned int MaxVStartupLines[DC__NUM_DPP__MAX];
707 	double DPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
708 	double DPPCLK[DC__NUM_DPP__MAX];
709 	unsigned int DCCYMaxUncompressedBlock[DC__NUM_DPP__MAX];
710 	unsigned int DCCYMaxCompressedBlock[DC__NUM_DPP__MAX];
711 	unsigned int DCCYIndependent64ByteBlock[DC__NUM_DPP__MAX];
712 	double MaximumDCCCompressionYSurface[DC__NUM_DPP__MAX];
713 	unsigned int BlockHeight256BytesY[DC__NUM_DPP__MAX];
714 	unsigned int BlockHeight256BytesC[DC__NUM_DPP__MAX];
715 	unsigned int BlockWidth256BytesY[DC__NUM_DPP__MAX];
716 	unsigned int BlockWidth256BytesC[DC__NUM_DPP__MAX];
717 	double XFCSlaveVUpdateOffset[DC__NUM_DPP__MAX];
718 	double XFCSlaveVupdateWidth[DC__NUM_DPP__MAX];
719 	double XFCSlaveVReadyOffset[DC__NUM_DPP__MAX];
720 	double XFCTransferDelay[DC__NUM_DPP__MAX];
721 	double XFCPrechargeDelay[DC__NUM_DPP__MAX];
722 	double XFCRemoteSurfaceFlipLatency[DC__NUM_DPP__MAX];
723 	double XFCPrefetchMargin[DC__NUM_DPP__MAX];
724 	unsigned int dpte_row_width_luma_ub[DC__NUM_DPP__MAX];
725 	unsigned int dpte_row_width_chroma_ub[DC__NUM_DPP__MAX];
726 	double FullDETBufferingTimeY[DC__NUM_DPP__MAX];                     // WM
727 	double FullDETBufferingTimeC[DC__NUM_DPP__MAX];                     // WM
728 	double DST_Y_PER_PTE_ROW_NOM_L[DC__NUM_DPP__MAX];
729 	double DST_Y_PER_PTE_ROW_NOM_C[DC__NUM_DPP__MAX];
730 	double DST_Y_PER_META_ROW_NOM_L[DC__NUM_DPP__MAX];
731 	double TimePerMetaChunkNominal[DC__NUM_DPP__MAX];
732 	double TimePerMetaChunkVBlank[DC__NUM_DPP__MAX];
733 	double TimePerMetaChunkFlip[DC__NUM_DPP__MAX];
734 	unsigned int swath_width_luma_ub[DC__NUM_DPP__MAX];
735 	unsigned int swath_width_chroma_ub[DC__NUM_DPP__MAX];
736 	unsigned int PixelPTEReqWidthY[DC__NUM_DPP__MAX];
737 	unsigned int PixelPTEReqHeightY[DC__NUM_DPP__MAX];
738 	unsigned int PTERequestSizeY[DC__NUM_DPP__MAX];
739 	unsigned int PixelPTEReqWidthC[DC__NUM_DPP__MAX];
740 	unsigned int PixelPTEReqHeightC[DC__NUM_DPP__MAX];
741 	unsigned int PTERequestSizeC[DC__NUM_DPP__MAX];
742 	double time_per_pte_group_nom_luma[DC__NUM_DPP__MAX];
743 	double time_per_pte_group_nom_chroma[DC__NUM_DPP__MAX];
744 	double time_per_pte_group_vblank_luma[DC__NUM_DPP__MAX];
745 	double time_per_pte_group_vblank_chroma[DC__NUM_DPP__MAX];
746 	double time_per_pte_group_flip_luma[DC__NUM_DPP__MAX];
747 	double time_per_pte_group_flip_chroma[DC__NUM_DPP__MAX];
748 	double TimePerVMGroupVBlank[DC__NUM_DPP__MAX];
749 	double TimePerVMGroupFlip[DC__NUM_DPP__MAX];
750 	double TimePerVMRequestVBlank[DC__NUM_DPP__MAX];
751 	double TimePerVMRequestFlip[DC__NUM_DPP__MAX];
752 	unsigned int dpde0_bytes_per_frame_ub_l[DC__NUM_DPP__MAX];
753 	unsigned int meta_pte_bytes_per_frame_ub_l[DC__NUM_DPP__MAX];
754 	unsigned int dpde0_bytes_per_frame_ub_c[DC__NUM_DPP__MAX];
755 	unsigned int meta_pte_bytes_per_frame_ub_c[DC__NUM_DPP__MAX];
756 	double LinesToFinishSwathTransferStutterCriticalPlane;
757 	unsigned int BytePerPixelYCriticalPlane;
758 	double SwathWidthYCriticalPlane;
759 	double LinesInDETY[DC__NUM_DPP__MAX];
760 	double LinesInDETYRoundedDownToSwath[DC__NUM_DPP__MAX];
761 
762 	unsigned int SwathWidthSingleDPPC[DC__NUM_DPP__MAX];
763 	unsigned int SwathWidthC[DC__NUM_DPP__MAX];
764 	unsigned int BytePerPixelY[DC__NUM_DPP__MAX];
765 	unsigned int BytePerPixelC[DC__NUM_DPP__MAX];
766 	long dummyinteger1;
767 	long dummyinteger2;
768 	double FinalDRAMClockChangeLatency;
769 	double Tdmdl_vm[DC__NUM_DPP__MAX];
770 	double Tdmdl[DC__NUM_DPP__MAX];
771 	unsigned int ThisVStartup;
772 	bool WritebackAllowDRAMClockChangeEndPosition[DC__NUM_DPP__MAX];
773 	double DST_Y_PER_META_ROW_NOM_C[DC__NUM_DPP__MAX];
774 	double TimePerChromaMetaChunkNominal[DC__NUM_DPP__MAX];
775 	double TimePerChromaMetaChunkVBlank[DC__NUM_DPP__MAX];
776 	double TimePerChromaMetaChunkFlip[DC__NUM_DPP__MAX];
777 	unsigned int DCCCMaxUncompressedBlock[DC__NUM_DPP__MAX];
778 	unsigned int DCCCMaxCompressedBlock[DC__NUM_DPP__MAX];
779 	unsigned int DCCCIndependent64ByteBlock[DC__NUM_DPP__MAX];
780 	double VStartupMargin;
781 
782 	/* Missing from VBA */
783 	unsigned int MaximumMaxVStartupLines;
784 	double FabricAndDRAMBandwidth;
785 	double LinesInDETLuma;
786 	double LinesInDETChroma;
787 	unsigned int ImmediateFlipBytes[DC__NUM_DPP__MAX];
788 	unsigned int LinesInDETC[DC__NUM_DPP__MAX];
789 	unsigned int LinesInDETCRoundedDownToSwath[DC__NUM_DPP__MAX];
790 	double UrgentLatencySupportUsPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
791 	double UrgentLatencySupportUs[DC__NUM_DPP__MAX];
792 	double FabricAndDRAMBandwidthPerState[DC__VOLTAGE_STATES + 1];
793 	bool UrgentLatencySupport[DC__VOLTAGE_STATES + 1][2];
794 	unsigned int SwathWidthYPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
795 	unsigned int SwathHeightYPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
796 	double qual_row_bw[DC__NUM_DPP__MAX];
797 	double prefetch_row_bw[DC__NUM_DPP__MAX];
798 	double prefetch_vm_bw[DC__NUM_DPP__MAX];
799 
800 	double PTEGroupSize;
801 	unsigned int PDEProcessingBufIn64KBReqs;
802 
803 	double MaxTotalVActiveRDBandwidth;
804 	bool DoUrgentLatencyAdjustment;
805 	double UrgentLatencyAdjustmentFabricClockComponent;
806 	double UrgentLatencyAdjustmentFabricClockReference;
807 	double MinUrgentLatencySupportUs;
808 	double MinFullDETBufferingTime;
809 	double AverageReadBandwidthGBytePerSecond;
810 	bool   FirstMainPlane;
811 
812 	unsigned int ViewportWidthChroma[DC__NUM_DPP__MAX];
813 	unsigned int ViewportHeightChroma[DC__NUM_DPP__MAX];
814 	double HRatioChroma[DC__NUM_DPP__MAX];
815 	double VRatioChroma[DC__NUM_DPP__MAX];
816 	long WritebackSourceWidth[DC__NUM_DPP__MAX];
817 
818 	bool ModeIsSupported;
819 	bool ODMCombine4To1Supported;
820 
821 	unsigned int SurfaceWidthY[DC__NUM_DPP__MAX];
822 	unsigned int SurfaceWidthC[DC__NUM_DPP__MAX];
823 	unsigned int SurfaceHeightY[DC__NUM_DPP__MAX];
824 	unsigned int SurfaceHeightC[DC__NUM_DPP__MAX];
825 	unsigned int WritebackHTaps[DC__NUM_DPP__MAX];
826 	unsigned int WritebackVTaps[DC__NUM_DPP__MAX];
827 	bool DSCEnable[DC__NUM_DPP__MAX];
828 
829 	double DRAMClockChangeLatencyOverride;
830 
831 	double GPUVMMinPageSize;
832 	double HostVMMinPageSize;
833 
834 	bool   MPCCombineEnable[DC__NUM_DPP__MAX];
835 	unsigned int HostVMMaxNonCachedPageTableLevels;
836 	bool   DynamicMetadataVMEnabled;
837 	double       WritebackInterfaceBufferSize;
838 	double       WritebackLineBufferSize;
839 
840 	double DCCRateLuma[DC__NUM_DPP__MAX];
841 	double DCCRateChroma[DC__NUM_DPP__MAX];
842 
843 	double PHYCLKD18PerState[DC__VOLTAGE_STATES + 1];
844 	int MinVoltageLevel;
845 	int MaxVoltageLevel;
846 
847 	bool WritebackSupportInterleaveAndUsingWholeBufferForASingleStream;
848 	bool NumberOfHDMIFRLSupport;
849 	unsigned int MaxNumHDMIFRLOutputs;
850 	int    AudioSampleRate[DC__NUM_DPP__MAX];
851 	int    AudioSampleLayout[DC__NUM_DPP__MAX];
852 };
853 
854 bool CalculateMinAndMaxPrefetchMode(
855 		enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank,
856 		unsigned int *MinPrefetchMode,
857 		unsigned int *MaxPrefetchMode);
858 
859 double CalculateWriteBackDISPCLK(
860 		enum source_format_class WritebackPixelFormat,
861 		double PixelClock,
862 		double WritebackHRatio,
863 		double WritebackVRatio,
864 		unsigned int WritebackLumaHTaps,
865 		unsigned int WritebackLumaVTaps,
866 		unsigned int WritebackChromaHTaps,
867 		unsigned int WritebackChromaVTaps,
868 		double WritebackDestinationWidth,
869 		unsigned int HTotal,
870 		unsigned int WritebackChromaLineBufferWidth);
871 
872 #endif /* _DML2_DISPLAY_MODE_VBA_H_ */
873 #endif
874