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