Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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
 33struct display_mode_lib;
 34
 35void 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
 39dml_get_attr_decl(clk_dcf_deepsleep);
 40dml_get_attr_decl(wm_urgent);
 41dml_get_attr_decl(wm_memory_trip);
 42dml_get_attr_decl(wm_writeback_urgent);
 43dml_get_attr_decl(wm_stutter_exit);
 44dml_get_attr_decl(wm_stutter_enter_exit);
 45dml_get_attr_decl(wm_dram_clock_change);
 46dml_get_attr_decl(wm_writeback_dram_clock_change);
 47dml_get_attr_decl(wm_xfc_underflow);
 48dml_get_attr_decl(stutter_efficiency_no_vblank);
 49dml_get_attr_decl(stutter_efficiency);
 50dml_get_attr_decl(urgent_latency);
 51dml_get_attr_decl(urgent_extra_latency);
 52dml_get_attr_decl(nonurgent_latency);
 53dml_get_attr_decl(dram_clock_change_latency);
 54dml_get_attr_decl(dispclk_calculated);
 55dml_get_attr_decl(total_data_read_bw);
 56dml_get_attr_decl(return_bw);
 57dml_get_attr_decl(tcalc);
 58dml_get_attr_decl(fraction_of_urgent_bandwidth);
 59dml_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
 63dml_get_pipe_attr_decl(dsc_delay);
 64dml_get_pipe_attr_decl(dppclk_calculated);
 65dml_get_pipe_attr_decl(dscclk_calculated);
 66dml_get_pipe_attr_decl(min_ttu_vblank);
 67dml_get_pipe_attr_decl(vratio_prefetch_l);
 68dml_get_pipe_attr_decl(vratio_prefetch_c);
 69dml_get_pipe_attr_decl(dst_x_after_scaler);
 70dml_get_pipe_attr_decl(dst_y_after_scaler);
 71dml_get_pipe_attr_decl(dst_y_per_vm_vblank);
 72dml_get_pipe_attr_decl(dst_y_per_row_vblank);
 73dml_get_pipe_attr_decl(dst_y_prefetch);
 74dml_get_pipe_attr_decl(dst_y_per_vm_flip);
 75dml_get_pipe_attr_decl(dst_y_per_row_flip);
 76dml_get_pipe_attr_decl(xfc_transfer_delay);
 77dml_get_pipe_attr_decl(xfc_precharge_delay);
 78dml_get_pipe_attr_decl(xfc_remote_surface_flip_latency);
 79dml_get_pipe_attr_decl(xfc_prefetch_margin);
 80dml_get_pipe_attr_decl(refcyc_per_vm_group_vblank);
 81dml_get_pipe_attr_decl(refcyc_per_vm_group_flip);
 82dml_get_pipe_attr_decl(refcyc_per_vm_req_vblank);
 83dml_get_pipe_attr_decl(refcyc_per_vm_req_flip);
 84
 85unsigned 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
 91double 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);
 95double 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);
 99double get_total_prefetch_bw(
100		struct display_mode_lib *mode_lib,
101		const display_e2e_pipe_params_st *pipes,
102		unsigned int num_pipes);
103unsigned 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
108void PixelClockAdjustmentForProgressiveToInterlaceUnit(struct display_mode_lib *mode_lib);
109
110bool 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
120struct 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 SupportGFX7CompatibleTilingIn32bppAnd64bpp;
391	double MaxHSCLRatio;
392	double MaxVSCLRatio;
393	unsigned int MaxNumWriteback;
394	bool WritebackLumaAndChromaScalingSupported;
395	bool Cursor64BppSupport;
396	double DCFCLKPerState[DC__VOLTAGE_STATES + 1];
397	double FabricClockPerState[DC__VOLTAGE_STATES + 1];
398	double SOCCLKPerState[DC__VOLTAGE_STATES + 1];
399	double PHYCLKPerState[DC__VOLTAGE_STATES + 1];
400	double DTBCLKPerState[DC__VOLTAGE_STATES + 1];
401	double MaxDppclk[DC__VOLTAGE_STATES + 1];
402	double MaxDSCCLK[DC__VOLTAGE_STATES + 1];
403	double DRAMSpeedPerState[DC__VOLTAGE_STATES + 1];
404	double MaxDispclk[DC__VOLTAGE_STATES + 1];
405	int VoltageOverrideLevel;
406
407	/*outputs*/
408	bool ScaleRatioAndTapsSupport;
409	bool SourceFormatPixelAndScanSupport;
410	double TotalBandwidthConsumedGBytePerSecond;
411	bool DCCEnabledInAnyPlane;
412	bool WritebackLatencySupport;
413	bool WritebackModeSupport;
414	bool Writeback10bpc420Supported;
415	bool BandwidthSupport[DC__VOLTAGE_STATES + 1];
416	unsigned int TotalNumberOfActiveWriteback;
417	double CriticalPoint;
418	double ReturnBWToDCNPerState;
419	bool IsErrorResult[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
420	bool prefetch_vm_bw_valid;
421	bool prefetch_row_bw_valid;
422	bool NumberOfOTGSupport;
423	bool NonsupportedDSCInputBPC;
424	bool WritebackScaleRatioAndTapsSupport;
425	bool CursorSupport;
426	bool PitchSupport;
427	enum dm_validation_status ValidationStatus[DC__VOLTAGE_STATES + 1];
428
429	double WritebackLineBufferLumaBufferSize;
430	double WritebackLineBufferChromaBufferSize;
431	double WritebackMinHSCLRatio;
432	double WritebackMinVSCLRatio;
433	double WritebackMaxHSCLRatio;
434	double WritebackMaxVSCLRatio;
435	double WritebackMaxHSCLTaps;
436	double WritebackMaxVSCLTaps;
437	unsigned int MaxNumDPP;
438	unsigned int MaxNumOTG;
439	double CursorBufferSize;
440	double CursorChunkSize;
441	unsigned int Mode;
442	double OutputLinkDPLanes[DC__NUM_DPP__MAX];
443	double ForcedOutputLinkBPP[DC__NUM_DPP__MAX]; // Mode Support only
444	double ImmediateFlipBW[DC__NUM_DPP__MAX];
445	double MaxMaxVStartup;
446
447	double WritebackLumaVExtra;
448	double WritebackChromaVExtra;
449	double WritebackRequiredDISPCLK;
450	double MaximumSwathWidthSupport;
451	double MaximumSwathWidthInDETBuffer;
452	double MaximumSwathWidthInLineBuffer;
453	double MaxDispclkRoundedDownToDFSGranularity;
454	double MaxDppclkRoundedDownToDFSGranularity;
455	double PlaneRequiredDISPCLKWithoutODMCombine;
456	double PlaneRequiredDISPCLKWithODMCombine;
457	double PlaneRequiredDISPCLK;
458	double TotalNumberOfActiveOTG;
459	double FECOverhead;
460	double EffectiveFECOverhead;
461	double Outbpp;
462	unsigned int OutbppDSC;
463	double TotalDSCUnitsRequired;
464	double bpp;
465	unsigned int slices;
466	double SwathWidthGranularityY;
467	double RoundedUpMaxSwathSizeBytesY;
468	double SwathWidthGranularityC;
469	double RoundedUpMaxSwathSizeBytesC;
470	double EffectiveDETLBLinesLuma;
471	double EffectiveDETLBLinesChroma;
472	double ProjectedDCFCLKDeepSleep;
473	double PDEAndMetaPTEBytesPerFrameY;
474	double PDEAndMetaPTEBytesPerFrameC;
475	unsigned int MetaRowBytesY;
476	unsigned int MetaRowBytesC;
477	unsigned int DPTEBytesPerRowC;
478	unsigned int DPTEBytesPerRowY;
479	double ExtraLatency;
480	double TimeCalc;
481	double TWait;
482	double MaximumReadBandwidthWithPrefetch;
483	double MaximumReadBandwidthWithoutPrefetch;
484	double total_dcn_read_bw_with_flip;
485	double total_dcn_read_bw_with_flip_no_urgent_burst;
486	double FractionOfUrgentBandwidth;
487	double FractionOfUrgentBandwidthImmediateFlip; // Mode Support debugging output
488
489	/* ms locals */
490	double IdealSDPPortBandwidthPerState[DC__VOLTAGE_STATES + 1];
491	unsigned int NoOfDPP[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
492	int NoOfDPPThisState[DC__NUM_DPP__MAX];
493	bool ODMCombineEnablePerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
494	enum odm_combine_mode ODMCombineTypeEnablePerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
495	unsigned int SwathWidthYThisState[DC__NUM_DPP__MAX];
496	unsigned int SwathHeightCPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
497	unsigned int SwathHeightYThisState[DC__NUM_DPP__MAX];
498	unsigned int SwathHeightCThisState[DC__NUM_DPP__MAX];
499	double VRatioPreY[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
500	double VRatioPreC[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
501	double RequiredPrefetchPixelDataBWLuma[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
502	double RequiredPrefetchPixelDataBWChroma[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
503	double RequiredDPPCLK[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
504	double RequiredDPPCLKThisState[DC__NUM_DPP__MAX];
505	bool PTEBufferSizeNotExceededY[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
506	bool PTEBufferSizeNotExceededC[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
507	bool BandwidthWithoutPrefetchSupported[DC__VOLTAGE_STATES + 1];
508	bool PrefetchSupported[DC__VOLTAGE_STATES + 1][2];
509	bool VRatioInPrefetchSupported[DC__VOLTAGE_STATES + 1][2];
510	double RequiredDISPCLK[DC__VOLTAGE_STATES + 1][2];
511	bool DISPCLK_DPPCLK_Support[DC__VOLTAGE_STATES + 1][2];
512	bool TotalAvailablePipesSupport[DC__VOLTAGE_STATES + 1][2];
513	unsigned int TotalNumberOfActiveDPP[DC__VOLTAGE_STATES + 1][2];
514	unsigned int TotalNumberOfDCCActiveDPP[DC__VOLTAGE_STATES + 1][2];
515	bool ModeSupport[DC__VOLTAGE_STATES + 1][2];
516	double ReturnBWPerState[DC__VOLTAGE_STATES + 1];
517	bool DIOSupport[DC__VOLTAGE_STATES + 1];
518	bool NotEnoughDSCUnits[DC__VOLTAGE_STATES + 1];
519	bool DSCCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES + 1];
520	bool DTBCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES + 1];
521	double UrgentRoundTripAndOutOfOrderLatencyPerState[DC__VOLTAGE_STATES + 1];
522	bool ROBSupport[DC__VOLTAGE_STATES + 1];
523	bool PTEBufferSizeNotExceeded[DC__VOLTAGE_STATES + 1][2];
524	bool TotalVerticalActiveBandwidthSupport[DC__VOLTAGE_STATES + 1];
525	double MaxTotalVerticalActiveAvailableBandwidth[DC__VOLTAGE_STATES + 1];
526	double PrefetchBW[DC__NUM_DPP__MAX];
527	double PDEAndMetaPTEBytesPerFrame[DC__NUM_DPP__MAX];
528	double MetaRowBytes[DC__NUM_DPP__MAX];
529	double DPTEBytesPerRow[DC__NUM_DPP__MAX];
530	double PrefetchLinesY[DC__NUM_DPP__MAX];
531	double PrefetchLinesC[DC__NUM_DPP__MAX];
532	unsigned int MaxNumSwY[DC__NUM_DPP__MAX];
533	unsigned int MaxNumSwC[DC__NUM_DPP__MAX];
534	double PrefillY[DC__NUM_DPP__MAX];
535	double PrefillC[DC__NUM_DPP__MAX];
536	double LineTimesForPrefetch[DC__NUM_DPP__MAX];
537	double LinesForMetaPTE[DC__NUM_DPP__MAX];
538	double LinesForMetaAndDPTERow[DC__NUM_DPP__MAX];
539	double MinDPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
540	unsigned int SwathWidthYSingleDPP[DC__NUM_DPP__MAX];
541	double BytePerPixelInDETY[DC__NUM_DPP__MAX];
542	double BytePerPixelInDETC[DC__NUM_DPP__MAX];
543	bool RequiresDSC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
544	unsigned int NumberOfDSCSlice[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
545	double RequiresFEC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
546	double OutputBppPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
547	double DSCDelayPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
548	bool ViewportSizeSupport[DC__VOLTAGE_STATES + 1];
549	unsigned int Read256BlockHeightY[DC__NUM_DPP__MAX];
550	unsigned int Read256BlockWidthY[DC__NUM_DPP__MAX];
551	unsigned int Read256BlockHeightC[DC__NUM_DPP__MAX];
552	unsigned int Read256BlockWidthC[DC__NUM_DPP__MAX];
553	double MaxSwathHeightY[DC__NUM_DPP__MAX];
554	double MaxSwathHeightC[DC__NUM_DPP__MAX];
555	double MinSwathHeightY[DC__NUM_DPP__MAX];
556	double MinSwathHeightC[DC__NUM_DPP__MAX];
557	double ReadBandwidthLuma[DC__NUM_DPP__MAX];
558	double ReadBandwidthChroma[DC__NUM_DPP__MAX];
559	double ReadBandwidth[DC__NUM_DPP__MAX];
560	double WriteBandwidth[DC__NUM_DPP__MAX];
561	double PSCL_FACTOR[DC__NUM_DPP__MAX];
562	double PSCL_FACTOR_CHROMA[DC__NUM_DPP__MAX];
563	double MaximumVStartup[DC__NUM_DPP__MAX];
564	unsigned int MacroTileWidthY[DC__NUM_DPP__MAX];
565	unsigned int MacroTileWidthC[DC__NUM_DPP__MAX];
566	double AlignedDCCMetaPitch[DC__NUM_DPP__MAX];
567	double AlignedYPitch[DC__NUM_DPP__MAX];
568	double AlignedCPitch[DC__NUM_DPP__MAX];
569	double MaximumSwathWidth[DC__NUM_DPP__MAX];
570	double cursor_bw[DC__NUM_DPP__MAX];
571	double cursor_bw_pre[DC__NUM_DPP__MAX];
572	double Tno_bw[DC__NUM_DPP__MAX];
573	double prefetch_vmrow_bw[DC__NUM_DPP__MAX];
574	double DestinationLinesToRequestVMInImmediateFlip[DC__NUM_DPP__MAX];
575	double DestinationLinesToRequestRowInImmediateFlip[DC__NUM_DPP__MAX];
576	double final_flip_bw[DC__NUM_DPP__MAX];
577	bool ImmediateFlipSupportedForState[DC__VOLTAGE_STATES + 1][2];
578	double WritebackDelay[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
579	unsigned int vm_group_bytes[DC__NUM_DPP__MAX];
580	long dpte_group_bytes[DC__NUM_DPP__MAX];
581	unsigned int dpte_row_height[DC__NUM_DPP__MAX];
582	unsigned int meta_req_height[DC__NUM_DPP__MAX];
583	unsigned int meta_req_width[DC__NUM_DPP__MAX];
584	unsigned int meta_row_height[DC__NUM_DPP__MAX];
585	unsigned int meta_row_width[DC__NUM_DPP__MAX];
586	unsigned int dpte_row_height_chroma[DC__NUM_DPP__MAX];
587	unsigned int meta_req_height_chroma[DC__NUM_DPP__MAX];
588	unsigned int meta_req_width_chroma[DC__NUM_DPP__MAX];
589	unsigned int meta_row_height_chroma[DC__NUM_DPP__MAX];
590	unsigned int meta_row_width_chroma[DC__NUM_DPP__MAX];
591	bool ImmediateFlipSupportedForPipe[DC__NUM_DPP__MAX];
592	double meta_row_bw[DC__NUM_DPP__MAX];
593	double dpte_row_bw[DC__NUM_DPP__MAX];
594	double DisplayPipeLineDeliveryTimeLuma[DC__NUM_DPP__MAX];                     // WM
595	double DisplayPipeLineDeliveryTimeChroma[DC__NUM_DPP__MAX];                     // WM
596	double DisplayPipeRequestDeliveryTimeLuma[DC__NUM_DPP__MAX];
597	double DisplayPipeRequestDeliveryTimeChroma[DC__NUM_DPP__MAX];
598	enum clock_change_support DRAMClockChangeSupport[DC__VOLTAGE_STATES + 1][2];
599	double UrgentBurstFactorCursor[DC__NUM_DPP__MAX];
600	double UrgentBurstFactorCursorPre[DC__NUM_DPP__MAX];
601	double UrgentBurstFactorLuma[DC__NUM_DPP__MAX];
602	double UrgentBurstFactorLumaPre[DC__NUM_DPP__MAX];
603	double UrgentBurstFactorChroma[DC__NUM_DPP__MAX];
604	double UrgentBurstFactorChromaPre[DC__NUM_DPP__MAX];
605
606	bool           MPCCombine[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
607	double         SwathWidthCSingleDPP[DC__NUM_DPP__MAX];
608	double         MaximumSwathWidthInLineBufferLuma;
609	double         MaximumSwathWidthInLineBufferChroma;
610	double         MaximumSwathWidthLuma[DC__NUM_DPP__MAX];
611	double         MaximumSwathWidthChroma[DC__NUM_DPP__MAX];
612	bool odm_combine_dummy[DC__NUM_DPP__MAX];
613	enum odm_combine_mode odm_combine_mode_dummy[DC__NUM_DPP__MAX];
614	double         dummy1[DC__NUM_DPP__MAX];
615	double         dummy2[DC__NUM_DPP__MAX];
616	double         dummy3[DC__NUM_DPP__MAX];
617	double         dummy4[DC__NUM_DPP__MAX];
618	double         dummy5;
619	double         dummy6;
620	double         dummy7[DC__NUM_DPP__MAX];
621	double         dummy8[DC__NUM_DPP__MAX];
622	unsigned int        dummyinteger1ms[DC__NUM_DPP__MAX];
623	unsigned int        dummyinteger2ms[DC__NUM_DPP__MAX];
624	unsigned int        dummyinteger3[DC__NUM_DPP__MAX];
625	unsigned int        dummyinteger4;
626	unsigned int        dummyinteger5;
627	unsigned int        dummyinteger6;
628	unsigned int        dummyinteger7;
629	unsigned int        dummyinteger8;
630	unsigned int        dummyinteger9;
631	unsigned int        dummyinteger10;
632	unsigned int        dummyinteger11;
633	unsigned int        dummyinteger12;
634	unsigned int        dummyintegerarr1[DC__NUM_DPP__MAX];
635	unsigned int        dummyintegerarr2[DC__NUM_DPP__MAX];
636	unsigned int        dummyintegerarr3[DC__NUM_DPP__MAX];
637	unsigned int        dummyintegerarr4[DC__NUM_DPP__MAX];
638	long                dummylongarr1[DC__NUM_DPP__MAX];
639	bool           dummysinglestring;
640	bool           SingleDPPViewportSizeSupportPerPlane[DC__NUM_DPP__MAX];
641	double         PlaneRequiredDISPCLKWithODMCombine2To1;
642	double         PlaneRequiredDISPCLKWithODMCombine4To1;
643	unsigned int   TotalNumberOfSingleDPPPlanes[DC__VOLTAGE_STATES + 1][2];
644	bool           LinkDSCEnable;
645	bool           ODMCombine4To1SupportCheckOK[DC__VOLTAGE_STATES + 1];
646	bool ODMCombineEnableThisState[DC__NUM_DPP__MAX];
647	enum odm_combine_mode ODMCombineEnableTypeThisState[DC__NUM_DPP__MAX];
648	unsigned int   SwathWidthCThisState[DC__NUM_DPP__MAX];
649	bool           ViewportSizeSupportPerPlane[DC__NUM_DPP__MAX];
650	double         AlignedDCCMetaPitchY[DC__NUM_DPP__MAX];
651	double         AlignedDCCMetaPitchC[DC__NUM_DPP__MAX];
652
653	unsigned int NotEnoughUrgentLatencyHiding;
654	unsigned int NotEnoughUrgentLatencyHidingPre;
655	long PTEBufferSizeInRequestsForLuma;
656	long PTEBufferSizeInRequestsForChroma;
657
658	// Missing from VBA
659	long dpte_group_bytes_chroma;
660	unsigned int vm_group_bytes_chroma;
661	double dst_x_after_scaler;
662	double dst_y_after_scaler;
663	unsigned int VStartupRequiredWhenNotEnoughTimeForDynamicMetadata;
664
665	/* perf locals*/
666	double PrefetchBandwidth[DC__NUM_DPP__MAX];
667	double VInitPreFillY[DC__NUM_DPP__MAX];
668	double VInitPreFillC[DC__NUM_DPP__MAX];
669	unsigned int MaxNumSwathY[DC__NUM_DPP__MAX];
670	unsigned int MaxNumSwathC[DC__NUM_DPP__MAX];
671	unsigned int VStartup[DC__NUM_DPP__MAX];
672	double DSTYAfterScaler[DC__NUM_DPP__MAX];
673	double DSTXAfterScaler[DC__NUM_DPP__MAX];
674	bool AllowDRAMClockChangeDuringVBlank[DC__NUM_DPP__MAX];
675	bool AllowDRAMSelfRefreshDuringVBlank[DC__NUM_DPP__MAX];
676	double VRatioPrefetchY[DC__NUM_DPP__MAX];
677	double VRatioPrefetchC[DC__NUM_DPP__MAX];
678	double DestinationLinesForPrefetch[DC__NUM_DPP__MAX];
679	double DestinationLinesToRequestVMInVBlank[DC__NUM_DPP__MAX];
680	double DestinationLinesToRequestRowInVBlank[DC__NUM_DPP__MAX];
681	double MinTTUVBlank[DC__NUM_DPP__MAX];
682	double BytePerPixelDETY[DC__NUM_DPP__MAX];
683	double BytePerPixelDETC[DC__NUM_DPP__MAX];
684	unsigned int SwathWidthY[DC__NUM_DPP__MAX];
685	unsigned int SwathWidthSingleDPPY[DC__NUM_DPP__MAX];
686	double CursorRequestDeliveryTime[DC__NUM_DPP__MAX];
687	double CursorRequestDeliveryTimePrefetch[DC__NUM_DPP__MAX];
688	double ReadBandwidthPlaneLuma[DC__NUM_DPP__MAX];
689	double ReadBandwidthPlaneChroma[DC__NUM_DPP__MAX];
690	double DisplayPipeLineDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
691	double DisplayPipeLineDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
692	double DisplayPipeRequestDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
693	double DisplayPipeRequestDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
694	double PixelPTEBytesPerRow[DC__NUM_DPP__MAX];
695	double PDEAndMetaPTEBytesFrame[DC__NUM_DPP__MAX];
696	double MetaRowByte[DC__NUM_DPP__MAX];
697	double PrefetchSourceLinesY[DC__NUM_DPP__MAX];
698	double RequiredPrefetchPixDataBWLuma[DC__NUM_DPP__MAX];
699	double RequiredPrefetchPixDataBWChroma[DC__NUM_DPP__MAX];
700	double PrefetchSourceLinesC[DC__NUM_DPP__MAX];
701	double PSCL_THROUGHPUT_LUMA[DC__NUM_DPP__MAX];
702	double PSCL_THROUGHPUT_CHROMA[DC__NUM_DPP__MAX];
703	double DSCCLK_calculated[DC__NUM_DPP__MAX];
704	unsigned int DSCDelay[DC__NUM_DPP__MAX];
705	unsigned int MaxVStartupLines[DC__NUM_DPP__MAX];
706	double DPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
707	double DPPCLK[DC__NUM_DPP__MAX];
708	unsigned int DCCYMaxUncompressedBlock[DC__NUM_DPP__MAX];
709	unsigned int DCCYMaxCompressedBlock[DC__NUM_DPP__MAX];
710	unsigned int DCCYIndependent64ByteBlock[DC__NUM_DPP__MAX];
711	double MaximumDCCCompressionYSurface[DC__NUM_DPP__MAX];
712	unsigned int BlockHeight256BytesY[DC__NUM_DPP__MAX];
713	unsigned int BlockHeight256BytesC[DC__NUM_DPP__MAX];
714	unsigned int BlockWidth256BytesY[DC__NUM_DPP__MAX];
715	unsigned int BlockWidth256BytesC[DC__NUM_DPP__MAX];
716	double XFCSlaveVUpdateOffset[DC__NUM_DPP__MAX];
717	double XFCSlaveVupdateWidth[DC__NUM_DPP__MAX];
718	double XFCSlaveVReadyOffset[DC__NUM_DPP__MAX];
719	double XFCTransferDelay[DC__NUM_DPP__MAX];
720	double XFCPrechargeDelay[DC__NUM_DPP__MAX];
721	double XFCRemoteSurfaceFlipLatency[DC__NUM_DPP__MAX];
722	double XFCPrefetchMargin[DC__NUM_DPP__MAX];
723	unsigned int dpte_row_width_luma_ub[DC__NUM_DPP__MAX];
724	unsigned int dpte_row_width_chroma_ub[DC__NUM_DPP__MAX];
725	double FullDETBufferingTimeY[DC__NUM_DPP__MAX];                     // WM
726	double FullDETBufferingTimeC[DC__NUM_DPP__MAX];                     // WM
727	double DST_Y_PER_PTE_ROW_NOM_L[DC__NUM_DPP__MAX];
728	double DST_Y_PER_PTE_ROW_NOM_C[DC__NUM_DPP__MAX];
729	double DST_Y_PER_META_ROW_NOM_L[DC__NUM_DPP__MAX];
730	double TimePerMetaChunkNominal[DC__NUM_DPP__MAX];
731	double TimePerMetaChunkVBlank[DC__NUM_DPP__MAX];
732	double TimePerMetaChunkFlip[DC__NUM_DPP__MAX];
733	unsigned int swath_width_luma_ub[DC__NUM_DPP__MAX];
734	unsigned int swath_width_chroma_ub[DC__NUM_DPP__MAX];
735	unsigned int PixelPTEReqWidthY[DC__NUM_DPP__MAX];
736	unsigned int PixelPTEReqHeightY[DC__NUM_DPP__MAX];
737	unsigned int PTERequestSizeY[DC__NUM_DPP__MAX];
738	unsigned int PixelPTEReqWidthC[DC__NUM_DPP__MAX];
739	unsigned int PixelPTEReqHeightC[DC__NUM_DPP__MAX];
740	unsigned int PTERequestSizeC[DC__NUM_DPP__MAX];
741	double time_per_pte_group_nom_luma[DC__NUM_DPP__MAX];
742	double time_per_pte_group_nom_chroma[DC__NUM_DPP__MAX];
743	double time_per_pte_group_vblank_luma[DC__NUM_DPP__MAX];
744	double time_per_pte_group_vblank_chroma[DC__NUM_DPP__MAX];
745	double time_per_pte_group_flip_luma[DC__NUM_DPP__MAX];
746	double time_per_pte_group_flip_chroma[DC__NUM_DPP__MAX];
747	double TimePerVMGroupVBlank[DC__NUM_DPP__MAX];
748	double TimePerVMGroupFlip[DC__NUM_DPP__MAX];
749	double TimePerVMRequestVBlank[DC__NUM_DPP__MAX];
750	double TimePerVMRequestFlip[DC__NUM_DPP__MAX];
751	unsigned int dpde0_bytes_per_frame_ub_l[DC__NUM_DPP__MAX];
752	unsigned int meta_pte_bytes_per_frame_ub_l[DC__NUM_DPP__MAX];
753	unsigned int dpde0_bytes_per_frame_ub_c[DC__NUM_DPP__MAX];
754	unsigned int meta_pte_bytes_per_frame_ub_c[DC__NUM_DPP__MAX];
755	double LinesToFinishSwathTransferStutterCriticalPlane;
756	unsigned int BytePerPixelYCriticalPlane;
757	double SwathWidthYCriticalPlane;
758	double LinesInDETY[DC__NUM_DPP__MAX];
759	double LinesInDETYRoundedDownToSwath[DC__NUM_DPP__MAX];
760
761	unsigned int SwathWidthSingleDPPC[DC__NUM_DPP__MAX];
762	unsigned int SwathWidthC[DC__NUM_DPP__MAX];
763	unsigned int BytePerPixelY[DC__NUM_DPP__MAX];
764	unsigned int BytePerPixelC[DC__NUM_DPP__MAX];
765	long dummyinteger1;
766	long dummyinteger2;
767	double FinalDRAMClockChangeLatency;
768	double Tdmdl_vm[DC__NUM_DPP__MAX];
769	double Tdmdl[DC__NUM_DPP__MAX];
770	unsigned int ThisVStartup;
771	bool WritebackAllowDRAMClockChangeEndPosition[DC__NUM_DPP__MAX];
772	double DST_Y_PER_META_ROW_NOM_C[DC__NUM_DPP__MAX];
773	double TimePerChromaMetaChunkNominal[DC__NUM_DPP__MAX];
774	double TimePerChromaMetaChunkVBlank[DC__NUM_DPP__MAX];
775	double TimePerChromaMetaChunkFlip[DC__NUM_DPP__MAX];
776	unsigned int DCCCMaxUncompressedBlock[DC__NUM_DPP__MAX];
777	unsigned int DCCCMaxCompressedBlock[DC__NUM_DPP__MAX];
778	unsigned int DCCCIndependent64ByteBlock[DC__NUM_DPP__MAX];
779	double VStartupMargin;
780
781	/* Missing from VBA */
782	unsigned int MaximumMaxVStartupLines;
783	double FabricAndDRAMBandwidth;
784	double LinesInDETLuma;
785	double LinesInDETChroma;
786	unsigned int ImmediateFlipBytes[DC__NUM_DPP__MAX];
787	unsigned int LinesInDETC[DC__NUM_DPP__MAX];
788	unsigned int LinesInDETCRoundedDownToSwath[DC__NUM_DPP__MAX];
789	double UrgentLatencySupportUsPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
790	double UrgentLatencySupportUs[DC__NUM_DPP__MAX];
791	double FabricAndDRAMBandwidthPerState[DC__VOLTAGE_STATES + 1];
792	bool UrgentLatencySupport[DC__VOLTAGE_STATES + 1][2];
793	unsigned int SwathWidthYPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
794	unsigned int SwathHeightYPerState[DC__VOLTAGE_STATES + 1][2][DC__NUM_DPP__MAX];
795	double qual_row_bw[DC__NUM_DPP__MAX];
796	double prefetch_row_bw[DC__NUM_DPP__MAX];
797	double prefetch_vm_bw[DC__NUM_DPP__MAX];
798
799	double PTEGroupSize;
800	unsigned int PDEProcessingBufIn64KBReqs;
801
802	double MaxTotalVActiveRDBandwidth;
803	bool DoUrgentLatencyAdjustment;
804	double UrgentLatencyAdjustmentFabricClockComponent;
805	double UrgentLatencyAdjustmentFabricClockReference;
806	double MinUrgentLatencySupportUs;
807	double MinFullDETBufferingTime;
808	double AverageReadBandwidthGBytePerSecond;
809	bool   FirstMainPlane;
810
811	unsigned int ViewportWidthChroma[DC__NUM_DPP__MAX];
812	unsigned int ViewportHeightChroma[DC__NUM_DPP__MAX];
813	double HRatioChroma[DC__NUM_DPP__MAX];
814	double VRatioChroma[DC__NUM_DPP__MAX];
815	long WritebackSourceWidth[DC__NUM_DPP__MAX];
816
817	bool ModeIsSupported;
818	bool ODMCombine4To1Supported;
819
820	unsigned int SurfaceWidthY[DC__NUM_DPP__MAX];
821	unsigned int SurfaceWidthC[DC__NUM_DPP__MAX];
822	unsigned int SurfaceHeightY[DC__NUM_DPP__MAX];
823	unsigned int SurfaceHeightC[DC__NUM_DPP__MAX];
824	unsigned int WritebackHTaps[DC__NUM_DPP__MAX];
825	unsigned int WritebackVTaps[DC__NUM_DPP__MAX];
826	bool DSCEnable[DC__NUM_DPP__MAX];
827
828	double DRAMClockChangeLatencyOverride;
829
830	double GPUVMMinPageSize;
831	double HostVMMinPageSize;
832
833	bool   MPCCombineEnable[DC__NUM_DPP__MAX];
834	unsigned int HostVMMaxNonCachedPageTableLevels;
835	bool   DynamicMetadataVMEnabled;
836	double       WritebackInterfaceBufferSize;
837	double       WritebackLineBufferSize;
838
839	double DCCRateLuma[DC__NUM_DPP__MAX];
840	double DCCRateChroma[DC__NUM_DPP__MAX];
841
842	double PHYCLKD18PerState[DC__VOLTAGE_STATES + 1];
843	int MinVoltageLevel;
844	int MaxVoltageLevel;
845
846	bool WritebackSupportInterleaveAndUsingWholeBufferForASingleStream;
847	bool NumberOfHDMIFRLSupport;
848	unsigned int MaxNumHDMIFRLOutputs;
849	int    AudioSampleRate[DC__NUM_DPP__MAX];
850	int    AudioSampleLayout[DC__NUM_DPP__MAX];
851};
852
853bool CalculateMinAndMaxPrefetchMode(
854		enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank,
855		unsigned int *MinPrefetchMode,
856		unsigned int *MaxPrefetchMode);
857
858double CalculateWriteBackDISPCLK(
859		enum source_format_class WritebackPixelFormat,
860		double PixelClock,
861		double WritebackHRatio,
862		double WritebackVRatio,
863		unsigned int WritebackLumaHTaps,
864		unsigned int WritebackLumaVTaps,
865		unsigned int WritebackChromaHTaps,
866		unsigned int WritebackChromaVTaps,
867		double WritebackDestinationWidth,
868		unsigned int HTotal,
869		unsigned int WritebackChromaLineBufferWidth);
870
871#endif /* _DML2_DISPLAY_MODE_VBA_H_ */
872#endif