drm/amd/display: add mode support check to dml vba code
authorDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Fri, 15 Sep 2017 20:03:09 +0000 (16:03 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Sat, 21 Oct 2017 20:45:31 +0000 (16:45 -0400)
Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/display_mode_enums.h
drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h
drivers/gpu/drm/amd/display/dc/dml/dml_common_defs.c
drivers/gpu/drm/amd/display/dc/dml/dml_common_defs.h

index eebaeb1fb61cf92b2175ebfb3d4117d1cb36b342..b1ad3553f900dbbc9ed496d0e6020cc4157e5ea9 100644 (file)
@@ -26,7 +26,7 @@
 #define __DISPLAY_MODE_ENUMS_H__
 
 enum output_encoder_class {
-       dm_dp = 0, dm_hdmi = 1, dm_wb = 2
+       dm_dp = 0, dm_hdmi = 1, dm_wb = 2, dm_edp
 };
 enum output_format_class {
        dm_444 = 0, dm_420 = 1, dm_n422, dm_s422
@@ -39,7 +39,9 @@ enum source_format_class {
        dm_420_10 = 4,
        dm_422_8 = 5,
        dm_422_10 = 6,
-       dm_444_8 = 7
+       dm_444_8 = 7,
+       dm_mono_8,
+       dm_mono_16
 };
 enum output_bpc_class {
        dm_out_6 = 0, dm_out_8 = 1, dm_out_10 = 2, dm_out_12 = 3, dm_out_16 = 4
@@ -79,7 +81,9 @@ enum dm_swizzle_mode {
        dm_sw_SPARE_15 = 28,
        dm_sw_var_s_x = 29,
        dm_sw_var_d_x = 30,
-       dm_sw_64kb_r_x
+       dm_sw_64kb_r_x,
+       dm_sw_gfx7_2d_thin_lvp,
+       dm_sw_gfx7_2d_thin_gl
 };
 enum lb_depth {
        dm_lb_10 = 0, dm_lb_8 = 1, dm_lb_6 = 2, dm_lb_12 = 3, dm_lb_16
index e5b7f7042e0bc0727ab985015ea8d4e751e9fb98..27e20460c71b557f5ff5ab77a4c6f7b2a7830bbb 100644 (file)
@@ -66,6 +66,7 @@ struct _vcs_dpi_mode_evaluation_st {
 
 struct _vcs_dpi_voltage_scaling_st {
        int state;
+       double dscclk_mhz;
        double dcfclk_mhz;
        double socclk_mhz;
        double dram_speed_mhz;
@@ -131,6 +132,9 @@ struct      _vcs_dpi_ip_params_st   {
        unsigned int    writeback_chroma_line_buffer_width_pixels;
        unsigned int    max_page_table_levels;
        unsigned int    max_num_dpp;
+       unsigned int    max_num_otg;
+       unsigned int    cursor_chunk_size;
+       unsigned int    cursor_buffer_size;
        unsigned int    max_num_wb;
        unsigned int    max_dchub_pscl_bw_pix_per_clk;
        unsigned int    max_pscl_lb_bw_pix_per_clk;
@@ -224,6 +228,7 @@ struct writeback_st {
 };
 
 struct _vcs_dpi_display_output_params_st       {
+       int     dp_lanes;
        int     output_bpp;
        int     dsc_enable;
        int     wb_enable;
index ada0eeed330110326e0bb187999da39047537cc6..e1a3182d58b3aca7eca4a7967f29a4d4fe7fd435 100644 (file)
@@ -6,202 +6,220 @@ static const unsigned int NumberOfStates = DC__VOLTAGE_STATES;
 static void fetch_socbb_params(struct display_mode_lib *mode_lib);
 static void fetch_ip_params(struct display_mode_lib *mode_lib);
 static void fetch_pipe_params(struct display_mode_lib *mode_lib);
-static void recalculate_params(struct display_mode_lib *mode_lib,
-       const display_e2e_pipe_params_st *pipes,
-       unsigned int num_pipes);
+static void recalculate_params(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes);
 static void recalculate(struct display_mode_lib *mode_lib);
-static double adjust_ReturnBW(struct display_mode_lib *mode_lib, double ReturnBW, bool DCCEnabledAnyPlane, double ReturnBandwidthToDCN);
+static double adjust_ReturnBW(
+               struct display_mode_lib *mode_lib,
+               double ReturnBW,
+               bool DCCEnabledAnyPlane,
+               double ReturnBandwidthToDCN);
 static void ModeSupportAndSystemConfiguration(struct display_mode_lib *mode_lib);
 static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib);
-static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(struct display_mode_lib *mode_lib);
-static unsigned int dscceComputeDelay(unsigned int bpc,
-       double bpp,
-       unsigned int sliceWidth,
-       unsigned int numSlices,
-       enum output_format_class pixelFormat);
+static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(
+               struct display_mode_lib *mode_lib);
+static unsigned int dscceComputeDelay(
+               unsigned int bpc,
+               double bpp,
+               unsigned int sliceWidth,
+               unsigned int numSlices,
+               enum output_format_class pixelFormat);
 static unsigned int dscComputeDelay(enum output_format_class pixelFormat);
 // Super monster function with some 45 argument
-static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
-       double DPPCLK,
-       double DISPCLK,
-       double PixelClock,
-       double DCFClkDeepSleep,
-       unsigned int DSCDelay,
-       unsigned int DPPPerPlane,
-       bool ScalerEnabled,
-       unsigned int NumberOfCursors,
-       double DPPCLKDelaySubtotal,
-       double DPPCLKDelaySCL,
-       double DPPCLKDelaySCLLBOnly,
-       double DPPCLKDelayCNVCFormater,
-       double DPPCLKDelayCNVCCursor,
-       double DISPCLKDelaySubtotal,
-       unsigned int ScalerRecoutWidth,
-       enum output_format_class OutputFormat,
-       unsigned int VBlank,
-       unsigned int HTotal,
-       unsigned int MaxInterDCNTileRepeaters,
-       unsigned int VStartup,
-       unsigned int PageTableLevels,
-       bool VirtualMemoryEnable,
-       bool DynamicMetadataEnable,
-       unsigned int DynamicMetadataLinesBeforeActiveRequired,
-       unsigned int DynamicMetadataTransmittedBytes,
-       bool DCCEnable,
-       double UrgentLatency,
-       double UrgentExtraLatency,
-       double TCalc,
-       unsigned int PDEAndMetaPTEBytesFrame,
-       unsigned int MetaRowByte,
-       unsigned int PixelPTEBytesPerRow,
-       double PrefetchSourceLinesY,
-       unsigned int SwathWidthY,
-       double BytePerPixelDETY,
-       double VInitPreFillY,
-       unsigned int MaxNumSwathY,
-       double PrefetchSourceLinesC,
-       double BytePerPixelDETC,
-       double VInitPreFillC,
-       unsigned int MaxNumSwathC,
-       unsigned int SwathHeightY,
-       unsigned int SwathHeightC,
-       double TWait,
-       bool XFCEnabled,
-       double XFCRemoteSurfaceFlipDelay,
-       bool InterlaceEnable,
-       bool ProgressiveToInterlaceUnitInOPP,
-       double *DSTXAfterScaler,
-       double *DSTYAfterScaler,
-       double *DestinationLinesForPrefetch,
-       double *PrefetchBandwidth,
-       double *DestinationLinesToRequestVMInVBlank,
-       double *DestinationLinesToRequestRowInVBlank,
-       double *VRatioPrefetchY,
-       double *VRatioPrefetchC,
-       double *RequiredPrefetchPixDataBW,
-       unsigned int *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
-       double *Tno_bw);
-static double CeilToDFSGranularity(double Clock, double VCOSpeed);
-static double FloorToDFSGranularity(double Clock, double VCOSpeed);
-static double CalculatePrefetchSourceLines(struct display_mode_lib *mode_lib,
-       double VRatio,
-       double vtaps,
-       bool Interlace,
-       bool ProgressiveToInterlaceUnitInOPP,
-       unsigned int SwathHeight,
-       unsigned int ViewportYStart,
-       double *VInitPreFill,
-       unsigned int *MaxNumSwath);
-static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
-       bool DCCEnable,
-       unsigned int BlockHeight256Bytes,
-       unsigned int BlockWidth256Bytes,
-       enum source_format_class SourcePixelFormat,
-       unsigned int SurfaceTiling,
-       unsigned int BytePerPixel,
-       enum scan_direction_class ScanDirection,
-       unsigned int ViewportWidth,
-       unsigned int ViewportHeight,
-       unsigned int SwathWidthY,
-       bool VirtualMemoryEnable,
-       unsigned int VMMPageSize,
-       unsigned int PTEBufferSizeInRequests,
-       unsigned int PDEProcessingBufIn64KBReqs,
-       unsigned int Pitch,
-       unsigned int DCCMetaPitch,
-       unsigned int *MacroTileWidth,
-       unsigned int *MetaRowByte,
-       unsigned int *PixelPTEBytesPerRow,
-       bool *PTEBufferSizeNotExceeded,
-       unsigned int *dpte_row_height,
-       unsigned int *meta_row_height);
-static double CalculateTWait(unsigned int PrefetchMode,
-       double DRAMClockChangeLatency,
-       double UrgentLatency,
-       double SREnterPlusExitTime);
-static double CalculateRemoteSurfaceFlipDelay(struct display_mode_lib *mode_lib,
-       double VRatio,
-       double SwathWidth,
-       double Bpp,
-       double LineTime,
-       double XFCTSlvVupdateOffset,
-       double XFCTSlvVupdateWidth,
-       double XFCTSlvVreadyOffset,
-       double XFCXBUFLatencyTolerance,
-       double XFCFillBWOverhead,
-       double XFCSlvChunkSize,
-       double XFCBusTransportTime,
-       double TCalc,
-       double TWait,
-       double *SrcActiveDrainRate,
-       double *TInitXFill,
-       double *TslvChk);
-static double CalculateWriteBackDISPCLK(enum source_format_class WritebackPixelFormat,
-       double PixelClock,
-       double WritebackHRatio,
-       double WritebackVRatio,
-       unsigned int WritebackLumaHTaps,
-       unsigned int WritebackLumaVTaps,
-       unsigned int WritebackChromaHTaps,
-       unsigned int WritebackChromaVTaps,
-       double WritebackDestinationWidth,
-       unsigned int HTotal,
-       unsigned int WritebackChromaLineBufferWidth);
-static void CalculateActiveRowBandwidth(bool VirtualMemoryEnable,
-       enum source_format_class SourcePixelFormat,
-       double VRatio,
-       bool DCCEnable,
-       double LineTime,
-       unsigned int MetaRowByteLuma,
-       unsigned int MetaRowByteChroma,
-       unsigned int meta_row_height_luma,
-       unsigned int meta_row_height_chroma,
-       unsigned int PixelPTEBytesPerRowLuma,
-       unsigned int PixelPTEBytesPerRowChroma,
-       unsigned int dpte_row_height_luma,
-       unsigned int dpte_row_height_chroma,
-       double *meta_row_bw,
-       double *dpte_row_bw,
-       double *qual_row_bw);
-static void CalculateFlipSchedule(struct display_mode_lib *mode_lib,
-       double UrgentExtraLatency,
-       double UrgentLatency,
-       unsigned int MaxPageTableLevels,
-       bool VirtualMemoryEnable,
-       double BandwidthAvailableForImmediateFlip,
-       unsigned int TotImmediateFlipBytes,
-       enum source_format_class SourcePixelFormat,
-       unsigned int ImmediateFlipBytes,
-       double LineTime,
-       double Tno_bw,
-       double VRatio,
-       double PDEAndMetaPTEBytesFrame,
-       unsigned int MetaRowByte,
-       unsigned int PixelPTEBytesPerRow,
-       bool DCCEnable,
-       unsigned int dpte_row_height,
-       unsigned int meta_row_height,
-       double qual_row_bw,
-       double *DestinationLinesToRequestVMInImmediateFlip,
-       double *DestinationLinesToRequestRowInImmediateFlip,
-       double *final_flip_bw,
-       bool *ImmediateFlipSupportedForPipe);
-static double CalculateWriteBackDelay(enum source_format_class WritebackPixelFormat,
-       double WritebackHRatio,
-       double WritebackVRatio,
-       unsigned int WritebackLumaHTaps,
-       unsigned int WritebackLumaVTaps,
-       unsigned int WritebackChromaHTaps,
-       unsigned int WritebackChromaVTaps,
-       unsigned int WritebackDestinationWidth);
+static bool CalculatePrefetchSchedule(
+               struct display_mode_lib *mode_lib,
+               double DPPCLK,
+               double DISPCLK,
+               double PixelClock,
+               double DCFClkDeepSleep,
+               unsigned int DSCDelay,
+               unsigned int DPPPerPlane,
+               bool ScalerEnabled,
+               unsigned int NumberOfCursors,
+               double DPPCLKDelaySubtotal,
+               double DPPCLKDelaySCL,
+               double DPPCLKDelaySCLLBOnly,
+               double DPPCLKDelayCNVCFormater,
+               double DPPCLKDelayCNVCCursor,
+               double DISPCLKDelaySubtotal,
+               unsigned int ScalerRecoutWidth,
+               enum output_format_class OutputFormat,
+               unsigned int VBlank,
+               unsigned int HTotal,
+               unsigned int MaxInterDCNTileRepeaters,
+               unsigned int VStartup,
+               unsigned int PageTableLevels,
+               bool VirtualMemoryEnable,
+               bool DynamicMetadataEnable,
+               unsigned int DynamicMetadataLinesBeforeActiveRequired,
+               unsigned int DynamicMetadataTransmittedBytes,
+               bool DCCEnable,
+               double UrgentLatency,
+               double UrgentExtraLatency,
+               double TCalc,
+               unsigned int PDEAndMetaPTEBytesFrame,
+               unsigned int MetaRowByte,
+               unsigned int PixelPTEBytesPerRow,
+               double PrefetchSourceLinesY,
+               unsigned int SwathWidthY,
+               double BytePerPixelDETY,
+               double VInitPreFillY,
+               unsigned int MaxNumSwathY,
+               double PrefetchSourceLinesC,
+               double BytePerPixelDETC,
+               double VInitPreFillC,
+               unsigned int MaxNumSwathC,
+               unsigned int SwathHeightY,
+               unsigned int SwathHeightC,
+               double TWait,
+               bool XFCEnabled,
+               double XFCRemoteSurfaceFlipDelay,
+               bool InterlaceEnable,
+               bool ProgressiveToInterlaceUnitInOPP,
+               double *DSTXAfterScaler,
+               double *DSTYAfterScaler,
+               double *DestinationLinesForPrefetch,
+               double *PrefetchBandwidth,
+               double *DestinationLinesToRequestVMInVBlank,
+               double *DestinationLinesToRequestRowInVBlank,
+               double *VRatioPrefetchY,
+               double *VRatioPrefetchC,
+               double *RequiredPrefetchPixDataBW,
+               unsigned int *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
+               double *Tno_bw);
+static double RoundToDFSGranularityUp(double Clock, double VCOSpeed);
+static double RoundToDFSGranularityDown(double Clock, double VCOSpeed);
+static double CalculatePrefetchSourceLines(
+               struct display_mode_lib *mode_lib,
+               double VRatio,
+               double vtaps,
+               bool Interlace,
+               bool ProgressiveToInterlaceUnitInOPP,
+               unsigned int SwathHeight,
+               unsigned int ViewportYStart,
+               double *VInitPreFill,
+               unsigned int *MaxNumSwath);
+static unsigned int CalculateVMAndRowBytes(
+               struct display_mode_lib *mode_lib,
+               bool DCCEnable,
+               unsigned int BlockHeight256Bytes,
+               unsigned int BlockWidth256Bytes,
+               enum source_format_class SourcePixelFormat,
+               unsigned int SurfaceTiling,
+               unsigned int BytePerPixel,
+               enum scan_direction_class ScanDirection,
+               unsigned int ViewportWidth,
+               unsigned int ViewportHeight,
+               unsigned int SwathWidthY,
+               bool VirtualMemoryEnable,
+               unsigned int VMMPageSize,
+               unsigned int PTEBufferSizeInRequests,
+               unsigned int PDEProcessingBufIn64KBReqs,
+               unsigned int Pitch,
+               unsigned int DCCMetaPitch,
+               unsigned int *MacroTileWidth,
+               unsigned int *MetaRowByte,
+               unsigned int *PixelPTEBytesPerRow,
+               bool *PTEBufferSizeNotExceeded,
+               unsigned int *dpte_row_height,
+               unsigned int *meta_row_height);
+static double CalculateTWait(
+               unsigned int PrefetchMode,
+               double DRAMClockChangeLatency,
+               double UrgentLatency,
+               double SREnterPlusExitTime);
+static double CalculateRemoteSurfaceFlipDelay(
+               struct display_mode_lib *mode_lib,
+               double VRatio,
+               double SwathWidth,
+               double Bpp,
+               double LineTime,
+               double XFCTSlvVupdateOffset,
+               double XFCTSlvVupdateWidth,
+               double XFCTSlvVreadyOffset,
+               double XFCXBUFLatencyTolerance,
+               double XFCFillBWOverhead,
+               double XFCSlvChunkSize,
+               double XFCBusTransportTime,
+               double TCalc,
+               double TWait,
+               double *SrcActiveDrainRate,
+               double *TInitXFill,
+               double *TslvChk);
+static double CalculateWriteBackDISPCLK(
+               enum source_format_class WritebackPixelFormat,
+               double PixelClock,
+               double WritebackHRatio,
+               double WritebackVRatio,
+               unsigned int WritebackLumaHTaps,
+               unsigned int WritebackLumaVTaps,
+               unsigned int WritebackChromaHTaps,
+               unsigned int WritebackChromaVTaps,
+               double WritebackDestinationWidth,
+               unsigned int HTotal,
+               unsigned int WritebackChromaLineBufferWidth);
+static void CalculateActiveRowBandwidth(
+               bool VirtualMemoryEnable,
+               enum source_format_class SourcePixelFormat,
+               double VRatio,
+               bool DCCEnable,
+               double LineTime,
+               unsigned int MetaRowByteLuma,
+               unsigned int MetaRowByteChroma,
+               unsigned int meta_row_height_luma,
+               unsigned int meta_row_height_chroma,
+               unsigned int PixelPTEBytesPerRowLuma,
+               unsigned int PixelPTEBytesPerRowChroma,
+               unsigned int dpte_row_height_luma,
+               unsigned int dpte_row_height_chroma,
+               double *meta_row_bw,
+               double *dpte_row_bw,
+               double *qual_row_bw);
+static void CalculateFlipSchedule(
+               struct display_mode_lib *mode_lib,
+               double UrgentExtraLatency,
+               double UrgentLatency,
+               unsigned int MaxPageTableLevels,
+               bool VirtualMemoryEnable,
+               double BandwidthAvailableForImmediateFlip,
+               unsigned int TotImmediateFlipBytes,
+               enum source_format_class SourcePixelFormat,
+               unsigned int ImmediateFlipBytes,
+               double LineTime,
+               double Tno_bw,
+               double VRatio,
+               double PDEAndMetaPTEBytesFrame,
+               unsigned int MetaRowByte,
+               unsigned int PixelPTEBytesPerRow,
+               bool DCCEnable,
+               unsigned int dpte_row_height,
+               unsigned int meta_row_height,
+               double qual_row_bw,
+               double *DestinationLinesToRequestVMInImmediateFlip,
+               double *DestinationLinesToRequestRowInImmediateFlip,
+               double *final_flip_bw,
+               bool *ImmediateFlipSupportedForPipe);
+static double CalculateWriteBackDelay(
+               enum source_format_class WritebackPixelFormat,
+               double WritebackHRatio,
+               double WritebackVRatio,
+               unsigned int WritebackLumaHTaps,
+               unsigned int WritebackLumaVTaps,
+               unsigned int WritebackChromaHTaps,
+               unsigned int WritebackChromaVTaps,
+               unsigned int WritebackDestinationWidth);
 static void PixelClockAdjustmentForProgressiveToInterlaceUnit(struct display_mode_lib *mode_lib);
 static unsigned int CursorBppEnumToBits(enum cursor_bpp ebpp);
-
-void set_prefetch_mode(struct display_mode_lib *mode_lib,
-       bool cstate_en,
-       bool pstate_en,
-       bool ignore_viewport_pos,
-       bool immediate_flip_support)
+static void ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib);
+
+void set_prefetch_mode(
+               struct display_mode_lib *mode_lib,
+               bool cstate_en,
+               bool pstate_en,
+               bool ignore_viewport_pos,
+               bool immediate_flip_support)
 {
        unsigned int prefetch_mode;
 
@@ -211,11 +229,13 @@ void set_prefetch_mode(struct display_mode_lib *mode_lib,
                prefetch_mode = 1;
        else
                prefetch_mode = 2;
-       if (prefetch_mode != mode_lib->vba.PrefetchMode || ignore_viewport_pos != mode_lib->vba.IgnoreViewportPositioning
-               || immediate_flip_support != mode_lib->vba.ImmediateFlipSupport) {
-               DTRACE("   Prefetch mode has changed from %i to %i. Recalculating.",
-                       prefetch_mode,
-                       mode_lib->vba.PrefetchMode);
+       if (prefetch_mode != mode_lib->vba.PrefetchMode
+                       || ignore_viewport_pos != mode_lib->vba.IgnoreViewportPositioning
+                       || immediate_flip_support != mode_lib->vba.ImmediateFlipSupport) {
+               DTRACE(
+                               "   Prefetch mode has changed from %i to %i. Recalculating.",
+                               prefetch_mode,
+                               mode_lib->vba.PrefetchMode);
                mode_lib->vba.PrefetchMode = prefetch_mode;
                mode_lib->vba.IgnoreViewportPositioning = ignore_viewport_pos;
                mode_lib->vba.ImmediateFlipSupport = immediate_flip_support;
@@ -223,6 +243,39 @@ void set_prefetch_mode(struct display_mode_lib *mode_lib,
        }
 }
 
+unsigned int dml_get_voltage_level(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes)
+{
+       bool need_recalculate = memcmp(
+                       &mode_lib->soc,
+                       &mode_lib->vba.soc,
+                       sizeof(mode_lib->vba.soc)) != 0
+                       || memcmp(&mode_lib->ip, &mode_lib->vba.ip, sizeof(mode_lib->vba.ip)) != 0
+                       || memcmp(&mode_lib->me, &mode_lib->vba.me, sizeof(mode_lib->vba.me)) != 0
+                       || num_pipes != mode_lib->vba.cache_num_pipes
+                       || memcmp(pipes, mode_lib->vba.cache_pipes,
+                                       sizeof(display_e2e_pipe_params_st) * num_pipes) != 0;
+
+       mode_lib->vba.soc = mode_lib->soc;
+       mode_lib->vba.ip = mode_lib->ip;
+       mode_lib->vba.me = mode_lib->me;
+       memcpy(mode_lib->vba.cache_pipes, pipes, sizeof(*pipes) * num_pipes);
+       mode_lib->vba.cache_num_pipes = num_pipes;
+
+       if (need_recalculate)
+               recalculate(mode_lib);
+       else {
+               fetch_socbb_params(mode_lib);
+               fetch_ip_params(mode_lib);
+               fetch_pipe_params(mode_lib);
+       }
+       ModeSupportAndSystemConfigurationFull(mode_lib);
+
+       return mode_lib->vba.VoltageLevel;
+}
+
 #define dml_get_attr_func(attr, var)  double get_##attr(struct display_mode_lib *mode_lib, const display_e2e_pipe_params_st *pipes, unsigned int num_pipes) \
 { \
        recalculate_params(mode_lib, pipes, num_pipes); \
@@ -243,7 +296,9 @@ dml_get_attr_func(stutter_efficiency_no_vblank, mode_lib->vba.StutterEfficiencyN
 dml_get_attr_func(urgent_latency, mode_lib->vba.MinUrgentLatencySupportUs);
 dml_get_attr_func(urgent_extra_latency, mode_lib->vba.UrgentExtraLatency);
 dml_get_attr_func(nonurgent_latency, mode_lib->vba.NonUrgentLatencyTolerance);
-dml_get_attr_func(dram_clock_change_latency, mode_lib->vba.MinActiveDRAMClockChangeLatencySupported);
+dml_get_attr_func(
+               dram_clock_change_latency,
+               mode_lib->vba.MinActiveDRAMClockChangeLatencySupported);
 dml_get_attr_func(dispclk_calculated, mode_lib->vba.DISPCLK_calculated);
 dml_get_attr_func(total_data_read_bw, mode_lib->vba.TotalDataReadBandwidth);
 dml_get_attr_func(return_bw, mode_lib->vba.ReturnBW);
@@ -269,17 +324,20 @@ dml_get_pipe_attr_func(dst_y_per_vm_vblank, mode_lib->vba.DestinationLinesToRequ
 dml_get_pipe_attr_func(dst_y_per_row_vblank, mode_lib->vba.DestinationLinesToRequestRowInVBlank);
 dml_get_pipe_attr_func(dst_y_prefetch, mode_lib->vba.DestinationLinesForPrefetch);
 dml_get_pipe_attr_func(dst_y_per_vm_flip, mode_lib->vba.DestinationLinesToRequestVMInImmediateFlip);
-dml_get_pipe_attr_func(dst_y_per_row_flip, mode_lib->vba.DestinationLinesToRequestRowInImmediateFlip);
+dml_get_pipe_attr_func(
+               dst_y_per_row_flip,
+               mode_lib->vba.DestinationLinesToRequestRowInImmediateFlip);
 
 dml_get_pipe_attr_func(xfc_transfer_delay, mode_lib->vba.XFCTransferDelay);
 dml_get_pipe_attr_func(xfc_precharge_delay, mode_lib->vba.XFCPrechargeDelay);
 dml_get_pipe_attr_func(xfc_remote_surface_flip_latency, mode_lib->vba.XFCRemoteSurfaceFlipLatency);
 dml_get_pipe_attr_func(xfc_prefetch_margin, mode_lib->vba.XFCPrefetchMargin);
 
-unsigned int get_vstartup_calculated(struct display_mode_lib *mode_lib,
-       const display_e2e_pipe_params_st *pipes,
-       unsigned int num_pipes,
-       unsigned int which_pipe)
+unsigned int get_vstartup_calculated(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes,
+               unsigned int which_pipe)
 {
        unsigned int which_plane;
 
@@ -288,25 +346,28 @@ unsigned int get_vstartup_calculated(struct display_mode_lib *mode_lib,
        return mode_lib->vba.VStartup[which_plane];
 }
 
-double get_total_immediate_flip_bytes(struct display_mode_lib *mode_lib,
-       const display_e2e_pipe_params_st *pipes,
-       unsigned int num_pipes)
+double get_total_immediate_flip_bytes(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes)
 {
        recalculate_params(mode_lib, pipes, num_pipes);
        return mode_lib->vba.TotImmediateFlipBytes;
 }
 
-double get_total_immediate_flip_bw(struct display_mode_lib *mode_lib,
-       const display_e2e_pipe_params_st *pipes,
-       unsigned int num_pipes)
+double get_total_immediate_flip_bw(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes)
 {
        recalculate_params(mode_lib, pipes, num_pipes);
        return mode_lib->vba.ImmediateFlipBW;
 }
 
-double get_total_prefetch_bw(struct display_mode_lib *mode_lib,
-       const display_e2e_pipe_params_st *pipes,
-       unsigned int num_pipes)
+double get_total_prefetch_bw(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes)
 {
        unsigned int k;
        double total_prefetch_bw = 0.0;
@@ -326,10 +387,11 @@ static void fetch_socbb_params(struct display_mode_lib *mode_lib)
        mode_lib->vba.ReturnBusWidth = soc->return_bus_width_bytes;
        mode_lib->vba.NumberOfChannels = soc->num_chans;
        mode_lib->vba.PercentOfIdealDRAMAndFabricBWReceivedAfterUrgLatency =
-               soc->ideal_dram_bw_after_urgent_percent; // there's always that one bastard variable that's so long it throws everything out of alignment!
+                       soc->ideal_dram_bw_after_urgent_percent; // there's always that one bastard variable that's so long it throws everything out of alignment!
        mode_lib->vba.UrgentLatency = soc->urgent_latency_us;
        mode_lib->vba.RoundTripPingLatencyCycles = soc->round_trip_ping_latency_dcfclk_cycles;
-       mode_lib->vba.UrgentOutOfOrderReturnPerChannel = soc->urgent_out_of_order_return_per_channel_bytes;
+       mode_lib->vba.UrgentOutOfOrderReturnPerChannel =
+                       soc->urgent_out_of_order_return_per_channel_bytes;
        mode_lib->vba.WritebackLatency = soc->writeback_latency_us;
        mode_lib->vba.SRExitTime = soc->sr_exit_time_us;
        mode_lib->vba.SREnterPlusExitTime = soc->sr_enter_plus_exit_time_us;
@@ -342,7 +404,7 @@ static void fetch_socbb_params(struct display_mode_lib *mode_lib)
        mode_lib->vba.VMMPageSize = soc->vmm_page_size_bytes;
        // Set the voltage scaling clocks as the defaults. Most of these will
        // be set to different values by the test
-       for (i = 0; i < DC__VOLTAGE_STATES; ++i)
+       for (i = 0; i < DC__VOLTAGE_STATES; i++)
                if (soc->clock_limits[i].state == mode_lib->vba.VoltageLevel)
                        break;
 
@@ -353,6 +415,23 @@ static void fetch_socbb_params(struct display_mode_lib *mode_lib)
 
        mode_lib->vba.XFCBusTransportTime = soc->xfc_bus_transport_time_us;
        mode_lib->vba.XFCXBUFLatencyTolerance = soc->xfc_xbuf_latency_tolerance_us;
+
+       mode_lib->vba.SupportGFX7CompatibleTilingIn32bppAnd64bpp = false;
+       mode_lib->vba.MaxHSCLRatio = 4;
+       mode_lib->vba.MaxVSCLRatio = 4;
+       mode_lib->vba.MaxNumWriteback = 0; /*TODO*/
+       mode_lib->vba.WritebackLumaAndChromaScalingSupported = true;
+       mode_lib->vba.Cursor64BppSupport = true;
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.DCFCLKPerState[i] = soc->clock_limits[i].dcfclk_mhz;
+               mode_lib->vba.FabricClockPerState[i] = soc->clock_limits[i].fabricclk_mhz;
+               mode_lib->vba.SOCCLKPerState[i] = soc->clock_limits[i].socclk_mhz;
+               mode_lib->vba.PHYCLKPerState[i] = soc->clock_limits[i].phyclk_mhz;
+               mode_lib->vba.MaxDppclk[i] = soc->clock_limits[i].dppclk_mhz;
+               mode_lib->vba.MaxDSCCLK[i] = soc->clock_limits[i].dscclk_mhz;
+               mode_lib->vba.DRAMSpeedPerState[i] = soc->clock_limits[i].dram_speed_mhz;
+               mode_lib->vba.MaxDispclk[i] = soc->clock_limits[i].dispclk_mhz;
+       }
 }
 
 static void fetch_ip_params(struct display_mode_lib *mode_lib)
@@ -360,6 +439,11 @@ static void fetch_ip_params(struct display_mode_lib *mode_lib)
        ip_params_st *ip = &mode_lib->vba.ip;
 
        // IP Parameters
+       mode_lib->vba.MaxNumDPP = ip->max_num_dpp;
+       mode_lib->vba.MaxNumOTG = ip->max_num_otg;
+       mode_lib->vba.CursorChunkSize = ip->cursor_chunk_size;
+       mode_lib->vba.CursorBufferSize = ip->cursor_buffer_size;
+
        mode_lib->vba.MaxDCHUBToPSCLThroughput = ip->max_dchub_pscl_bw_pix_per_clk;
        mode_lib->vba.MaxPSCLToLBThroughput = ip->max_pscl_lb_bw_pix_per_clk;
        mode_lib->vba.ROBBufferSizeInKByte = ip->rob_buffer_size_kbytes;
@@ -375,7 +459,8 @@ static void fetch_ip_params(struct display_mode_lib *mode_lib)
        mode_lib->vba.OPPOutputBufferLines = ip->opp_output_buffer_lines;
        mode_lib->vba.WritebackInterfaceLumaBufferSize = ip->writeback_luma_buffer_size_kbytes;
        mode_lib->vba.WritebackInterfaceChromaBufferSize = ip->writeback_chroma_buffer_size_kbytes;
-       mode_lib->vba.WritebackChromaLineBufferWidth = ip->writeback_chroma_line_buffer_width_pixels;
+       mode_lib->vba.WritebackChromaLineBufferWidth =
+                       ip->writeback_chroma_line_buffer_width_pixels;
        mode_lib->vba.MaxPageTableLevels = ip->max_page_table_levels;
        mode_lib->vba.MaxInterDCNTileRepeaters = ip->max_inter_dcn_tile_repeaters;
        mode_lib->vba.NumberOfDSC = ip->num_dsc;
@@ -402,10 +487,10 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
        display_e2e_pipe_params_st *pipes = mode_lib->vba.cache_pipes;
        ip_params_st *ip = &mode_lib->vba.ip;
 
-       unsigned int OTGInstPlane[DC__NUM_DPP];
+       unsigned int OTGInstPlane[DC__NUM_DPP__MAX];
        unsigned int j, k;
-       bool PlaneVisited[DC__NUM_DPP];
-       bool visited[DC__NUM_PIPES__MAX];
+       bool PlaneVisited[DC__NUM_DPP__MAX];
+       bool visited[DC__NUM_DPP__MAX];
 
        // Convert Pipes to Planes
        for (k = 0; k < mode_lib->vba.cache_num_pipes; ++k)
@@ -427,11 +512,16 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
                mode_lib->vba.pipe_plane[j] = mode_lib->vba.NumberOfActivePlanes;
 
                mode_lib->vba.DPPPerPlane[mode_lib->vba.NumberOfActivePlanes] = 1;
-               mode_lib->vba.SourceScan[mode_lib->vba.NumberOfActivePlanes] = (enum scan_direction_class)(src->source_scan);
-               mode_lib->vba.ViewportWidth[mode_lib->vba.NumberOfActivePlanes] = src->viewport_width;
-               mode_lib->vba.ViewportHeight[mode_lib->vba.NumberOfActivePlanes] = src->viewport_height;
-               mode_lib->vba.ViewportYStartY[mode_lib->vba.NumberOfActivePlanes] = src->viewport_y_y;
-               mode_lib->vba.ViewportYStartC[mode_lib->vba.NumberOfActivePlanes] = src->viewport_y_c;
+               mode_lib->vba.SourceScan[mode_lib->vba.NumberOfActivePlanes] =
+                               (enum scan_direction_class) (src->source_scan);
+               mode_lib->vba.ViewportWidth[mode_lib->vba.NumberOfActivePlanes] =
+                               src->viewport_width;
+               mode_lib->vba.ViewportHeight[mode_lib->vba.NumberOfActivePlanes] =
+                               src->viewport_height;
+               mode_lib->vba.ViewportYStartY[mode_lib->vba.NumberOfActivePlanes] =
+                               src->viewport_y_y;
+               mode_lib->vba.ViewportYStartC[mode_lib->vba.NumberOfActivePlanes] =
+                               src->viewport_y_c;
                mode_lib->vba.PitchY[mode_lib->vba.NumberOfActivePlanes] = src->data_pitch;
                mode_lib->vba.PitchC[mode_lib->vba.NumberOfActivePlanes] = src->data_pitch_c;
                mode_lib->vba.DCCMetaPitchY[mode_lib->vba.NumberOfActivePlanes] = src->meta_pitch;
@@ -448,40 +538,62 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
                mode_lib->vba.HTotal[mode_lib->vba.NumberOfActivePlanes] = dst->htotal;
                mode_lib->vba.VTotal[mode_lib->vba.NumberOfActivePlanes] = dst->vtotal;
                mode_lib->vba.DCCEnable[mode_lib->vba.NumberOfActivePlanes] =
-                       src->dcc_use_global ? ip->dcc_supported : src->dcc & ip->dcc_supported;
+                               src->dcc_use_global ?
+                                               ip->dcc_supported : src->dcc && ip->dcc_supported;
                mode_lib->vba.DCCRate[mode_lib->vba.NumberOfActivePlanes] = src->dcc_rate;
-               mode_lib->vba.SourcePixelFormat[mode_lib->vba.NumberOfActivePlanes] = (enum source_format_class)(src->source_format);
+               mode_lib->vba.SourcePixelFormat[mode_lib->vba.NumberOfActivePlanes] =
+                               (enum source_format_class) (src->source_format);
                mode_lib->vba.HActive[mode_lib->vba.NumberOfActivePlanes] = dst->hactive;
                mode_lib->vba.VActive[mode_lib->vba.NumberOfActivePlanes] = dst->vactive;
-               mode_lib->vba.SurfaceTiling[mode_lib->vba.NumberOfActivePlanes] = (enum dm_swizzle_mode)(src->sw_mode);
-               mode_lib->vba.ScalerRecoutWidth[mode_lib->vba.NumberOfActivePlanes] = dst->recout_width; // TODO: or should this be full_recout_width???...maybe only when in hsplit mode?
-               mode_lib->vba.ODMCombineEnabled[mode_lib->vba.NumberOfActivePlanes] = dst->odm_combine;
-               mode_lib->vba.OutputFormat[mode_lib->vba.NumberOfActivePlanes] = (enum output_format_class)(dout->output_format);
-               mode_lib->vba.Output[mode_lib->vba.NumberOfActivePlanes] = (enum output_encoder_class)(dout->output_type);
+               mode_lib->vba.SurfaceTiling[mode_lib->vba.NumberOfActivePlanes] =
+                               (enum dm_swizzle_mode) (src->sw_mode);
+               mode_lib->vba.ScalerRecoutWidth[mode_lib->vba.NumberOfActivePlanes] =
+                               dst->recout_width; // TODO: or should this be full_recout_width???...maybe only when in hsplit mode?
+               mode_lib->vba.ODMCombineEnabled[mode_lib->vba.NumberOfActivePlanes] =
+                               dst->odm_combine;
+               mode_lib->vba.OutputFormat[mode_lib->vba.NumberOfActivePlanes] =
+                               (enum output_format_class) (dout->output_format);
+               mode_lib->vba.Output[mode_lib->vba.NumberOfActivePlanes] =
+                               (enum output_encoder_class) (dout->output_type);
                mode_lib->vba.OutputBpp[mode_lib->vba.NumberOfActivePlanes] = dout->output_bpp;
+               mode_lib->vba.OutputLinkDPLanes[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->dp_lanes;
                mode_lib->vba.DSCEnabled[mode_lib->vba.NumberOfActivePlanes] = dout->dsc_enable;
-               mode_lib->vba.NumberOfDSCSlices[mode_lib->vba.NumberOfActivePlanes] = dout->dsc_slices;
+               mode_lib->vba.NumberOfDSCSlices[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->dsc_slices;
                mode_lib->vba.DSCInputBitPerComponent[mode_lib->vba.NumberOfActivePlanes] =
-                       dout->output_bpc == 0 ? 12 : dout->output_bpc;
+                               dout->output_bpc == 0 ? 12 : dout->output_bpc;
                mode_lib->vba.WritebackEnable[mode_lib->vba.NumberOfActivePlanes] = dout->wb_enable;
-               mode_lib->vba.WritebackSourceHeight[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_src_height;
-               mode_lib->vba.WritebackDestinationWidth[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_dst_width;
-               mode_lib->vba.WritebackDestinationHeight[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_dst_height;
-               mode_lib->vba.WritebackPixelFormat[mode_lib->vba.NumberOfActivePlanes] = (enum source_format_class)(dout->wb.wb_pixel_format);
-               mode_lib->vba.WritebackLumaHTaps[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_htaps_luma;
-               mode_lib->vba.WritebackLumaVTaps[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_vtaps_luma;
-               mode_lib->vba.WritebackChromaHTaps[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_htaps_chroma;
-               mode_lib->vba.WritebackChromaVTaps[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_vtaps_chroma;
-               mode_lib->vba.WritebackHRatio[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_hratio;
-               mode_lib->vba.WritebackVRatio[mode_lib->vba.NumberOfActivePlanes] = dout->wb.wb_vratio;
-
-               mode_lib->vba.DynamicMetadataEnable[mode_lib->vba.NumberOfActivePlanes] = src->dynamic_metadata_enable;
+               mode_lib->vba.WritebackSourceHeight[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_src_height;
+               mode_lib->vba.WritebackDestinationWidth[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_dst_width;
+               mode_lib->vba.WritebackDestinationHeight[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_dst_height;
+               mode_lib->vba.WritebackPixelFormat[mode_lib->vba.NumberOfActivePlanes] =
+                               (enum source_format_class) (dout->wb.wb_pixel_format);
+               mode_lib->vba.WritebackLumaHTaps[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_htaps_luma;
+               mode_lib->vba.WritebackLumaVTaps[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_vtaps_luma;
+               mode_lib->vba.WritebackChromaHTaps[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_htaps_chroma;
+               mode_lib->vba.WritebackChromaVTaps[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_vtaps_chroma;
+               mode_lib->vba.WritebackHRatio[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_hratio;
+               mode_lib->vba.WritebackVRatio[mode_lib->vba.NumberOfActivePlanes] =
+                               dout->wb.wb_vratio;
+
+               mode_lib->vba.DynamicMetadataEnable[mode_lib->vba.NumberOfActivePlanes] =
+                               src->dynamic_metadata_enable;
                mode_lib->vba.DynamicMetadataLinesBeforeActiveRequired[mode_lib->vba.NumberOfActivePlanes] =
-                       src->dynamic_metadata_lines_before_active;
+                               src->dynamic_metadata_lines_before_active;
                mode_lib->vba.DynamicMetadataTransmittedBytes[mode_lib->vba.NumberOfActivePlanes] =
-                       src->dynamic_metadata_xmit_bytes;
+                               src->dynamic_metadata_xmit_bytes;
 
-               mode_lib->vba.XFCEnabled[mode_lib->vba.NumberOfActivePlanes] = src->xfc_enable && ip->xfc_supported;
+               mode_lib->vba.XFCEnabled[mode_lib->vba.NumberOfActivePlanes] = src->xfc_enable
+                               && ip->xfc_supported;
                mode_lib->vba.XFCSlvChunkSize = src->xfc_params.xfc_slv_chunk_size_bytes;
                mode_lib->vba.XFCTSlvVupdateOffset = src->xfc_params.xfc_tslv_vupdate_offset_us;
                mode_lib->vba.XFCTSlvVupdateWidth = src->xfc_params.xfc_tslv_vupdate_width_us;
@@ -489,7 +601,8 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
                mode_lib->vba.PixelClock[mode_lib->vba.NumberOfActivePlanes] = dst->pixel_rate_mhz;
                mode_lib->vba.DPPCLK[mode_lib->vba.NumberOfActivePlanes] = clks->dppclk_mhz;
                if (ip->is_line_buffer_bpp_fixed)
-                       mode_lib->vba.LBBitPerPixel[mode_lib->vba.NumberOfActivePlanes] = ip->line_buffer_fixed_bpp;
+                       mode_lib->vba.LBBitPerPixel[mode_lib->vba.NumberOfActivePlanes] =
+                                       ip->line_buffer_fixed_bpp;
                else {
                        unsigned int lb_depth;
 
@@ -520,27 +633,36 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
                for (k = 0; k < DC__NUM_CURSOR; ++k) {
                        switch (k) {
                        case 0:
-                               mode_lib->vba.CursorBPP[mode_lib->vba.NumberOfActivePlanes][0] = CursorBppEnumToBits((enum cursor_bpp)(src->cur0_bpp));
-                               mode_lib->vba.CursorWidth[mode_lib->vba.NumberOfActivePlanes][0] = src->cur0_src_width;
+                               mode_lib->vba.CursorBPP[mode_lib->vba.NumberOfActivePlanes][0] =
+                                               CursorBppEnumToBits(
+                                                               (enum cursor_bpp) (src->cur0_bpp));
+                               mode_lib->vba.CursorWidth[mode_lib->vba.NumberOfActivePlanes][0] =
+                                               src->cur0_src_width;
                                if (src->cur0_src_width > 0)
                                        mode_lib->vba.NumberOfCursors[mode_lib->vba.NumberOfActivePlanes]++;
                                break;
                        case 1:
-                               mode_lib->vba.CursorBPP[mode_lib->vba.NumberOfActivePlanes][1] = CursorBppEnumToBits((enum cursor_bpp)(src->cur1_bpp));
-                               mode_lib->vba.CursorWidth[mode_lib->vba.NumberOfActivePlanes][1] = src->cur1_src_width;
+                               mode_lib->vba.CursorBPP[mode_lib->vba.NumberOfActivePlanes][1] =
+                                               CursorBppEnumToBits(
+                                                               (enum cursor_bpp) (src->cur1_bpp));
+                               mode_lib->vba.CursorWidth[mode_lib->vba.NumberOfActivePlanes][1] =
+                                               src->cur1_src_width;
                                if (src->cur1_src_width > 0)
                                        mode_lib->vba.NumberOfCursors[mode_lib->vba.NumberOfActivePlanes]++;
                                break;
                        default:
-                               dml_print("ERROR: Number of cursors specified exceeds supported maximum\n");
+                               dml_print(
+                                               "ERROR: Number of cursors specified exceeds supported maximum\n")
+                               ;
                        }
                }
 
                OTGInstPlane[mode_lib->vba.NumberOfActivePlanes] = dst->otg_inst;
 
                if (dst->odm_combine && !src->is_hsplit)
-                       dml_print("ERROR: ODM Combine is specified but is_hsplit has not be specified for pipe %i\n",
-                               j);
+                       dml_print(
+                                       "ERROR: ODM Combine is specified but is_hsplit has not be specified for pipe %i\n",
+                                       j);
 
                if (src->is_hsplit) {
                        for (k = j + 1; k < mode_lib->vba.cache_num_pipes; ++k) {
@@ -548,18 +670,20 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
                                display_output_params_st *dout_k = &pipes[k].dout;
 
                                if (src_k->is_hsplit && !visited[k]
-                                       && src->hsplit_grp == src_k->hsplit_grp) {
-                                       mode_lib->vba.pipe_plane[k] = mode_lib->vba.NumberOfActivePlanes;
+                                               && src->hsplit_grp == src_k->hsplit_grp) {
+                                       mode_lib->vba.pipe_plane[k] =
+                                                       mode_lib->vba.NumberOfActivePlanes;
                                        mode_lib->vba.DPPPerPlane[mode_lib->vba.NumberOfActivePlanes]++;
-                                       if (mode_lib->vba.SourceScan[mode_lib->vba.NumberOfActivePlanes] == dm_horz)
+                                       if (mode_lib->vba.SourceScan[mode_lib->vba.NumberOfActivePlanes]
+                                                       == dm_horz)
                                                mode_lib->vba.ViewportWidth[mode_lib->vba.NumberOfActivePlanes] +=
-                                               src_k->viewport_width;
+                                                               src_k->viewport_width;
                                        else
                                                mode_lib->vba.ViewportHeight[mode_lib->vba.NumberOfActivePlanes] +=
-                                               src_k->viewport_height;
+                                                               src_k->viewport_height;
 
                                        mode_lib->vba.NumberOfDSCSlices[mode_lib->vba.NumberOfActivePlanes] +=
-                                               dout_k->dsc_slices;
+                                                       dout_k->dsc_slices;
                                        visited[k] = true;
                                }
                        }
@@ -598,26 +722,30 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib)
        for (k = 1; k < mode_lib->vba.cache_num_pipes; ++k)
                ASSERT(mode_lib->vba.SynchronizedVBlank == pipes[k].pipe.dest.synchronized_vblank_all_planes);
 
-       mode_lib->vba.VirtualMemoryEnable = 0;
+       mode_lib->vba.VirtualMemoryEnable = false;
        mode_lib->vba.OverridePageTableLevels = 0;
 
        for (k = 0; k < mode_lib->vba.cache_num_pipes; ++k) {
-               mode_lib->vba.VirtualMemoryEnable |= pipes[k].pipe.src.vm;
+               mode_lib->vba.VirtualMemoryEnable = mode_lib->vba.VirtualMemoryEnable
+                               || !!pipes[k].pipe.src.vm;
                mode_lib->vba.OverridePageTableLevels =
-                       (pipes[k].pipe.src.vm_levels_force_en
-                               && mode_lib->vba.OverridePageTableLevels
-                               < pipes[k].pipe.src.vm_levels_force) ?
-                       pipes[k].pipe.src.vm_levels_force :
-                       mode_lib->vba.OverridePageTableLevels;
+                               (pipes[k].pipe.src.vm_levels_force_en
+                                               && mode_lib->vba.OverridePageTableLevels
+                                                               < pipes[k].pipe.src.vm_levels_force) ?
+                                               pipes[k].pipe.src.vm_levels_force :
+                                               mode_lib->vba.OverridePageTableLevels;
        }
 
        if (mode_lib->vba.OverridePageTableLevels)
                mode_lib->vba.MaxPageTableLevels = mode_lib->vba.OverridePageTableLevels;
 
-       mode_lib->vba.VirtualMemoryEnable &= ip->pte_enable;
+       mode_lib->vba.VirtualMemoryEnable = mode_lib->vba.VirtualMemoryEnable && !!ip->pte_enable;
 
-       mode_lib->vba.FabricAndDRAMBandwidth = dml_min(mode_lib->vba.DRAMSpeed * mode_lib->vba.NumberOfChannels * mode_lib->vba.DRAMChannelWidth,
-               mode_lib->vba.FabricClock * mode_lib->vba.FabricDatapathToDCNDataReturn) / 1000.0;
+       mode_lib->vba.FabricAndDRAMBandwidth = dml_min(
+                       mode_lib->vba.DRAMSpeed * mode_lib->vba.NumberOfChannels
+                                       * mode_lib->vba.DRAMChannelWidth,
+                       mode_lib->vba.FabricClock * mode_lib->vba.FabricDatapathToDCNDataReturn)
+                       / 1000.0;
 
        // TODO: Must be consistent across all pipes
        // DCCProgrammingAssumesScanDirectionUnknown = src.dcc_scan_dir_unknown;
@@ -633,16 +761,20 @@ static void recalculate(struct display_mode_lib *mode_lib)
 
 // in wm mode we pull the parameters needed from the display_e2e_pipe_params_st structs
 // rather than working them out as in recalculate_ms
-static void recalculate_params(struct display_mode_lib *mode_lib,
-       const display_e2e_pipe_params_st *pipes,
-       unsigned int num_pipes)
+static void recalculate_params(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes)
 {
        // This is only safe to use memcmp because there are non-POD types in struct display_mode_lib
        if (memcmp(&mode_lib->soc, &mode_lib->vba.soc, sizeof(mode_lib->vba.soc)) != 0
                        || memcmp(&mode_lib->ip, &mode_lib->vba.ip, sizeof(mode_lib->vba.ip)) != 0
                        || memcmp(&mode_lib->me, &mode_lib->vba.me, sizeof(mode_lib->vba.me)) != 0
                        || num_pipes != mode_lib->vba.cache_num_pipes
-                       || memcmp(pipes, mode_lib->vba.cache_pipes, sizeof(display_e2e_pipe_params_st) * num_pipes) != 0) {
+                       || memcmp(
+                                       pipes,
+                                       mode_lib->vba.cache_pipes,
+                                       sizeof(display_e2e_pipe_params_st) * num_pipes) != 0) {
                mode_lib->vba.soc = mode_lib->soc;
                mode_lib->vba.ip = mode_lib->ip;
                mode_lib->vba.me = mode_lib->me;
@@ -677,55 +809,70 @@ static void ModeSupportAndSystemConfiguration(struct display_mode_lib *mode_lib)
        // Total Available Pipes Support Check
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
                total_pipes += mode_lib->vba.DPPPerPlane[k];
-       ASSERT(total_pipes <= DC__NUM_DPP);
+       ASSERT(total_pipes <= DC__NUM_DPP__MAX);
 }
 
-static double adjust_ReturnBW(struct display_mode_lib *mode_lib, double ReturnBW, bool DCCEnabledAnyPlane, double ReturnBandwidthToDCN)
+static double adjust_ReturnBW(
+               struct display_mode_lib *mode_lib,
+               double ReturnBW,
+               bool DCCEnabledAnyPlane,
+               double ReturnBandwidthToDCN)
 {
        double CriticalCompression;
 
-       if (DCCEnabledAnyPlane && ReturnBandwidthToDCN > mode_lib->vba.DCFCLK * mode_lib->vba.ReturnBusWidth / 4.0)
+       if (DCCEnabledAnyPlane
+                       && ReturnBandwidthToDCN
+                                       > mode_lib->vba.DCFCLK * mode_lib->vba.ReturnBusWidth / 4.0)
                ReturnBW =
-               dml_min(ReturnBW,
-                       ReturnBandwidthToDCN * 4
-                       * (1.0
-                               - mode_lib->vba.UrgentLatency
-                               / ((mode_lib->vba.ROBBufferSizeInKByte
-                                       - mode_lib->vba.PixelChunkSizeInKByte)
-                                       * 1024
-                                       / ReturnBandwidthToDCN
-                                       - mode_lib->vba.DCFCLK
-                                       * mode_lib->vba.ReturnBusWidth
-                                       / 4)
-                               + mode_lib->vba.UrgentLatency));
-
-       CriticalCompression = 2.0 * mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK * mode_lib->vba.UrgentLatency
-               / (ReturnBandwidthToDCN * mode_lib->vba.UrgentLatency
-                       + (mode_lib->vba.ROBBufferSizeInKByte - mode_lib->vba.PixelChunkSizeInKByte) * 1024);
+                               dml_min(
+                                               ReturnBW,
+                                               ReturnBandwidthToDCN * 4
+                                                               * (1.0
+                                                                               - mode_lib->vba.UrgentLatency
+                                                                                               / ((mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                               - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                                               * 1024
+                                                                                                               / ReturnBandwidthToDCN
+                                                                                                               - mode_lib->vba.DCFCLK
+                                                                                                                               * mode_lib->vba.ReturnBusWidth
+                                                                                                                               / 4)
+                                                                               + mode_lib->vba.UrgentLatency));
+
+       CriticalCompression = 2.0 * mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK
+                       * mode_lib->vba.UrgentLatency
+                       / (ReturnBandwidthToDCN * mode_lib->vba.UrgentLatency
+                                       + (mode_lib->vba.ROBBufferSizeInKByte
+                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                       * 1024);
 
        if (DCCEnabledAnyPlane && CriticalCompression > 1.0 && CriticalCompression < 4.0)
                ReturnBW =
-               dml_min(ReturnBW,
-                       4.0 * ReturnBandwidthToDCN
-                       * (mode_lib->vba.ROBBufferSizeInKByte
-                               - mode_lib->vba.PixelChunkSizeInKByte)
-                       * 1024 * mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK
-                       * mode_lib->vba.UrgentLatency
-                       / dml_pow((ReturnBandwidthToDCN
-                               * mode_lib->vba.UrgentLatency
-                               + (mode_lib->vba.ROBBufferSizeInKByte
-                                       - mode_lib->vba.PixelChunkSizeInKByte)
-                               * 1024),
-                               2));
+                               dml_min(
+                                               ReturnBW,
+                                               4.0 * ReturnBandwidthToDCN
+                                                               * (mode_lib->vba.ROBBufferSizeInKByte
+                                                                               - mode_lib->vba.PixelChunkSizeInKByte)
+                                                               * 1024
+                                                               * mode_lib->vba.ReturnBusWidth
+                                                               * mode_lib->vba.DCFCLK
+                                                               * mode_lib->vba.UrgentLatency
+                                                               / dml_pow(
+                                                                               (ReturnBandwidthToDCN
+                                                                                               * mode_lib->vba.UrgentLatency
+                                                                                               + (mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                               - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                                               * 1024),
+                                                                               2));
 
        return ReturnBW;
 }
 
-static unsigned int dscceComputeDelay(unsigned int bpc,
-       double bpp,
-       unsigned int sliceWidth,
-       unsigned int numSlices,
-       enum output_format_class pixelFormat)
+static unsigned int dscceComputeDelay(
+               unsigned int bpc,
+               double bpp,
+               unsigned int sliceWidth,
+               unsigned int numSlices,
+               enum output_format_class pixelFormat)
 {
        // valid bpc         = source bits per component in the set of {8, 10, 12}
        // valid bpp         = increments of 1/16 of a bit
@@ -739,12 +886,12 @@ static unsigned int dscceComputeDelay(unsigned int bpc,
        unsigned int rcModelSize = 8192;
 
        // N422/N420 operate at 2 pixels per clock
-       unsigned int pixelsPerClock, lstall, D, initalXmitDelay, w, s, ix, wx, p, l0, a, ax, l, Delay,
-               pixels;
+       unsigned int pixelsPerClock, lstall, D, initalXmitDelay, w, s, ix, wx, p, l0, a, ax, l,
+                       Delay, pixels;
 
        if (pixelFormat == dm_n422 || pixelFormat == dm_420)
                pixelsPerClock = 2;
-               // #all other modes operate at 1 pixel per clock
+       // #all other modes operate at 1 pixel per clock
        else
                pixelsPerClock = 1;
 
@@ -859,66 +1006,67 @@ static unsigned int dscComputeDelay(enum output_format_class pixelFormat)
        return Delay;
 }
 
-static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
-       double DPPCLK,
-       double DISPCLK,
-       double PixelClock,
-       double DCFClkDeepSleep,
-       unsigned int DSCDelay,
-       unsigned int DPPPerPlane,
-       bool ScalerEnabled,
-       unsigned int NumberOfCursors,
-       double DPPCLKDelaySubtotal,
-       double DPPCLKDelaySCL,
-       double DPPCLKDelaySCLLBOnly,
-       double DPPCLKDelayCNVCFormater,
-       double DPPCLKDelayCNVCCursor,
-       double DISPCLKDelaySubtotal,
-       unsigned int ScalerRecoutWidth,
-       enum output_format_class OutputFormat,
-       unsigned int VBlank,
-       unsigned int HTotal,
-       unsigned int MaxInterDCNTileRepeaters,
-       unsigned int VStartup,
-       unsigned int PageTableLevels,
-       bool VirtualMemoryEnable,
-       bool DynamicMetadataEnable,
-       unsigned int DynamicMetadataLinesBeforeActiveRequired,
-       unsigned int DynamicMetadataTransmittedBytes,
-       bool DCCEnable,
-       double UrgentLatency,
-       double UrgentExtraLatency,
-       double TCalc,
-       unsigned int PDEAndMetaPTEBytesFrame,
-       unsigned int MetaRowByte,
-       unsigned int PixelPTEBytesPerRow,
-       double PrefetchSourceLinesY,
-       unsigned int SwathWidthY,
-       double BytePerPixelDETY,
-       double VInitPreFillY,
-       unsigned int MaxNumSwathY,
-       double PrefetchSourceLinesC,
-       double BytePerPixelDETC,
-       double VInitPreFillC,
-       unsigned int MaxNumSwathC,
-       unsigned int SwathHeightY,
-       unsigned int SwathHeightC,
-       double TWait,
-       bool XFCEnabled,
-       double XFCRemoteSurfaceFlipDelay,
-       bool InterlaceEnable,
-       bool ProgressiveToInterlaceUnitInOPP,
-       double *DSTXAfterScaler,
-       double *DSTYAfterScaler,
-       double *DestinationLinesForPrefetch,
-       double *PrefetchBandwidth,
-       double *DestinationLinesToRequestVMInVBlank,
-       double *DestinationLinesToRequestRowInVBlank,
-       double *VRatioPrefetchY,
-       double *VRatioPrefetchC,
-       double *RequiredPrefetchPixDataBW,
-       unsigned int *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
-       double *Tno_bw)
+static bool CalculatePrefetchSchedule(
+               struct display_mode_lib *mode_lib,
+               double DPPCLK,
+               double DISPCLK,
+               double PixelClock,
+               double DCFClkDeepSleep,
+               unsigned int DSCDelay,
+               unsigned int DPPPerPlane,
+               bool ScalerEnabled,
+               unsigned int NumberOfCursors,
+               double DPPCLKDelaySubtotal,
+               double DPPCLKDelaySCL,
+               double DPPCLKDelaySCLLBOnly,
+               double DPPCLKDelayCNVCFormater,
+               double DPPCLKDelayCNVCCursor,
+               double DISPCLKDelaySubtotal,
+               unsigned int ScalerRecoutWidth,
+               enum output_format_class OutputFormat,
+               unsigned int VBlank,
+               unsigned int HTotal,
+               unsigned int MaxInterDCNTileRepeaters,
+               unsigned int VStartup,
+               unsigned int PageTableLevels,
+               bool VirtualMemoryEnable,
+               bool DynamicMetadataEnable,
+               unsigned int DynamicMetadataLinesBeforeActiveRequired,
+               unsigned int DynamicMetadataTransmittedBytes,
+               bool DCCEnable,
+               double UrgentLatency,
+               double UrgentExtraLatency,
+               double TCalc,
+               unsigned int PDEAndMetaPTEBytesFrame,
+               unsigned int MetaRowByte,
+               unsigned int PixelPTEBytesPerRow,
+               double PrefetchSourceLinesY,
+               unsigned int SwathWidthY,
+               double BytePerPixelDETY,
+               double VInitPreFillY,
+               unsigned int MaxNumSwathY,
+               double PrefetchSourceLinesC,
+               double BytePerPixelDETC,
+               double VInitPreFillC,
+               unsigned int MaxNumSwathC,
+               unsigned int SwathHeightY,
+               unsigned int SwathHeightC,
+               double TWait,
+               bool XFCEnabled,
+               double XFCRemoteSurfaceFlipDelay,
+               bool InterlaceEnable,
+               bool ProgressiveToInterlaceUnitInOPP,
+               double *DSTXAfterScaler,
+               double *DSTYAfterScaler,
+               double *DestinationLinesForPrefetch,
+               double *PrefetchBandwidth,
+               double *DestinationLinesToRequestVMInVBlank,
+               double *DestinationLinesToRequestRowInVBlank,
+               double *VRatioPrefetchY,
+               double *VRatioPrefetchC,
+               double *RequiredPrefetchPixDataBW,
+               unsigned int *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
+               double *Tno_bw)
 {
        bool MyError = false;
        unsigned int DPPCycles, DISPCLKCycles, VUpdateOffsetPix, VUpdateWidthPix, VReadyOffsetPix;
@@ -948,7 +1096,7 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
                return true;
 
        *DSTXAfterScaler = DPPCycles * PixelClock / DPPCLK + DISPCLKCycles * PixelClock / DISPCLK
-               + DSCDelay;
+                       + DSCDelay;
 
        if (DPPPerPlane > 1)
                *DSTXAfterScaler = *DSTXAfterScaler + ScalerRecoutWidth;
@@ -958,22 +1106,23 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
        else
                *DSTYAfterScaler = 0;
 
-       DSTTotalPixelsAfterScaler = ((double)(*DSTYAfterScaler * HTotal)) + *DSTXAfterScaler;
+       DSTTotalPixelsAfterScaler = ((double) (*DSTYAfterScaler * HTotal)) + *DSTXAfterScaler;
        *DSTYAfterScaler = dml_floor(DSTTotalPixelsAfterScaler / HTotal, 1);
-       *DSTXAfterScaler = DSTTotalPixelsAfterScaler - ((double)(*DSTYAfterScaler * HTotal));
+       *DSTXAfterScaler = DSTTotalPixelsAfterScaler - ((double) (*DSTYAfterScaler * HTotal));
 
        VUpdateOffsetPix = dml_ceil(HTotal / 4.0, 1);
        TotalRepeaterDelayTime = MaxInterDCNTileRepeaters * (2.0 / DPPCLK + 3.0 / DISPCLK);
        VUpdateWidthPix = (14.0 / DCFClkDeepSleep + 12.0 / DPPCLK + TotalRepeaterDelayTime)
-               * PixelClock;
+                       * PixelClock;
 
-       VReadyOffsetPix = dml_max(150.0 / DPPCLK,
-               TotalRepeaterDelayTime + 20.0 / DCFClkDeepSleep + 10.0 / DPPCLK)
-               * PixelClock;
+       VReadyOffsetPix = dml_max(
+                       150.0 / DPPCLK,
+                       TotalRepeaterDelayTime + 20.0 / DCFClkDeepSleep + 10.0 / DPPCLK)
+                       * PixelClock;
 
-       Tsetup = (double)(VUpdateOffsetPix + VUpdateWidthPix + VReadyOffsetPix) / PixelClock;
+       Tsetup = (double) (VUpdateOffsetPix + VUpdateWidthPix + VReadyOffsetPix) / PixelClock;
 
-       LineTime = (double)HTotal / PixelClock;
+       LineTime = (double) HTotal / PixelClock;
 
        if (DynamicMetadataEnable) {
                double Tdmbf, Tdmec, Tdmsks;
@@ -988,10 +1137,10 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
                if (InterlaceEnable && !ProgressiveToInterlaceUnitInOPP)
                        Tdmsks = Tdmsks / 2;
                if (VStartup * LineTime
-                       < Tsetup + TWait + UrgentExtraLatency + Tdmbf + Tdmec + Tdmsks) {
+                               < Tsetup + TWait + UrgentExtraLatency + Tdmbf + Tdmec + Tdmsks) {
                        MyError = true;
                        *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata = (Tsetup + TWait
-                               + UrgentExtraLatency + Tdmbf + Tdmec + Tdmsks) / LineTime;
+                                       + UrgentExtraLatency + Tdmbf + Tdmec + Tdmsks) / LineTime;
                } else
                        *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata = 0.0;
        } else
@@ -1010,30 +1159,33 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
                *Tno_bw = LineTime / 4;
 
        dst_y_prefetch_equ = VStartup - dml_max(TCalc + TWait, XFCRemoteSurfaceFlipDelay) / LineTime
-               - (Tsetup + Tdm) / LineTime
-               - (*DSTYAfterScaler + *DSTXAfterScaler / HTotal);
+                       - (Tsetup + Tdm) / LineTime
+                       - (*DSTYAfterScaler + *DSTXAfterScaler / HTotal);
 
        Tsw_oto = dml_max(PrefetchSourceLinesY, PrefetchSourceLinesC) * LineTime;
 
        prefetch_bw_oto = (MetaRowByte + PixelPTEBytesPerRow
-               + PrefetchSourceLinesY * SwathWidthY * dml_ceil(BytePerPixelDETY, 1)
-               + PrefetchSourceLinesC * SwathWidthY / 2 * dml_ceil(BytePerPixelDETC, 2))
-               / Tsw_oto;
+                       + PrefetchSourceLinesY * SwathWidthY * dml_ceil(BytePerPixelDETY, 1)
+                       + PrefetchSourceLinesC * SwathWidthY / 2 * dml_ceil(BytePerPixelDETC, 2))
+                       / Tsw_oto;
 
        if (VirtualMemoryEnable == true) {
                Tvm_oto =
-                       dml_max(*Tno_bw + PDEAndMetaPTEBytesFrame / prefetch_bw_oto,
-                               dml_max(UrgentExtraLatency
-                                       + UrgentLatency
-                                       * (PageTableLevels
-                                               - 1),
-                                       LineTime / 4.0));
+                               dml_max(
+                                               *Tno_bw + PDEAndMetaPTEBytesFrame / prefetch_bw_oto,
+                                               dml_max(
+                                                               UrgentExtraLatency
+                                                                               + UrgentLatency
+                                                                                               * (PageTableLevels
+                                                                                                               - 1),
+                                                               LineTime / 4.0));
        } else
                Tvm_oto = LineTime / 4.0;
 
        if ((VirtualMemoryEnable == true || DCCEnable == true)) {
-               Tr0_oto = dml_max((MetaRowByte + PixelPTEBytesPerRow) / prefetch_bw_oto,
-                       dml_max(UrgentLatency, dml_max(LineTime - Tvm_oto, LineTime / 4)));
+               Tr0_oto = dml_max(
+                               (MetaRowByte + PixelPTEBytesPerRow) / prefetch_bw_oto,
+                               dml_max(UrgentLatency, dml_max(LineTime - Tvm_oto, LineTime / 4)));
        } else
                Tr0_oto = LineTime - Tvm_oto;
 
@@ -1046,7 +1198,8 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
        else
                *DestinationLinesForPrefetch = dst_y_prefetch_equ;
 
-       *DestinationLinesForPrefetch = dml_floor(4.0 * (*DestinationLinesForPrefetch + 0.125), 1) / 4;
+       *DestinationLinesForPrefetch = dml_floor(4.0 * (*DestinationLinesForPrefetch + 0.125), 1)
+                       / 4;
 
        dml_print("DML: VStartup: %d\n", VStartup);
        dml_print("DML: TCalc: %f\n", TCalc);
@@ -1067,21 +1220,23 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
        *RequiredPrefetchPixDataBW = 0;
        if (*DestinationLinesForPrefetch > 1) {
                *PrefetchBandwidth = (PDEAndMetaPTEBytesFrame + 2 * MetaRowByte
-                       + 2 * PixelPTEBytesPerRow
-                       + PrefetchSourceLinesY * SwathWidthY * dml_ceil(BytePerPixelDETY, 1)
-                       + PrefetchSourceLinesC * SwathWidthY / 2
-                       * dml_ceil(BytePerPixelDETC, 2))
-                       / (*DestinationLinesForPrefetch * LineTime - *Tno_bw);
+                               + 2 * PixelPTEBytesPerRow
+                               + PrefetchSourceLinesY * SwathWidthY * dml_ceil(BytePerPixelDETY, 1)
+                               + PrefetchSourceLinesC * SwathWidthY / 2
+                                               * dml_ceil(BytePerPixelDETC, 2))
+                               / (*DestinationLinesForPrefetch * LineTime - *Tno_bw);
                if (VirtualMemoryEnable) {
                        TimeForFetchingMetaPTE =
-                               dml_max(*Tno_bw
-                                       + (double)PDEAndMetaPTEBytesFrame
-                                       / *PrefetchBandwidth,
-                                       dml_max(UrgentExtraLatency
-                                               + UrgentLatency
-                                               * (PageTableLevels
-                                                       - 1),
-                                               LineTime / 4));
+                                       dml_max(
+                                                       *Tno_bw
+                                                                       + (double) PDEAndMetaPTEBytesFrame
+                                                                                       / *PrefetchBandwidth,
+                                                       dml_max(
+                                                                       UrgentExtraLatency
+                                                                                       + UrgentLatency
+                                                                                                       * (PageTableLevels
+                                                                                                                       - 1),
+                                                                       LineTime / 4));
                } else {
                        if (NumberOfCursors > 0 || XFCEnabled)
                                TimeForFetchingMetaPTE = LineTime / 4;
@@ -1091,13 +1246,16 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
 
                if ((VirtualMemoryEnable == true || DCCEnable == true)) {
                        TimeForFetchingRowInVBlank =
-                               dml_max((MetaRowByte + PixelPTEBytesPerRow)
-                                       / *PrefetchBandwidth,
-                                       dml_max(UrgentLatency,
-                                               dml_max(LineTime
-                                                       - TimeForFetchingMetaPTE,
-                                                       LineTime
-                                                       / 4.0)));
+                                       dml_max(
+                                                       (MetaRowByte + PixelPTEBytesPerRow)
+                                                                       / *PrefetchBandwidth,
+                                                       dml_max(
+                                                                       UrgentLatency,
+                                                                       dml_max(
+                                                                                       LineTime
+                                                                                                       - TimeForFetchingMetaPTE,
+                                                                                       LineTime
+                                                                                                       / 4.0)));
                } else {
                        if (NumberOfCursors > 0 || XFCEnabled)
                                TimeForFetchingRowInVBlank = LineTime - TimeForFetchingMetaPTE;
@@ -1105,36 +1263,39 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
                                TimeForFetchingRowInVBlank = 0.0;
                }
 
-               *DestinationLinesToRequestVMInVBlank = dml_floor(4.0 * (TimeForFetchingMetaPTE / LineTime + 0.125),
-                       1) / 4.0;
+               *DestinationLinesToRequestVMInVBlank = dml_floor(
+                               4.0 * (TimeForFetchingMetaPTE / LineTime + 0.125),
+                               1) / 4.0;
 
-               *DestinationLinesToRequestRowInVBlank = dml_floor(4.0 * (TimeForFetchingRowInVBlank / LineTime + 0.125),
-                       1) / 4.0;
+               *DestinationLinesToRequestRowInVBlank = dml_floor(
+                               4.0 * (TimeForFetchingRowInVBlank / LineTime + 0.125),
+                               1) / 4.0;
 
                LinesToRequestPrefetchPixelData =
-                       *DestinationLinesForPrefetch
-                       - ((NumberOfCursors > 0 || VirtualMemoryEnable
-                               || DCCEnable) ?
-                               (*DestinationLinesToRequestVMInVBlank
-                                       + *DestinationLinesToRequestRowInVBlank) :
-                               0.0);
+                               *DestinationLinesForPrefetch
+                                               - ((NumberOfCursors > 0 || VirtualMemoryEnable
+                                                               || DCCEnable) ?
+                                                               (*DestinationLinesToRequestVMInVBlank
+                                                                               + *DestinationLinesToRequestRowInVBlank) :
+                                                               0.0);
 
                if (LinesToRequestPrefetchPixelData > 0) {
 
-                       *VRatioPrefetchY = (double)PrefetchSourceLinesY
-                               / LinesToRequestPrefetchPixelData;
+                       *VRatioPrefetchY = (double) PrefetchSourceLinesY
+                                       / LinesToRequestPrefetchPixelData;
                        *VRatioPrefetchY = dml_max(*VRatioPrefetchY, 1.0);
                        if ((SwathHeightY > 4) && (VInitPreFillY > 3)) {
                                if (LinesToRequestPrefetchPixelData > (VInitPreFillY - 3.0) / 2.0) {
                                        *VRatioPrefetchY =
-                                               dml_max((double)PrefetchSourceLinesY
-                                                       / LinesToRequestPrefetchPixelData,
-                                                       (double)MaxNumSwathY
-                                                       * SwathHeightY
-                                                       / (LinesToRequestPrefetchPixelData
-                                                               - (VInitPreFillY
-                                                                       - 3.0)
-                                                               / 2.0));
+                                                       dml_max(
+                                                                       (double) PrefetchSourceLinesY
+                                                                                       / LinesToRequestPrefetchPixelData,
+                                                                       (double) MaxNumSwathY
+                                                                                       * SwathHeightY
+                                                                                       / (LinesToRequestPrefetchPixelData
+                                                                                                       - (VInitPreFillY
+                                                                                                                       - 3.0)
+                                                                                                                       / 2.0));
                                        *VRatioPrefetchY = dml_max(*VRatioPrefetchY, 1.0);
                                } else {
                                        MyError = true;
@@ -1142,20 +1303,21 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
                                }
                        }
 
-                       *VRatioPrefetchC = (double)PrefetchSourceLinesC
-                               / LinesToRequestPrefetchPixelData;
+                       *VRatioPrefetchC = (double) PrefetchSourceLinesC
+                                       / LinesToRequestPrefetchPixelData;
                        *VRatioPrefetchC = dml_max(*VRatioPrefetchC, 1.0);
 
                        if ((SwathHeightC > 4)) {
                                if (LinesToRequestPrefetchPixelData > (VInitPreFillC - 3.0) / 2.0) {
                                        *VRatioPrefetchC =
-                                               dml_max(*VRatioPrefetchC,
-                                                       (double)MaxNumSwathC
-                                                       * SwathHeightC
-                                                       / (LinesToRequestPrefetchPixelData
-                                                               - (VInitPreFillC
-                                                                       - 3.0)
-                                                               / 2.0));
+                                                       dml_max(
+                                                                       *VRatioPrefetchC,
+                                                                       (double) MaxNumSwathC
+                                                                                       * SwathHeightC
+                                                                                       / (LinesToRequestPrefetchPixelData
+                                                                                                       - (VInitPreFillC
+                                                                                                                       - 3.0)
+                                                                                                                       / 2.0));
                                        *VRatioPrefetchC = dml_max(*VRatioPrefetchC, 1.0);
                                } else {
                                        MyError = true;
@@ -1164,17 +1326,19 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
                        }
 
                        *RequiredPrefetchPixDataBW =
-                               DPPPerPlane
-                               * ((double)PrefetchSourceLinesY
-                                       / LinesToRequestPrefetchPixelData
-                                       * dml_ceil(BytePerPixelDETY,
-                                               1)
-                                       + (double)PrefetchSourceLinesC
-                                       / LinesToRequestPrefetchPixelData
-                                       * dml_ceil(BytePerPixelDETC,
-                                               2)
-                                       / 2)
-                               * SwathWidthY / LineTime;
+                                       DPPPerPlane
+                                                       * ((double) PrefetchSourceLinesY
+                                                                       / LinesToRequestPrefetchPixelData
+                                                                       * dml_ceil(
+                                                                                       BytePerPixelDETY,
+                                                                                       1)
+                                                                       + (double) PrefetchSourceLinesC
+                                                                                       / LinesToRequestPrefetchPixelData
+                                                                                       * dml_ceil(
+                                                                                                       BytePerPixelDETC,
+                                                                                                       2)
+                                                                                       / 2)
+                                                       * SwathWidthY / LineTime;
                } else {
                        MyError = true;
                        *VRatioPrefetchY = 0;
@@ -1202,25 +1366,26 @@ static bool CalculatePrefetchSchedule(struct display_mode_lib *mode_lib,
        return MyError;
 }
 
-static double CeilToDFSGranularity(double Clock, double VCOSpeed)
+static double RoundToDFSGranularityUp(double Clock, double VCOSpeed)
 {
        return VCOSpeed * 4 / dml_floor(VCOSpeed * 4 / Clock, 1);
 }
 
-static double FloorToDFSGranularity(double Clock, double VCOSpeed)
+static double RoundToDFSGranularityDown(double Clock, double VCOSpeed)
 {
        return VCOSpeed * 4 / dml_ceil(VCOSpeed * 4 / Clock, 1);
 }
 
-static double CalculatePrefetchSourceLines(struct display_mode_lib *mode_lib,
-       double VRatio,
-       double vtaps,
-       bool Interlace,
-       bool ProgressiveToInterlaceUnitInOPP,
-       unsigned int SwathHeight,
-       unsigned int ViewportYStart,
-       double *VInitPreFill,
-       unsigned int *MaxNumSwath)
+static double CalculatePrefetchSourceLines(
+               struct display_mode_lib *mode_lib,
+               double VRatio,
+               double vtaps,
+               bool Interlace,
+               bool ProgressiveToInterlaceUnitInOPP,
+               unsigned int SwathHeight,
+               unsigned int ViewportYStart,
+               double *VInitPreFill,
+               unsigned int *MaxNumSwath)
 {
        unsigned int MaxPartialSwath;
 
@@ -1234,50 +1399,54 @@ static double CalculatePrefetchSourceLines(struct display_mode_lib *mode_lib,
                *MaxNumSwath = dml_ceil((*VInitPreFill - 1.0) / SwathHeight, 1) + 1.0;
 
                if (*VInitPreFill > 1.0)
-                       MaxPartialSwath = (unsigned int)(*VInitPreFill - 2) % SwathHeight;
+                       MaxPartialSwath = (unsigned int) (*VInitPreFill - 2) % SwathHeight;
                else
-                       MaxPartialSwath = (unsigned int)(*VInitPreFill + SwathHeight - 2) % SwathHeight;
+                       MaxPartialSwath = (unsigned int) (*VInitPreFill + SwathHeight - 2)
+                                       % SwathHeight;
                MaxPartialSwath = dml_max(1U, MaxPartialSwath);
 
        } else {
 
                if (ViewportYStart != 0)
-                       dml_print("WARNING DML: using viewport y position of 0 even though actual viewport y position is non-zero in prefetch source lines calculation\n");
+                       dml_print(
+                                       "WARNING DML: using viewport y position of 0 even though actual viewport y position is non-zero in prefetch source lines calculation\n");
 
                *MaxNumSwath = dml_ceil(*VInitPreFill / SwathHeight, 1);
 
                if (*VInitPreFill > 1.0)
-                       MaxPartialSwath = (unsigned int)(*VInitPreFill - 1) % SwathHeight;
+                       MaxPartialSwath = (unsigned int) (*VInitPreFill - 1) % SwathHeight;
                else
-                       MaxPartialSwath = (unsigned int)(*VInitPreFill + SwathHeight - 1) % SwathHeight;
+                       MaxPartialSwath = (unsigned int) (*VInitPreFill + SwathHeight - 1)
+                                       % SwathHeight;
        }
 
        return *MaxNumSwath * SwathHeight + MaxPartialSwath;
 }
 
-static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
-       bool DCCEnable,
-       unsigned int BlockHeight256Bytes,
-       unsigned int BlockWidth256Bytes,
-       enum source_format_class SourcePixelFormat,
-       unsigned int SurfaceTiling,
-       unsigned int BytePerPixel,
-       enum scan_direction_class ScanDirection,
-       unsigned int ViewportWidth,
-       unsigned int ViewportHeight,
-       unsigned int SwathWidth,
-       bool VirtualMemoryEnable,
-       unsigned int VMMPageSize,
-       unsigned int PTEBufferSizeInRequests,
-       unsigned int PDEProcessingBufIn64KBReqs,
-       unsigned int Pitch,
-       unsigned int DCCMetaPitch,
-       unsigned int *MacroTileWidth,
-       unsigned int *MetaRowByte,
-       unsigned int *PixelPTEBytesPerRow,
-       bool *PTEBufferSizeNotExceeded,
-       unsigned int *dpte_row_height,
-       unsigned int *meta_row_height)
+static unsigned int CalculateVMAndRowBytes(
+               struct display_mode_lib *mode_lib,
+               bool DCCEnable,
+               unsigned int BlockHeight256Bytes,
+               unsigned int BlockWidth256Bytes,
+               enum source_format_class SourcePixelFormat,
+               unsigned int SurfaceTiling,
+               unsigned int BytePerPixel,
+               enum scan_direction_class ScanDirection,
+               unsigned int ViewportWidth,
+               unsigned int ViewportHeight,
+               unsigned int SwathWidth,
+               bool VirtualMemoryEnable,
+               unsigned int VMMPageSize,
+               unsigned int PTEBufferSizeInRequests,
+               unsigned int PDEProcessingBufIn64KBReqs,
+               unsigned int Pitch,
+               unsigned int DCCMetaPitch,
+               unsigned int *MacroTileWidth,
+               unsigned int *MetaRowByte,
+               unsigned int *PixelPTEBytesPerRow,
+               bool *PTEBufferSizeNotExceeded,
+               unsigned int *dpte_row_height,
+               unsigned int *meta_row_height)
 {
        unsigned int MetaRequestHeight;
        unsigned int MetaRequestWidth;
@@ -1298,31 +1467,33 @@ static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
                MetaRequestWidth = 8 * BlockWidth256Bytes;
                if (ScanDirection == dm_horz) {
                        *meta_row_height = MetaRequestHeight;
-                       MetaSurfWidth = dml_ceil((double)SwathWidth - 1, MetaRequestWidth)
-                               + MetaRequestWidth;
+                       MetaSurfWidth = dml_ceil((double) SwathWidth - 1, MetaRequestWidth)
+                                       + MetaRequestWidth;
                        *MetaRowByte = MetaSurfWidth * MetaRequestHeight * BytePerPixel / 256.0;
                } else {
                        *meta_row_height = MetaRequestWidth;
-                       MetaSurfHeight = dml_ceil((double)SwathWidth - 1, MetaRequestHeight)
-                               + MetaRequestHeight;
+                       MetaSurfHeight = dml_ceil((double) SwathWidth - 1, MetaRequestHeight)
+                                       + MetaRequestHeight;
                        *MetaRowByte = MetaSurfHeight * MetaRequestWidth * BytePerPixel / 256.0;
                }
                if (ScanDirection == dm_horz) {
                        DCCMetaSurfaceBytes = DCCMetaPitch
-                               * (dml_ceil(ViewportHeight - 1, 64 * BlockHeight256Bytes)
-                                       + 64 * BlockHeight256Bytes) * BytePerPixel
-                               / 256;
+                                       * (dml_ceil(ViewportHeight - 1, 64 * BlockHeight256Bytes)
+                                                       + 64 * BlockHeight256Bytes) * BytePerPixel
+                                       / 256;
                } else {
                        DCCMetaSurfaceBytes = DCCMetaPitch
-                               * (dml_ceil((double)ViewportHeight - 1,
-                                       64 * BlockHeight256Bytes)
-                                       + 64 * BlockHeight256Bytes) * BytePerPixel
-                               / 256;
+                                       * (dml_ceil(
+                                                       (double) ViewportHeight - 1,
+                                                       64 * BlockHeight256Bytes)
+                                                       + 64 * BlockHeight256Bytes) * BytePerPixel
+                                       / 256;
                }
                if (VirtualMemoryEnable == true) {
-                       MetaPTEBytesFrame = (dml_ceil((double)(DCCMetaSurfaceBytes - VMMPageSize)
-                               / (8 * VMMPageSize),
-                               1) + 1) * 64;
+                       MetaPTEBytesFrame = (dml_ceil(
+                                       (double) (DCCMetaSurfaceBytes - VMMPageSize)
+                                                       / (8 * VMMPageSize),
+                                       1) + 1) * 64;
                        MPDEBytesFrame = 128 * (mode_lib->vba.MaxPageTableLevels - 1);
                } else {
                        MetaPTEBytesFrame = 0;
@@ -1338,13 +1509,13 @@ static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
                MacroTileSizeBytes = 256;
                MacroTileHeight = 1;
        } else if (SurfaceTiling == dm_sw_4kb_s || SurfaceTiling == dm_sw_4kb_s_x
-               || SurfaceTiling == dm_sw_4kb_d || SurfaceTiling == dm_sw_4kb_d_x) {
+                       || SurfaceTiling == dm_sw_4kb_d || SurfaceTiling == dm_sw_4kb_d_x) {
                MacroTileSizeBytes = 4096;
                MacroTileHeight = 4 * BlockHeight256Bytes;
        } else if (SurfaceTiling == dm_sw_64kb_s || SurfaceTiling == dm_sw_64kb_s_t
-               || SurfaceTiling == dm_sw_64kb_s_x || SurfaceTiling == dm_sw_64kb_d
-               || SurfaceTiling == dm_sw_64kb_d_t || SurfaceTiling == dm_sw_64kb_d_x
-               || SurfaceTiling == dm_sw_64kb_r_x) {
+                       || SurfaceTiling == dm_sw_64kb_s_x || SurfaceTiling == dm_sw_64kb_d
+                       || SurfaceTiling == dm_sw_64kb_d_t || SurfaceTiling == dm_sw_64kb_d_x
+                       || SurfaceTiling == dm_sw_64kb_r_x) {
                MacroTileSizeBytes = 65536;
                MacroTileHeight = 16 * BlockHeight256Bytes;
        } else {
@@ -1356,30 +1527,34 @@ static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
        if (VirtualMemoryEnable == true && mode_lib->vba.MaxPageTableLevels > 1) {
                if (ScanDirection == dm_horz) {
                        DPDE0BytesFrame =
-                               64
-                               * (dml_ceil(((Pitch
-                                       * (dml_ceil(ViewportHeight
-                                               - 1,
-                                               MacroTileHeight)
-                                               + MacroTileHeight)
-                                       * BytePerPixel)
-                                       - MacroTileSizeBytes)
-                                       / (8
-                                               * 2097152),
-                                       1) + 1);
+                                       64
+                                                       * (dml_ceil(
+                                                                       ((Pitch
+                                                                                       * (dml_ceil(
+                                                                                                       ViewportHeight
+                                                                                                                       - 1,
+                                                                                                       MacroTileHeight)
+                                                                                                       + MacroTileHeight)
+                                                                                       * BytePerPixel)
+                                                                                       - MacroTileSizeBytes)
+                                                                                       / (8
+                                                                                                       * 2097152),
+                                                                       1) + 1);
                } else {
                        DPDE0BytesFrame =
-                               64
-                               * (dml_ceil(((Pitch
-                                       * (dml_ceil((double)SwathWidth
-                                               - 1,
-                                               MacroTileHeight)
-                                               + MacroTileHeight)
-                                       * BytePerPixel)
-                                       - MacroTileSizeBytes)
-                                       / (8
-                                               * 2097152),
-                                       1) + 1);
+                                       64
+                                                       * (dml_ceil(
+                                                                       ((Pitch
+                                                                                       * (dml_ceil(
+                                                                                                       (double) SwathWidth
+                                                                                                                       - 1,
+                                                                                                       MacroTileHeight)
+                                                                                                       + MacroTileHeight)
+                                                                                       * BytePerPixel)
+                                                                                       - MacroTileSizeBytes)
+                                                                                       / (8
+                                                                                                       * 2097152),
+                                                                       1) + 1);
                }
                ExtraDPDEBytesFrame = 128 * (mode_lib->vba.MaxPageTableLevels - 2);
        } else {
@@ -1388,7 +1563,7 @@ static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
        }
 
        PDEAndMetaPTEBytesFrame = MetaPTEBytesFrame + MPDEBytesFrame + DPDE0BytesFrame
-               + ExtraDPDEBytesFrame;
+                       + ExtraDPDEBytesFrame;
 
        if (VirtualMemoryEnable == true) {
                unsigned int PTERequestSize;
@@ -1429,33 +1604,39 @@ static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
 
                if (SurfaceTiling == dm_sw_linear) {
                        *dpte_row_height =
-                               dml_min(128,
-                                       1
-                                       << (unsigned int)dml_floor(dml_log2(dml_min((double)PTEBufferSizeInRequests
-                                               * PixelPTEReqWidth,
-                                               EffectivePDEProcessingBufIn64KBReqs
-                                               * 65536.0
-                                               / BytePerPixel)
-                                               / Pitch),
-                                               1));
+                                       dml_min(
+                                                       128,
+                                                       1
+                                                                       << (unsigned int) dml_floor(
+                                                                                       dml_log2(
+                                                                                                       dml_min(
+                                                                                                                       (double) PTEBufferSizeInRequests
+                                                                                                                                       * PixelPTEReqWidth,
+                                                                                                                       EffectivePDEProcessingBufIn64KBReqs
+                                                                                                                                       * 65536.0
+                                                                                                                                       / BytePerPixel)
+                                                                                                                       / Pitch),
+                                                                                       1));
                        *PixelPTEBytesPerRow = PTERequestSize
-                               * (dml_ceil((double)(Pitch * *dpte_row_height - 1)
-                                       / PixelPTEReqWidth,
-                                       1) + 1);
+                                       * (dml_ceil(
+                                                       (double) (Pitch * *dpte_row_height - 1)
+                                                                       / PixelPTEReqWidth,
+                                                       1) + 1);
                } else if (ScanDirection == dm_horz) {
                        *dpte_row_height = PixelPTEReqHeight;
                        *PixelPTEBytesPerRow = PTERequestSize
-                               * (dml_ceil(((double)SwathWidth - 1) / PixelPTEReqWidth, 1)
-                                       + 1);
+                                       * (dml_ceil(((double) SwathWidth - 1) / PixelPTEReqWidth, 1)
+                                                       + 1);
                } else {
                        *dpte_row_height = dml_min(PixelPTEReqWidth, *MacroTileWidth);
                        *PixelPTEBytesPerRow = PTERequestSize
-                               * (dml_ceil(((double)SwathWidth - 1)
-                                       / PixelPTEReqHeight,
-                                       1) + 1);
+                                       * (dml_ceil(
+                                                       ((double) SwathWidth - 1)
+                                                                       / PixelPTEReqHeight,
+                                                       1) + 1);
                }
                if (*PixelPTEBytesPerRow * (1 - FractionOfPTEReturnDrop)
-                       <= 64 * PTEBufferSizeInRequests) {
+                               <= 64 * PTEBufferSizeInRequests) {
                        *PTEBufferSizeNotExceeded = true;
                } else {
                        *PTEBufferSizeNotExceeded = false;
@@ -1468,7 +1649,8 @@ static unsigned int CalculateVMAndRowBytes(struct display_mode_lib *mode_lib,
        return PDEAndMetaPTEBytesFrame;
 }
 
-static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(struct display_mode_lib *mode_lib)
+static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation(
+               struct display_mode_lib *mode_lib)
 {
        unsigned int j, k;
 
@@ -1481,81 +1663,107 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        //
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.WritebackEnable[k]) {
-                       mode_lib->vba.WritebackDISPCLK = dml_max(mode_lib->vba.WritebackDISPCLK,
-                               CalculateWriteBackDISPCLK(mode_lib->vba.WritebackPixelFormat[k],
-                                       mode_lib->vba.PixelClock[k],
-                                       mode_lib->vba.WritebackHRatio[k],
-                                       mode_lib->vba.WritebackVRatio[k],
-                                       mode_lib->vba.WritebackLumaHTaps[k],
-                                       mode_lib->vba.WritebackLumaVTaps[k],
-                                       mode_lib->vba.WritebackChromaHTaps[k],
-                                       mode_lib->vba.WritebackChromaVTaps[k],
-                                       mode_lib->vba.WritebackDestinationWidth[k],
-                                       mode_lib->vba.HTotal[k],
-                                       mode_lib->vba.WritebackChromaLineBufferWidth));
+                       mode_lib->vba.WritebackDISPCLK =
+                                       dml_max(
+                                                       mode_lib->vba.WritebackDISPCLK,
+                                                       CalculateWriteBackDISPCLK(
+                                                                       mode_lib->vba.WritebackPixelFormat[k],
+                                                                       mode_lib->vba.PixelClock[k],
+                                                                       mode_lib->vba.WritebackHRatio[k],
+                                                                       mode_lib->vba.WritebackVRatio[k],
+                                                                       mode_lib->vba.WritebackLumaHTaps[k],
+                                                                       mode_lib->vba.WritebackLumaVTaps[k],
+                                                                       mode_lib->vba.WritebackChromaHTaps[k],
+                                                                       mode_lib->vba.WritebackChromaVTaps[k],
+                                                                       mode_lib->vba.WritebackDestinationWidth[k],
+                                                                       mode_lib->vba.HTotal[k],
+                                                                       mode_lib->vba.WritebackChromaLineBufferWidth));
                }
        }
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.HRatio[k] > 1) {
-                       mode_lib->vba.PSCL_THROUGHPUT_LUMA[k] = dml_min(mode_lib->vba.MaxDCHUBToPSCLThroughput,
-                               mode_lib->vba.MaxPSCLToLBThroughput * mode_lib->vba.HRatio[k]
-                               / dml_ceil(mode_lib->vba.htaps[k] / 6.0, 1));
+                       mode_lib->vba.PSCL_THROUGHPUT_LUMA[k] = dml_min(
+                                       mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                       mode_lib->vba.MaxPSCLToLBThroughput
+                                                       * mode_lib->vba.HRatio[k]
+                                                       / dml_ceil(
+                                                                       mode_lib->vba.htaps[k]
+                                                                                       / 6.0,
+                                                                       1));
                } else {
-                       mode_lib->vba.PSCL_THROUGHPUT_LUMA[k] = dml_min(mode_lib->vba.MaxDCHUBToPSCLThroughput,
-                               mode_lib->vba.MaxPSCLToLBThroughput);
+                       mode_lib->vba.PSCL_THROUGHPUT_LUMA[k] = dml_min(
+                                       mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                       mode_lib->vba.MaxPSCLToLBThroughput);
                }
 
                mode_lib->vba.DPPCLKUsingSingleDPPLuma =
-                       mode_lib->vba.PixelClock[k]
-                       * dml_max(mode_lib->vba.vtaps[k] / 6.0
-                               * dml_min(1.0,
-                                       mode_lib->vba.HRatio[k]),
-                               dml_max(mode_lib->vba.HRatio[k]
-                                       * mode_lib->vba.VRatio[k]
-                                       / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k],
-                                       1.0));
+                               mode_lib->vba.PixelClock[k]
+                                               * dml_max(
+                                                               mode_lib->vba.vtaps[k] / 6.0
+                                                                               * dml_min(
+                                                                                               1.0,
+                                                                                               mode_lib->vba.HRatio[k]),
+                                                               dml_max(
+                                                                               mode_lib->vba.HRatio[k]
+                                                                                               * mode_lib->vba.VRatio[k]
+                                                                                               / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k],
+                                                                               1.0));
 
                if ((mode_lib->vba.htaps[k] > 6 || mode_lib->vba.vtaps[k] > 6)
-                       && mode_lib->vba.DPPCLKUsingSingleDPPLuma < 2 * mode_lib->vba.PixelClock[k]) {
+                               && mode_lib->vba.DPPCLKUsingSingleDPPLuma
+                                               < 2 * mode_lib->vba.PixelClock[k]) {
                        mode_lib->vba.DPPCLKUsingSingleDPPLuma = 2 * mode_lib->vba.PixelClock[k];
                }
 
-               if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8 && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
+               if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
                        mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k] = 0.0;
-                       mode_lib->vba.DPPCLKUsingSingleDPP[k] = mode_lib->vba.DPPCLKUsingSingleDPPLuma;
+                       mode_lib->vba.DPPCLKUsingSingleDPP[k] =
+                                       mode_lib->vba.DPPCLKUsingSingleDPPLuma;
                } else {
                        if (mode_lib->vba.HRatio[k] > 1) {
                                mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k] =
-                                       dml_min(mode_lib->vba.MaxDCHUBToPSCLThroughput,
-                                               mode_lib->vba.MaxPSCLToLBThroughput * mode_lib->vba.HRatio[k]
-                                               / 2
-                                               / dml_ceil(mode_lib->vba.HTAPsChroma[k]
-                                                       / 6.0,
-                                                       1.0));
+                                               dml_min(
+                                                               mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                                               mode_lib->vba.MaxPSCLToLBThroughput
+                                                                               * mode_lib->vba.HRatio[k]
+                                                                               / 2
+                                                                               / dml_ceil(
+                                                                                               mode_lib->vba.HTAPsChroma[k]
+                                                                                                               / 6.0,
+                                                                                               1.0));
                        } else {
-                               mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k] = dml_min(mode_lib->vba.MaxDCHUBToPSCLThroughput,
-                                       mode_lib->vba.MaxPSCLToLBThroughput);
+                               mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k] = dml_min(
+                                               mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                               mode_lib->vba.MaxPSCLToLBThroughput);
                        }
                        mode_lib->vba.DPPCLKUsingSingleDPPChroma =
-                               mode_lib->vba.PixelClock[k]
-                               * dml_max(mode_lib->vba.VTAPsChroma[k] / 6.0
-                                       * dml_min(1.0,
-                                               mode_lib->vba.HRatio[k]
-                                               / 2),
-                                       dml_max(mode_lib->vba.HRatio[k]
-                                               * mode_lib->vba.VRatio[k]
-                                               / 4
-                                               / mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k],
-                                               1.0));
+                                       mode_lib->vba.PixelClock[k]
+                                                       * dml_max(
+                                                                       mode_lib->vba.VTAPsChroma[k]
+                                                                                       / 6.0
+                                                                                       * dml_min(
+                                                                                                       1.0,
+                                                                                                       mode_lib->vba.HRatio[k]
+                                                                                                                       / 2),
+                                                                       dml_max(
+                                                                                       mode_lib->vba.HRatio[k]
+                                                                                                       * mode_lib->vba.VRatio[k]
+                                                                                                       / 4
+                                                                                                       / mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k],
+                                                                                       1.0));
 
                        if ((mode_lib->vba.HTAPsChroma[k] > 6 || mode_lib->vba.VTAPsChroma[k] > 6)
-                               && mode_lib->vba.DPPCLKUsingSingleDPPChroma < 2 * mode_lib->vba.PixelClock[k]) {
-                               mode_lib->vba.DPPCLKUsingSingleDPPChroma = 2 * mode_lib->vba.PixelClock[k];
+                                       && mode_lib->vba.DPPCLKUsingSingleDPPChroma
+                                                       < 2 * mode_lib->vba.PixelClock[k]) {
+                               mode_lib->vba.DPPCLKUsingSingleDPPChroma = 2
+                                               * mode_lib->vba.PixelClock[k];
                        }
 
-                       mode_lib->vba.DPPCLKUsingSingleDPP[k] = dml_max(mode_lib->vba.DPPCLKUsingSingleDPPLuma,
-                               mode_lib->vba.DPPCLKUsingSingleDPPChroma);
+                       mode_lib->vba.DPPCLKUsingSingleDPP[k] = dml_max(
+                                       mode_lib->vba.DPPCLKUsingSingleDPPLuma,
+                                       mode_lib->vba.DPPCLKUsingSingleDPPChroma);
                }
        }
 
@@ -1564,67 +1772,90 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                        continue;
                if (mode_lib->vba.ODMCombineEnabled[k]) {
                        mode_lib->vba.DISPCLKWithRamping =
-                               dml_max(mode_lib->vba.DISPCLKWithRamping,
-                                       mode_lib->vba.PixelClock[k] / 2
-                                       * (1
-                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
-                                               / 100)
-                                       * (1
-                                               + mode_lib->vba.DISPCLKRampingMargin
-                                               / 100));
+                                       dml_max(
+                                                       mode_lib->vba.DISPCLKWithRamping,
+                                                       mode_lib->vba.PixelClock[k] / 2
+                                                                       * (1
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100)
+                                                                       * (1
+                                                                                       + mode_lib->vba.DISPCLKRampingMargin
+                                                                                                       / 100));
                        mode_lib->vba.DISPCLKWithoutRamping =
-                               dml_max(mode_lib->vba.DISPCLKWithoutRamping,
-                                       mode_lib->vba.PixelClock[k] / 2
-                                       * (1
-                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
-                                               / 100));
+                                       dml_max(
+                                                       mode_lib->vba.DISPCLKWithoutRamping,
+                                                       mode_lib->vba.PixelClock[k] / 2
+                                                                       * (1
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100));
                } else if (!mode_lib->vba.ODMCombineEnabled[k]) {
-                       mode_lib->vba.DISPCLKWithRamping = dml_max(mode_lib->vba.DISPCLKWithRamping,
-                               mode_lib->vba.PixelClock[k] * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100)
-                               * (1 + mode_lib->vba.DISPCLKRampingMargin / 100));
+                       mode_lib->vba.DISPCLKWithRamping =
+                                       dml_max(
+                                                       mode_lib->vba.DISPCLKWithRamping,
+                                                       mode_lib->vba.PixelClock[k]
+                                                                       * (1
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100)
+                                                                       * (1
+                                                                                       + mode_lib->vba.DISPCLKRampingMargin
+                                                                                                       / 100));
                        mode_lib->vba.DISPCLKWithoutRamping =
-                               dml_max(mode_lib->vba.DISPCLKWithoutRamping,
-                                       mode_lib->vba.PixelClock[k]
-                                       * (1
-                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
-                                               / 100));
+                                       dml_max(
+                                                       mode_lib->vba.DISPCLKWithoutRamping,
+                                                       mode_lib->vba.PixelClock[k]
+                                                                       * (1
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100));
                }
        }
 
-       mode_lib->vba.DISPCLKWithRamping = dml_max(mode_lib->vba.DISPCLKWithRamping, mode_lib->vba.WritebackDISPCLK);
-       mode_lib->vba.DISPCLKWithoutRamping = dml_max(mode_lib->vba.DISPCLKWithoutRamping, mode_lib->vba.WritebackDISPCLK);
+       mode_lib->vba.DISPCLKWithRamping = dml_max(
+                       mode_lib->vba.DISPCLKWithRamping,
+                       mode_lib->vba.WritebackDISPCLK);
+       mode_lib->vba.DISPCLKWithoutRamping = dml_max(
+                       mode_lib->vba.DISPCLKWithoutRamping,
+                       mode_lib->vba.WritebackDISPCLK);
 
-       mode_lib->vba.MaxDispclk = mode_lib->vba.soc.clock_limits[NumberOfStates - 1].dispclk_mhz;
        ASSERT(mode_lib->vba.DISPCLKDPPCLKVCOSpeed != 0);
-       mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity = CeilToDFSGranularity(
+       mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity = RoundToDFSGranularityUp(
                        mode_lib->vba.DISPCLKWithRamping,
                        mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
-       mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity = CeilToDFSGranularity(
+       mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity = RoundToDFSGranularityUp(
                        mode_lib->vba.DISPCLKWithoutRamping,
                        mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
-       mode_lib->vba.MaxDispclkRoundedToDFSGranularity = FloorToDFSGranularity(
-                       mode_lib->vba.MaxDispclk,
+       mode_lib->vba.MaxDispclkRoundedToDFSGranularity = RoundToDFSGranularityDown(
+                       mode_lib->vba.soc.clock_limits[NumberOfStates - 1].dispclk_mhz,
                        mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
        if (mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity
-       > mode_lib->vba.MaxDispclkRoundedToDFSGranularity) {
-               mode_lib->vba.DISPCLK_calculated = mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity;
+                       > mode_lib->vba.MaxDispclkRoundedToDFSGranularity) {
+               mode_lib->vba.DISPCLK_calculated =
+                               mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity;
        } else if (mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity
-                               > mode_lib->vba.MaxDispclkRoundedToDFSGranularity) {
+                       > mode_lib->vba.MaxDispclkRoundedToDFSGranularity) {
                mode_lib->vba.DISPCLK_calculated = mode_lib->vba.MaxDispclkRoundedToDFSGranularity;
        } else {
-               mode_lib->vba.DISPCLK_calculated = mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity;
+               mode_lib->vba.DISPCLK_calculated =
+                               mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity;
        }
        DTRACE("   dispclk_mhz (calculated) = %f", mode_lib->vba.DISPCLK_calculated);
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
-               mode_lib->vba.DPPCLK_calculated[k] = mode_lib->vba.DPPCLKUsingSingleDPP[k] / mode_lib->vba.DPPPerPlane[k]
-                       * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100);
-               mode_lib->vba.GlobalDPPCLK = dml_max(mode_lib->vba.GlobalDPPCLK, mode_lib->vba.DPPCLK_calculated[k]);
+               mode_lib->vba.DPPCLK_calculated[k] = mode_lib->vba.DPPCLKUsingSingleDPP[k]
+                               / mode_lib->vba.DPPPerPlane[k]
+                               * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100);
+               mode_lib->vba.GlobalDPPCLK = dml_max(
+                               mode_lib->vba.GlobalDPPCLK,
+                               mode_lib->vba.DPPCLK_calculated[k]);
        }
-       mode_lib->vba.GlobalDPPCLK = CeilToDFSGranularity(mode_lib->vba.GlobalDPPCLK, mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
+       mode_lib->vba.GlobalDPPCLK = RoundToDFSGranularityUp(
+                       mode_lib->vba.GlobalDPPCLK,
+                       mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                mode_lib->vba.DPPCLK_calculated[k] = mode_lib->vba.GlobalDPPCLK / 255
-                       * dml_ceil(mode_lib->vba.DPPCLK_calculated[k] * 255 / mode_lib->vba.GlobalDPPCLK, 1);
+                               * dml_ceil(
+                                               mode_lib->vba.DPPCLK_calculated[k] * 255
+                                                               / mode_lib->vba.GlobalDPPCLK,
+                                               1);
                DTRACE("   dppclk_mhz[%i] (calculated) = %f", k, mode_lib->vba.DPPCLK_calculated[k]);
        }
 
@@ -1634,15 +1865,27 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                if (mode_lib->vba.DCCEnable[k])
                        mode_lib->vba.DCCEnabledAnyPlane = true;
 
-       mode_lib->vba.ReturnBandwidthToDCN = dml_min(mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK, mode_lib->vba.FabricAndDRAMBandwidth * 1000)
-               * mode_lib->vba.PercentOfIdealDRAMAndFabricBWReceivedAfterUrgLatency / 100;
+       mode_lib->vba.ReturnBandwidthToDCN = dml_min(
+                       mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK,
+                       mode_lib->vba.FabricAndDRAMBandwidth * 1000)
+                       * mode_lib->vba.PercentOfIdealDRAMAndFabricBWReceivedAfterUrgLatency / 100;
 
        mode_lib->vba.ReturnBW = mode_lib->vba.ReturnBandwidthToDCN;
-       mode_lib->vba.ReturnBW = adjust_ReturnBW(mode_lib, mode_lib->vba.ReturnBW, mode_lib->vba.DCCEnabledAnyPlane, mode_lib->vba.ReturnBandwidthToDCN);
+       mode_lib->vba.ReturnBW = adjust_ReturnBW(
+                       mode_lib,
+                       mode_lib->vba.ReturnBW,
+                       mode_lib->vba.DCCEnabledAnyPlane,
+                       mode_lib->vba.ReturnBandwidthToDCN);
 
        // Let's do this calculation again??
-       mode_lib->vba.ReturnBandwidthToDCN = dml_min(mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK, mode_lib->vba.FabricAndDRAMBandwidth * 1000);
-       mode_lib->vba.ReturnBW = adjust_ReturnBW(mode_lib, mode_lib->vba.ReturnBW, mode_lib->vba.DCCEnabledAnyPlane, mode_lib->vba.ReturnBandwidthToDCN);
+       mode_lib->vba.ReturnBandwidthToDCN = dml_min(
+                       mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLK,
+                       mode_lib->vba.FabricAndDRAMBandwidth * 1000);
+       mode_lib->vba.ReturnBW = adjust_ReturnBW(
+                       mode_lib,
+                       mode_lib->vba.ReturnBW,
+                       mode_lib->vba.DCCEnabledAnyPlane,
+                       mode_lib->vba.ReturnBandwidthToDCN);
 
        DTRACE("   dcfclk_mhz         = %f", mode_lib->vba.DCFCLK);
        DTRACE("   return_bw_to_dcn   = %f", mode_lib->vba.ReturnBandwidthToDCN);
@@ -1659,14 +1902,19 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                if (mode_lib->vba.ODMCombineEnabled[k] == true)
                        MainPlaneDoesODMCombine = true;
                for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j)
-                       if (mode_lib->vba.BlendingAndTiming[k] == j && mode_lib->vba.ODMCombineEnabled[j] == true)
+                       if (mode_lib->vba.BlendingAndTiming[k] == j
+                                       && mode_lib->vba.ODMCombineEnabled[j] == true)
                                MainPlaneDoesODMCombine = true;
 
                if (MainPlaneDoesODMCombine == true)
-                       mode_lib->vba.SwathWidthY[k] = dml_min((double)mode_lib->vba.SwathWidthSingleDPPY[k],
-                               dml_round(mode_lib->vba.HActive[k] / 2.0 * mode_lib->vba.HRatio[k]));
+                       mode_lib->vba.SwathWidthY[k] = dml_min(
+                                       (double) mode_lib->vba.SwathWidthSingleDPPY[k],
+                                       dml_round(
+                                                       mode_lib->vba.HActive[k] / 2.0
+                                                                       * mode_lib->vba.HRatio[k]));
                else
-                       mode_lib->vba.SwathWidthY[k] = mode_lib->vba.SwathWidthSingleDPPY[k] / mode_lib->vba.DPPPerPlane[k];
+                       mode_lib->vba.SwathWidthY[k] = mode_lib->vba.SwathWidthSingleDPPY[k]
+                                       / mode_lib->vba.DPPPerPlane[k];
        }
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
@@ -1694,76 +1942,104 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        mode_lib->vba.TotalDataReadBandwidth = 0.0;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                mode_lib->vba.ReadBandwidthPlaneLuma[k] = mode_lib->vba.SwathWidthSingleDPPY[k]
-                       * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1) / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
-                       * mode_lib->vba.VRatio[k];
-               mode_lib->vba.ReadBandwidthPlaneChroma[k] = mode_lib->vba.SwathWidthSingleDPPY[k] / 2
-                       * dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2) / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
-                       * mode_lib->vba.VRatio[k] / 2;
-               DTRACE("   read_bw[%i] = %fBps",
-                       k,
-                       mode_lib->vba.ReadBandwidthPlaneLuma[k] + mode_lib->vba.ReadBandwidthPlaneChroma[k]);
+                               * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1)
+                               / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
+                               * mode_lib->vba.VRatio[k];
+               mode_lib->vba.ReadBandwidthPlaneChroma[k] = mode_lib->vba.SwathWidthSingleDPPY[k]
+                               / 2 * dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2)
+                               / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
+                               * mode_lib->vba.VRatio[k] / 2;
+               DTRACE(
+                               "   read_bw[%i] = %fBps",
+                               k,
+                               mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                               + mode_lib->vba.ReadBandwidthPlaneChroma[k]);
                mode_lib->vba.TotalDataReadBandwidth += mode_lib->vba.ReadBandwidthPlaneLuma[k]
-                       + mode_lib->vba.ReadBandwidthPlaneChroma[k];
+                               + mode_lib->vba.ReadBandwidthPlaneChroma[k];
        }
 
        mode_lib->vba.TotalDCCActiveDPP = 0;
        mode_lib->vba.TotalActiveDPP = 0;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
-               mode_lib->vba.TotalActiveDPP = mode_lib->vba.TotalActiveDPP + mode_lib->vba.DPPPerPlane[k];
+               mode_lib->vba.TotalActiveDPP = mode_lib->vba.TotalActiveDPP
+                               + mode_lib->vba.DPPPerPlane[k];
                if (mode_lib->vba.DCCEnable[k])
-                       mode_lib->vba.TotalDCCActiveDPP = mode_lib->vba.TotalDCCActiveDPP + mode_lib->vba.DPPPerPlane[k];
+                       mode_lib->vba.TotalDCCActiveDPP = mode_lib->vba.TotalDCCActiveDPP
+                                       + mode_lib->vba.DPPPerPlane[k];
        }
 
-       mode_lib->vba.UrgentRoundTripAndOutOfOrderLatency = (mode_lib->vba.RoundTripPingLatencyCycles + 32) / mode_lib->vba.DCFCLK
-               + mode_lib->vba.UrgentOutOfOrderReturnPerChannel * mode_lib->vba.NumberOfChannels / mode_lib->vba.ReturnBW;
+       mode_lib->vba.UrgentRoundTripAndOutOfOrderLatency =
+                       (mode_lib->vba.RoundTripPingLatencyCycles + 32) / mode_lib->vba.DCFCLK
+                                       + mode_lib->vba.UrgentOutOfOrderReturnPerChannel
+                                                       * mode_lib->vba.NumberOfChannels
+                                                       / mode_lib->vba.ReturnBW;
 
        mode_lib->vba.LastPixelOfLineExtraWatermark = 0;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                double DataFabricLineDeliveryTimeLuma, DataFabricLineDeliveryTimeChroma;
 
                if (mode_lib->vba.VRatio[k] <= 1.0)
-                       mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k] = (double)mode_lib->vba.SwathWidthY[k]
-                       * mode_lib->vba.DPPPerPlane[k] / mode_lib->vba.HRatio[k] / mode_lib->vba.PixelClock[k];
+                       mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k] =
+                                       (double) mode_lib->vba.SwathWidthY[k]
+                                                       * mode_lib->vba.DPPPerPlane[k]
+                                                       / mode_lib->vba.HRatio[k]
+                                                       / mode_lib->vba.PixelClock[k];
                else
-                       mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k] = (double)mode_lib->vba.SwathWidthY[k]
-                       / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k] / mode_lib->vba.DPPCLK[k];
-
-               DataFabricLineDeliveryTimeLuma =
-                       mode_lib->vba.SwathWidthSingleDPPY[k] * mode_lib->vba.SwathHeightY[k]
-                       * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1)
-                       / (mode_lib->vba.ReturnBW * mode_lib->vba.ReadBandwidthPlaneLuma[k]
-                               / mode_lib->vba.TotalDataReadBandwidth);
-               mode_lib->vba.LastPixelOfLineExtraWatermark = dml_max(mode_lib->vba.LastPixelOfLineExtraWatermark,
-                       DataFabricLineDeliveryTimeLuma
-                       - mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k]);
+                       mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k] =
+                                       (double) mode_lib->vba.SwathWidthY[k]
+                                                       / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k]
+                                                       / mode_lib->vba.DPPCLK[k];
+
+               DataFabricLineDeliveryTimeLuma = mode_lib->vba.SwathWidthSingleDPPY[k]
+                               * mode_lib->vba.SwathHeightY[k]
+                               * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1)
+                               / (mode_lib->vba.ReturnBW * mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                               / mode_lib->vba.TotalDataReadBandwidth);
+               mode_lib->vba.LastPixelOfLineExtraWatermark = dml_max(
+                               mode_lib->vba.LastPixelOfLineExtraWatermark,
+                               DataFabricLineDeliveryTimeLuma
+                                               - mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k]);
 
                if (mode_lib->vba.BytePerPixelDETC[k] == 0)
                        mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k] = 0.0;
                else if (mode_lib->vba.VRatio[k] / 2.0 <= 1.0)
-                       mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k] = mode_lib->vba.SwathWidthY[k] / 2.0
-                       * mode_lib->vba.DPPPerPlane[k] / (mode_lib->vba.HRatio[k] / 2.0) / mode_lib->vba.PixelClock[k];
+                       mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k] =
+                                       mode_lib->vba.SwathWidthY[k] / 2.0
+                                                       * mode_lib->vba.DPPPerPlane[k]
+                                                       / (mode_lib->vba.HRatio[k] / 2.0)
+                                                       / mode_lib->vba.PixelClock[k];
                else
-                       mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k] = mode_lib->vba.SwathWidthY[k] / 2.0
-                       / mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k] / mode_lib->vba.DPPCLK[k];
+                       mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k] =
+                                       mode_lib->vba.SwathWidthY[k] / 2.0
+                                                       / mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k]
+                                                       / mode_lib->vba.DPPCLK[k];
 
                DataFabricLineDeliveryTimeChroma = mode_lib->vba.SwathWidthSingleDPPY[k] / 2.0
-                       * mode_lib->vba.SwathHeightC[k] * dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2)
-                       / (mode_lib->vba.ReturnBW * mode_lib->vba.ReadBandwidthPlaneChroma[k]
-                               / mode_lib->vba.TotalDataReadBandwidth);
-               mode_lib->vba.LastPixelOfLineExtraWatermark = dml_max(mode_lib->vba.LastPixelOfLineExtraWatermark,
-                       DataFabricLineDeliveryTimeChroma
-                       - mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k]);
+                               * mode_lib->vba.SwathHeightC[k]
+                               * dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2)
+                               / (mode_lib->vba.ReturnBW
+                                               * mode_lib->vba.ReadBandwidthPlaneChroma[k]
+                                               / mode_lib->vba.TotalDataReadBandwidth);
+               mode_lib->vba.LastPixelOfLineExtraWatermark =
+                               dml_max(
+                                               mode_lib->vba.LastPixelOfLineExtraWatermark,
+                                               DataFabricLineDeliveryTimeChroma
+                                                               - mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k]);
        }
 
        mode_lib->vba.UrgentExtraLatency = mode_lib->vba.UrgentRoundTripAndOutOfOrderLatency
-               + (mode_lib->vba.TotalActiveDPP * mode_lib->vba.PixelChunkSizeInKByte
-                       + mode_lib->vba.TotalDCCActiveDPP * mode_lib->vba.MetaChunkSize) * 1024.0
-               / mode_lib->vba.ReturnBW;
+                       + (mode_lib->vba.TotalActiveDPP * mode_lib->vba.PixelChunkSizeInKByte
+                                       + mode_lib->vba.TotalDCCActiveDPP
+                                                       * mode_lib->vba.MetaChunkSize) * 1024.0
+                                       / mode_lib->vba.ReturnBW;
 
        if (mode_lib->vba.VirtualMemoryEnable)
-               mode_lib->vba.UrgentExtraLatency += mode_lib->vba.TotalActiveDPP * mode_lib->vba.PTEChunkSize * 1024.0 / mode_lib->vba.ReturnBW;
+               mode_lib->vba.UrgentExtraLatency += mode_lib->vba.TotalActiveDPP
+                               * mode_lib->vba.PTEChunkSize * 1024.0 / mode_lib->vba.ReturnBW;
 
-       mode_lib->vba.UrgentWatermark = mode_lib->vba.UrgentLatency + mode_lib->vba.LastPixelOfLineExtraWatermark + mode_lib->vba.UrgentExtraLatency;
+       mode_lib->vba.UrgentWatermark = mode_lib->vba.UrgentLatency
+                       + mode_lib->vba.LastPixelOfLineExtraWatermark
+                       + mode_lib->vba.UrgentExtraLatency;
 
        DTRACE("   urgent_extra_latency = %fus", mode_lib->vba.UrgentExtraLatency);
        DTRACE("   wm_urgent = %fus", mode_lib->vba.UrgentWatermark);
@@ -1780,12 +2056,14 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                mode_lib->vba.WritebackUrgentWatermark = mode_lib->vba.WritebackLatency;
        else
                mode_lib->vba.WritebackUrgentWatermark = mode_lib->vba.WritebackLatency
-               + mode_lib->vba.WritebackChunkSize * 1024.0 / 32 / mode_lib->vba.SOCCLK;
+                               + mode_lib->vba.WritebackChunkSize * 1024.0 / 32
+                                               / mode_lib->vba.SOCCLK;
 
        DTRACE("   wm_wb_urgent = %fus", mode_lib->vba.WritebackUrgentWatermark);
 
        // NB P-State/DRAM Clock Change Watermark
-       mode_lib->vba.DRAMClockChangeWatermark = mode_lib->vba.DRAMClockChangeLatency + mode_lib->vba.UrgentWatermark;
+       mode_lib->vba.DRAMClockChangeWatermark = mode_lib->vba.DRAMClockChangeLatency
+                       + mode_lib->vba.UrgentWatermark;
 
        DTRACE("   wm_pstate_change = %fus", mode_lib->vba.DRAMClockChangeWatermark);
 
@@ -1794,28 +2072,42 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        DTRACE("      socclk frequency %f Mhz", mode_lib->vba.SOCCLK);
 
        if (mode_lib->vba.TotalActiveWriteback <= 1)
-               mode_lib->vba.WritebackDRAMClockChangeWatermark = mode_lib->vba.DRAMClockChangeLatency + mode_lib->vba.WritebackLatency;
+               mode_lib->vba.WritebackDRAMClockChangeWatermark =
+                               mode_lib->vba.DRAMClockChangeLatency
+                                               + mode_lib->vba.WritebackLatency;
        else
-               mode_lib->vba.WritebackDRAMClockChangeWatermark = mode_lib->vba.DRAMClockChangeLatency + mode_lib->vba.WritebackLatency
-               + mode_lib->vba.WritebackChunkSize * 1024.0 / 32 / mode_lib->vba.SOCCLK;
+               mode_lib->vba.WritebackDRAMClockChangeWatermark =
+                               mode_lib->vba.DRAMClockChangeLatency
+                                               + mode_lib->vba.WritebackLatency
+                                               + mode_lib->vba.WritebackChunkSize * 1024.0 / 32
+                                                               / mode_lib->vba.SOCCLK;
 
        DTRACE("   wm_wb_pstate %fus", mode_lib->vba.WritebackDRAMClockChangeWatermark);
 
        // Stutter Efficiency
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
-               mode_lib->vba.LinesInDETY[k] = mode_lib->vba.DETBufferSizeY[k] / mode_lib->vba.BytePerPixelDETY[k]
-                       / mode_lib->vba.SwathWidthY[k];
-               mode_lib->vba.LinesInDETYRoundedDownToSwath[k] = dml_floor(mode_lib->vba.LinesInDETY[k],
-                       mode_lib->vba.SwathHeightY[k]);
-               mode_lib->vba.FullDETBufferingTimeY[k] = mode_lib->vba.LinesInDETYRoundedDownToSwath[k]
-                       * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) / mode_lib->vba.VRatio[k];
+               mode_lib->vba.LinesInDETY[k] = mode_lib->vba.DETBufferSizeY[k]
+                               / mode_lib->vba.BytePerPixelDETY[k] / mode_lib->vba.SwathWidthY[k];
+               mode_lib->vba.LinesInDETYRoundedDownToSwath[k] = dml_floor(
+                               mode_lib->vba.LinesInDETY[k],
+                               mode_lib->vba.SwathHeightY[k]);
+               mode_lib->vba.FullDETBufferingTimeY[k] =
+                               mode_lib->vba.LinesInDETYRoundedDownToSwath[k]
+                                               * (mode_lib->vba.HTotal[k]
+                                                               / mode_lib->vba.PixelClock[k])
+                                               / mode_lib->vba.VRatio[k];
                if (mode_lib->vba.BytePerPixelDETC[k] > 0) {
-                       mode_lib->vba.LinesInDETC[k] = mode_lib->vba.DETBufferSizeC[k] / mode_lib->vba.BytePerPixelDETC[k]
-                               / (mode_lib->vba.SwathWidthY[k] / 2);
-                       mode_lib->vba.LinesInDETCRoundedDownToSwath[k] = dml_floor(mode_lib->vba.LinesInDETC[k],
-                               mode_lib->vba.SwathHeightC[k]);
-                       mode_lib->vba.FullDETBufferingTimeC[k] = mode_lib->vba.LinesInDETCRoundedDownToSwath[k]
-                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) / (mode_lib->vba.VRatio[k] / 2);
+                       mode_lib->vba.LinesInDETC[k] = mode_lib->vba.DETBufferSizeC[k]
+                                       / mode_lib->vba.BytePerPixelDETC[k]
+                                       / (mode_lib->vba.SwathWidthY[k] / 2);
+                       mode_lib->vba.LinesInDETCRoundedDownToSwath[k] = dml_floor(
+                                       mode_lib->vba.LinesInDETC[k],
+                                       mode_lib->vba.SwathHeightC[k]);
+                       mode_lib->vba.FullDETBufferingTimeC[k] =
+                                       mode_lib->vba.LinesInDETCRoundedDownToSwath[k]
+                                                       * (mode_lib->vba.HTotal[k]
+                                                                       / mode_lib->vba.PixelClock[k])
+                                                       / (mode_lib->vba.VRatio[k] / 2);
                } else {
                        mode_lib->vba.LinesInDETC[k] = 0;
                        mode_lib->vba.LinesInDETCRoundedDownToSwath[k] = 0;
@@ -1825,15 +2117,21 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 
        mode_lib->vba.MinFullDETBufferingTime = 999999.0;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
-               if (mode_lib->vba.FullDETBufferingTimeY[k] < mode_lib->vba.MinFullDETBufferingTime) {
-                       mode_lib->vba.MinFullDETBufferingTime = mode_lib->vba.FullDETBufferingTimeY[k];
-                       mode_lib->vba.FrameTimeForMinFullDETBufferingTime = (double)mode_lib->vba.VTotal[k] * mode_lib->vba.HTotal[k]
-                               / mode_lib->vba.PixelClock[k];
+               if (mode_lib->vba.FullDETBufferingTimeY[k]
+                               < mode_lib->vba.MinFullDETBufferingTime) {
+                       mode_lib->vba.MinFullDETBufferingTime =
+                                       mode_lib->vba.FullDETBufferingTimeY[k];
+                       mode_lib->vba.FrameTimeForMinFullDETBufferingTime =
+                                       (double) mode_lib->vba.VTotal[k] * mode_lib->vba.HTotal[k]
+                                                       / mode_lib->vba.PixelClock[k];
                }
-               if (mode_lib->vba.FullDETBufferingTimeC[k] < mode_lib->vba.MinFullDETBufferingTime) {
-                       mode_lib->vba.MinFullDETBufferingTime = mode_lib->vba.FullDETBufferingTimeC[k];
-                       mode_lib->vba.FrameTimeForMinFullDETBufferingTime = (double)mode_lib->vba.VTotal[k] * mode_lib->vba.HTotal[k]
-                               / mode_lib->vba.PixelClock[k];
+               if (mode_lib->vba.FullDETBufferingTimeC[k]
+                               < mode_lib->vba.MinFullDETBufferingTime) {
+                       mode_lib->vba.MinFullDETBufferingTime =
+                                       mode_lib->vba.FullDETBufferingTimeC[k];
+                       mode_lib->vba.FrameTimeForMinFullDETBufferingTime =
+                                       (double) mode_lib->vba.VTotal[k] * mode_lib->vba.HTotal[k]
+                                                       / mode_lib->vba.PixelClock[k];
                }
        }
 
@@ -1841,45 +2139,58 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.DCCEnable[k]) {
                        mode_lib->vba.AverageReadBandwidthGBytePerSecond =
-                               mode_lib->vba.AverageReadBandwidthGBytePerSecond
-                               + mode_lib->vba.ReadBandwidthPlaneLuma[k] / mode_lib->vba.DCCRate[k]
-                               / 1000
-                               + mode_lib->vba.ReadBandwidthPlaneChroma[k]
-                               / mode_lib->vba.DCCRate[k] / 1000;
+                                       mode_lib->vba.AverageReadBandwidthGBytePerSecond
+                                                       + mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                       / mode_lib->vba.DCCRate[k]
+                                                                       / 1000
+                                                       + mode_lib->vba.ReadBandwidthPlaneChroma[k]
+                                                                       / mode_lib->vba.DCCRate[k]
+                                                                       / 1000;
                } else {
                        mode_lib->vba.AverageReadBandwidthGBytePerSecond =
-                               mode_lib->vba.AverageReadBandwidthGBytePerSecond
-                               + mode_lib->vba.ReadBandwidthPlaneLuma[k] / 1000
-                               + mode_lib->vba.ReadBandwidthPlaneChroma[k] / 1000;
+                                       mode_lib->vba.AverageReadBandwidthGBytePerSecond
+                                                       + mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                       / 1000
+                                                       + mode_lib->vba.ReadBandwidthPlaneChroma[k]
+                                                                       / 1000;
                }
                if (mode_lib->vba.DCCEnable[k]) {
                        mode_lib->vba.AverageReadBandwidthGBytePerSecond =
-                               mode_lib->vba.AverageReadBandwidthGBytePerSecond
-                               + mode_lib->vba.ReadBandwidthPlaneLuma[k] / 1000 / 256
-                               + mode_lib->vba.ReadBandwidthPlaneChroma[k] / 1000
-                               / 256;
+                                       mode_lib->vba.AverageReadBandwidthGBytePerSecond
+                                                       + mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                       / 1000 / 256
+                                                       + mode_lib->vba.ReadBandwidthPlaneChroma[k]
+                                                                       / 1000 / 256;
                }
                if (mode_lib->vba.VirtualMemoryEnable) {
                        mode_lib->vba.AverageReadBandwidthGBytePerSecond =
-                               mode_lib->vba.AverageReadBandwidthGBytePerSecond
-                               + mode_lib->vba.ReadBandwidthPlaneLuma[k] / 1000 / 512
-                               + mode_lib->vba.ReadBandwidthPlaneChroma[k] / 1000
-                               / 512;
+                                       mode_lib->vba.AverageReadBandwidthGBytePerSecond
+                                                       + mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                       / 1000 / 512
+                                                       + mode_lib->vba.ReadBandwidthPlaneChroma[k]
+                                                                       / 1000 / 512;
                }
        }
 
-       mode_lib->vba.PartOfBurstThatFitsInROB = dml_min(mode_lib->vba.MinFullDETBufferingTime * mode_lib->vba.TotalDataReadBandwidth,
-               mode_lib->vba.ROBBufferSizeInKByte * 1024 * mode_lib->vba.TotalDataReadBandwidth
-               / (mode_lib->vba.AverageReadBandwidthGBytePerSecond * 1000));
+       mode_lib->vba.PartOfBurstThatFitsInROB =
+                       dml_min(
+                                       mode_lib->vba.MinFullDETBufferingTime
+                                                       * mode_lib->vba.TotalDataReadBandwidth,
+                                       mode_lib->vba.ROBBufferSizeInKByte * 1024
+                                                       * mode_lib->vba.TotalDataReadBandwidth
+                                                       / (mode_lib->vba.AverageReadBandwidthGBytePerSecond
+                                                                       * 1000));
        mode_lib->vba.StutterBurstTime = mode_lib->vba.PartOfBurstThatFitsInROB
-               * (mode_lib->vba.AverageReadBandwidthGBytePerSecond * 1000) / mode_lib->vba.TotalDataReadBandwidth
-               / mode_lib->vba.ReturnBW
-               + (mode_lib->vba.MinFullDETBufferingTime * mode_lib->vba.TotalDataReadBandwidth
-                       - mode_lib->vba.PartOfBurstThatFitsInROB) / (mode_lib->vba.DCFCLK * 64);
+                       * (mode_lib->vba.AverageReadBandwidthGBytePerSecond * 1000)
+                       / mode_lib->vba.TotalDataReadBandwidth / mode_lib->vba.ReturnBW
+                       + (mode_lib->vba.MinFullDETBufferingTime
+                                       * mode_lib->vba.TotalDataReadBandwidth
+                                       - mode_lib->vba.PartOfBurstThatFitsInROB)
+                                       / (mode_lib->vba.DCFCLK * 64);
        if (mode_lib->vba.TotalActiveWriteback == 0) {
                mode_lib->vba.StutterEfficiencyNotIncludingVBlank = (1
-                       - (mode_lib->vba.SRExitTime + mode_lib->vba.StutterBurstTime) / mode_lib->vba.MinFullDETBufferingTime)
-                       * 100;
+                               - (mode_lib->vba.SRExitTime + mode_lib->vba.StutterBurstTime)
+                                               / mode_lib->vba.MinFullDETBufferingTime) * 100;
        } else {
                mode_lib->vba.StutterEfficiencyNotIncludingVBlank = 0;
        }
@@ -1887,47 +2198,66 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        mode_lib->vba.SmallestVBlank = 999999;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.SynchronizedVBlank || mode_lib->vba.NumberOfActivePlanes == 1) {
-                       mode_lib->vba.VBlankTime = (double)(mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k]) * mode_lib->vba.HTotal[k]
-                               / mode_lib->vba.PixelClock[k];
+                       mode_lib->vba.VBlankTime = (double) (mode_lib->vba.VTotal[k]
+                                       - mode_lib->vba.VActive[k]) * mode_lib->vba.HTotal[k]
+                                       / mode_lib->vba.PixelClock[k];
                } else {
                        mode_lib->vba.VBlankTime = 0;
                }
-               mode_lib->vba.SmallestVBlank = dml_min(mode_lib->vba.SmallestVBlank, mode_lib->vba.VBlankTime);
+               mode_lib->vba.SmallestVBlank = dml_min(
+                               mode_lib->vba.SmallestVBlank,
+                               mode_lib->vba.VBlankTime);
        }
 
        mode_lib->vba.StutterEfficiency = (mode_lib->vba.StutterEfficiencyNotIncludingVBlank / 100
-               * (mode_lib->vba.FrameTimeForMinFullDETBufferingTime - mode_lib->vba.SmallestVBlank)
-               + mode_lib->vba.SmallestVBlank) / mode_lib->vba.FrameTimeForMinFullDETBufferingTime * 100;
+                       * (mode_lib->vba.FrameTimeForMinFullDETBufferingTime
+                                       - mode_lib->vba.SmallestVBlank)
+                       + mode_lib->vba.SmallestVBlank)
+                       / mode_lib->vba.FrameTimeForMinFullDETBufferingTime * 100;
 
        // dml_ml->vba.DCFCLK Deep Sleep
        mode_lib->vba.DCFClkDeepSleep = 8.0;
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; k++) {
                if (mode_lib->vba.BytePerPixelDETC[k] > 0) {
-                       mode_lib->vba.DCFCLKDeepSleepPerPlane = dml_max(1.1 * mode_lib->vba.SwathWidthY[k]
-                               * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1) / 32
-                               / mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k],
-                               1.1 * mode_lib->vba.SwathWidthY[k] / 2.0
-                               * dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2) / 32
-                               / mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k]);
+                       mode_lib->vba.DCFCLKDeepSleepPerPlane =
+                                       dml_max(
+                                                       1.1 * mode_lib->vba.SwathWidthY[k]
+                                                                       * dml_ceil(
+                                                                                       mode_lib->vba.BytePerPixelDETY[k],
+                                                                                       1) / 32
+                                                                       / mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k],
+                                                       1.1 * mode_lib->vba.SwathWidthY[k] / 2.0
+                                                                       * dml_ceil(
+                                                                                       mode_lib->vba.BytePerPixelDETC[k],
+                                                                                       2) / 32
+                                                                       / mode_lib->vba.DisplayPipeLineDeliveryTimeChroma[k]);
                } else
                        mode_lib->vba.DCFCLKDeepSleepPerPlane = 1.1 * mode_lib->vba.SwathWidthY[k]
-                       * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1) / 64.0
-                       / mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k];
-               mode_lib->vba.DCFCLKDeepSleepPerPlane = dml_max(mode_lib->vba.DCFCLKDeepSleepPerPlane,
-                       mode_lib->vba.PixelClock[k] / 16.0);
-               mode_lib->vba.DCFClkDeepSleep = dml_max(mode_lib->vba.DCFClkDeepSleep, mode_lib->vba.DCFCLKDeepSleepPerPlane);
+                                       * dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1) / 64.0
+                                       / mode_lib->vba.DisplayPipeLineDeliveryTimeLuma[k];
+               mode_lib->vba.DCFCLKDeepSleepPerPlane = dml_max(
+                               mode_lib->vba.DCFCLKDeepSleepPerPlane,
+                               mode_lib->vba.PixelClock[k] / 16.0);
+               mode_lib->vba.DCFClkDeepSleep = dml_max(
+                               mode_lib->vba.DCFClkDeepSleep,
+                               mode_lib->vba.DCFCLKDeepSleepPerPlane);
 
-               DTRACE("   dcfclk_deepsleep_per_plane[%i] = %fMHz", k, mode_lib->vba.DCFCLKDeepSleepPerPlane);
+               DTRACE(
+                               "   dcfclk_deepsleep_per_plane[%i] = %fMHz",
+                               k,
+                               mode_lib->vba.DCFCLKDeepSleepPerPlane);
        }
 
        DTRACE("   dcfclk_deepsleep_mhz = %fMHz", mode_lib->vba.DCFClkDeepSleep);
 
        // Stutter Watermark
-       mode_lib->vba.StutterExitWatermark = mode_lib->vba.SRExitTime + mode_lib->vba.LastPixelOfLineExtraWatermark + mode_lib->vba.UrgentExtraLatency
-               + 10 / mode_lib->vba.DCFClkDeepSleep;
-       mode_lib->vba.StutterEnterPlusExitWatermark = mode_lib->vba.SREnterPlusExitTime + mode_lib->vba.LastPixelOfLineExtraWatermark
-               + mode_lib->vba.UrgentExtraLatency;
+       mode_lib->vba.StutterExitWatermark = mode_lib->vba.SRExitTime
+                       + mode_lib->vba.LastPixelOfLineExtraWatermark
+                       + mode_lib->vba.UrgentExtraLatency + 10 / mode_lib->vba.DCFClkDeepSleep;
+       mode_lib->vba.StutterEnterPlusExitWatermark = mode_lib->vba.SREnterPlusExitTime
+                       + mode_lib->vba.LastPixelOfLineExtraWatermark
+                       + mode_lib->vba.UrgentExtraLatency;
 
        DTRACE("   wm_cstate_exit       = %fus", mode_lib->vba.StutterExitWatermark);
        DTRACE("   wm_cstate_enter_exit = %fus", mode_lib->vba.StutterEnterPlusExitWatermark);
@@ -1935,72 +2265,95 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        // Urgent Latency Supported
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                mode_lib->vba.EffectiveDETPlusLBLinesLuma =
-                       dml_floor(mode_lib->vba.LinesInDETY[k]
-                               + dml_min(mode_lib->vba.LinesInDETY[k]
-                                       * mode_lib->vba.DPPCLK[k]
-                                       * mode_lib->vba.BytePerPixelDETY[k]
-                                       * mode_lib->vba.PSCL_THROUGHPUT_LUMA[k]
-                                       / (mode_lib->vba.ReturnBW
-                                               / mode_lib->vba.DPPPerPlane[k]),
-                                       (double)mode_lib->vba.EffectiveLBLatencyHidingSourceLinesLuma),
-                               mode_lib->vba.SwathHeightY[k]);
+                               dml_floor(
+                                               mode_lib->vba.LinesInDETY[k]
+                                                               + dml_min(
+                                                                               mode_lib->vba.LinesInDETY[k]
+                                                                                               * mode_lib->vba.DPPCLK[k]
+                                                                                               * mode_lib->vba.BytePerPixelDETY[k]
+                                                                                               * mode_lib->vba.PSCL_THROUGHPUT_LUMA[k]
+                                                                                               / (mode_lib->vba.ReturnBW
+                                                                                                               / mode_lib->vba.DPPPerPlane[k]),
+                                                                               (double) mode_lib->vba.EffectiveLBLatencyHidingSourceLinesLuma),
+                                               mode_lib->vba.SwathHeightY[k]);
 
                mode_lib->vba.UrgentLatencySupportUsLuma = mode_lib->vba.EffectiveDETPlusLBLinesLuma
-                       * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) / mode_lib->vba.VRatio[k]
-                       - mode_lib->vba.EffectiveDETPlusLBLinesLuma * mode_lib->vba.SwathWidthY[k]
-                       * mode_lib->vba.BytePerPixelDETY[k]
-                       / (mode_lib->vba.ReturnBW / mode_lib->vba.DPPPerPlane[k]);
+                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
+                               / mode_lib->vba.VRatio[k]
+                               - mode_lib->vba.EffectiveDETPlusLBLinesLuma
+                                               * mode_lib->vba.SwathWidthY[k]
+                                               * mode_lib->vba.BytePerPixelDETY[k]
+                                               / (mode_lib->vba.ReturnBW
+                                                               / mode_lib->vba.DPPPerPlane[k]);
 
                if (mode_lib->vba.BytePerPixelDETC[k] > 0) {
                        mode_lib->vba.EffectiveDETPlusLBLinesChroma =
-                               dml_floor(mode_lib->vba.LinesInDETC[k]
-                                       + dml_min(mode_lib->vba.LinesInDETC[k]
-                                               * mode_lib->vba.DPPCLK[k]
-                                               * mode_lib->vba.BytePerPixelDETC[k]
-                                               * mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k]
-                                               / (mode_lib->vba.ReturnBW
-                                                       / mode_lib->vba.DPPPerPlane[k]),
-                                               (double)mode_lib->vba.EffectiveLBLatencyHidingSourceLinesChroma),
-                                       mode_lib->vba.SwathHeightC[k]);
-                       mode_lib->vba.UrgentLatencySupportUsChroma = mode_lib->vba.EffectiveDETPlusLBLinesChroma
-                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) / (mode_lib->vba.VRatio[k] / 2)
-                               - mode_lib->vba.EffectiveDETPlusLBLinesChroma
-                               * (mode_lib->vba.SwathWidthY[k] / 2)
-                               * mode_lib->vba.BytePerPixelDETC[k]
-                               / (mode_lib->vba.ReturnBW / mode_lib->vba.DPPPerPlane[k]);
-                       mode_lib->vba.UrgentLatencySupportUs[k] = dml_min(mode_lib->vba.UrgentLatencySupportUsLuma,
-                               mode_lib->vba.UrgentLatencySupportUsChroma);
+                                       dml_floor(
+                                                       mode_lib->vba.LinesInDETC[k]
+                                                                       + dml_min(
+                                                                                       mode_lib->vba.LinesInDETC[k]
+                                                                                                       * mode_lib->vba.DPPCLK[k]
+                                                                                                       * mode_lib->vba.BytePerPixelDETC[k]
+                                                                                                       * mode_lib->vba.PSCL_THROUGHPUT_CHROMA[k]
+                                                                                                       / (mode_lib->vba.ReturnBW
+                                                                                                                       / mode_lib->vba.DPPPerPlane[k]),
+                                                                                       (double) mode_lib->vba.EffectiveLBLatencyHidingSourceLinesChroma),
+                                                       mode_lib->vba.SwathHeightC[k]);
+                       mode_lib->vba.UrgentLatencySupportUsChroma =
+                                       mode_lib->vba.EffectiveDETPlusLBLinesChroma
+                                                       * (mode_lib->vba.HTotal[k]
+                                                                       / mode_lib->vba.PixelClock[k])
+                                                       / (mode_lib->vba.VRatio[k] / 2)
+                                                       - mode_lib->vba.EffectiveDETPlusLBLinesChroma
+                                                                       * (mode_lib->vba.SwathWidthY[k]
+                                                                                       / 2)
+                                                                       * mode_lib->vba.BytePerPixelDETC[k]
+                                                                       / (mode_lib->vba.ReturnBW
+                                                                                       / mode_lib->vba.DPPPerPlane[k]);
+                       mode_lib->vba.UrgentLatencySupportUs[k] = dml_min(
+                                       mode_lib->vba.UrgentLatencySupportUsLuma,
+                                       mode_lib->vba.UrgentLatencySupportUsChroma);
                } else {
-                       mode_lib->vba.UrgentLatencySupportUs[k] = mode_lib->vba.UrgentLatencySupportUsLuma;
+                       mode_lib->vba.UrgentLatencySupportUs[k] =
+                                       mode_lib->vba.UrgentLatencySupportUsLuma;
                }
        }
 
        mode_lib->vba.MinUrgentLatencySupportUs = 999999;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
-               mode_lib->vba.MinUrgentLatencySupportUs = dml_min(mode_lib->vba.MinUrgentLatencySupportUs,
-                       mode_lib->vba.UrgentLatencySupportUs[k]);
+               mode_lib->vba.MinUrgentLatencySupportUs = dml_min(
+                               mode_lib->vba.MinUrgentLatencySupportUs,
+                               mode_lib->vba.UrgentLatencySupportUs[k]);
        }
 
        // Non-Urgent Latency Tolerance
-       mode_lib->vba.NonUrgentLatencyTolerance = mode_lib->vba.MinUrgentLatencySupportUs - mode_lib->vba.UrgentWatermark;
+       mode_lib->vba.NonUrgentLatencyTolerance = mode_lib->vba.MinUrgentLatencySupportUs
+                       - mode_lib->vba.UrgentWatermark;
 
        // DSCCLK
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if ((mode_lib->vba.BlendingAndTiming[k] != k) || !mode_lib->vba.DSCEnabled[k]) {
                        mode_lib->vba.DSCCLK_calculated[k] = 0.0;
                } else {
-                       if (mode_lib->vba.OutputFormat[k] == dm_420 || mode_lib->vba.OutputFormat[k] == dm_n422)
+                       if (mode_lib->vba.OutputFormat[k] == dm_420
+                                       || mode_lib->vba.OutputFormat[k] == dm_n422)
                                mode_lib->vba.DSCFormatFactor = 2;
                        else
                                mode_lib->vba.DSCFormatFactor = 1;
                        if (mode_lib->vba.ODMCombineEnabled[k])
-                               mode_lib->vba.DSCCLK_calculated[k] = mode_lib->vba.PixelClockBackEnd[k] / 6
-                                       / mode_lib->vba.DSCFormatFactor
-                                       / (1 - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100);
+                               mode_lib->vba.DSCCLK_calculated[k] =
+                                               mode_lib->vba.PixelClockBackEnd[k] / 6
+                                                               / mode_lib->vba.DSCFormatFactor
+                                                               / (1
+                                                                               - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                               / 100);
                        else
-                               mode_lib->vba.DSCCLK_calculated[k] = mode_lib->vba.PixelClockBackEnd[k] / 3
-                                       / mode_lib->vba.DSCFormatFactor
-                                       / (1 - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100);
+                               mode_lib->vba.DSCCLK_calculated[k] =
+                                               mode_lib->vba.PixelClockBackEnd[k] / 3
+                                                               / mode_lib->vba.DSCFormatFactor
+                                                               / (1
+                                                                               - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                               / 100);
                }
        }
 
@@ -2013,27 +2366,35 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                if (mode_lib->vba.DSCEnabled[k] && bpp != 0) {
                        if (!mode_lib->vba.ODMCombineEnabled[k]) {
                                mode_lib->vba.DSCDelay[k] =
-                                       dscceComputeDelay(mode_lib->vba.DSCInputBitPerComponent[k],
-                                               bpp,
-                                               dml_ceil((double)mode_lib->vba.HActive[k]
-                                                       / mode_lib->vba.NumberOfDSCSlices[k],
-                                                       1),
-                                               slices,
-                                               mode_lib->vba.OutputFormat[k])
-                                       + dscComputeDelay(mode_lib->vba.OutputFormat[k]);
+                                               dscceComputeDelay(
+                                                               mode_lib->vba.DSCInputBitPerComponent[k],
+                                                               bpp,
+                                                               dml_ceil(
+                                                                               (double) mode_lib->vba.HActive[k]
+                                                                                               / mode_lib->vba.NumberOfDSCSlices[k],
+                                                                               1),
+                                                               slices,
+                                                               mode_lib->vba.OutputFormat[k])
+                                                               + dscComputeDelay(
+                                                                               mode_lib->vba.OutputFormat[k]);
                        } else {
                                mode_lib->vba.DSCDelay[k] =
-                                       2
-                                       * (dscceComputeDelay(mode_lib->vba.DSCInputBitPerComponent[k],
-                                               bpp,
-                                               dml_ceil((double)mode_lib->vba.HActive[k]
-                                                       / mode_lib->vba.NumberOfDSCSlices[k],
-                                                       1),
-                                               slices / 2.0,
-                                               mode_lib->vba.OutputFormat[k])
-                                               + dscComputeDelay(mode_lib->vba.OutputFormat[k]));
-                       }
-                       mode_lib->vba.DSCDelay[k] = mode_lib->vba.DSCDelay[k] * mode_lib->vba.PixelClock[k] / mode_lib->vba.PixelClockBackEnd[k];
+                                               2
+                                                               * (dscceComputeDelay(
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k],
+                                                                               bpp,
+                                                                               dml_ceil(
+                                                                                               (double) mode_lib->vba.HActive[k]
+                                                                                                               / mode_lib->vba.NumberOfDSCSlices[k],
+                                                                                               1),
+                                                                               slices / 2.0,
+                                                                               mode_lib->vba.OutputFormat[k])
+                                                                               + dscComputeDelay(
+                                                                                               mode_lib->vba.OutputFormat[k]));
+                       }
+                       mode_lib->vba.DSCDelay[k] = mode_lib->vba.DSCDelay[k]
+                                       * mode_lib->vba.PixelClock[k]
+                                       / mode_lib->vba.PixelClockBackEnd[k];
                } else {
                        mode_lib->vba.DSCDelay[k] = 0;
                }
@@ -2041,7 +2402,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
                for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j) // NumberOfPlanes
-                       if (j != k && mode_lib->vba.BlendingAndTiming[k] == j && mode_lib->vba.DSCEnabled[j])
+                       if (j != k && mode_lib->vba.BlendingAndTiming[k] == j
+                                       && mode_lib->vba.DSCEnabled[j])
                                mode_lib->vba.DSCDelay[k] = mode_lib->vba.DSCDelay[j];
 
        // Prefetch
@@ -2053,82 +2415,91 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                unsigned int PDEAndMetaPTEBytesFrameC;
                unsigned int PixelPTEBytesPerRowC;
 
-               Calculate256BBlockSizes(mode_lib->vba.SourcePixelFormat[k],
-                       mode_lib->vba.SurfaceTiling[k],
-                       dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
-                       dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2),
-                       &mode_lib->vba.BlockHeight256BytesY[k],
-                       &mode_lib->vba.BlockHeight256BytesC[k],
-                       &mode_lib->vba.BlockWidth256BytesY[k],
-                       &mode_lib->vba.BlockWidth256BytesC[k]);
-               PDEAndMetaPTEBytesFrameY = CalculateVMAndRowBytes(mode_lib,
-                       mode_lib->vba.DCCEnable[k],
-                       mode_lib->vba.BlockHeight256BytesY[k],
-                       mode_lib->vba.BlockWidth256BytesY[k],
-                       mode_lib->vba.SourcePixelFormat[k],
-                       mode_lib->vba.SurfaceTiling[k],
-                       dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
-                       mode_lib->vba.SourceScan[k],
-                       mode_lib->vba.ViewportWidth[k],
-                       mode_lib->vba.ViewportHeight[k],
-                       mode_lib->vba.SwathWidthY[k],
-                       mode_lib->vba.VirtualMemoryEnable,
-                       mode_lib->vba.VMMPageSize,
-                       mode_lib->vba.PTEBufferSizeInRequests,
-                       mode_lib->vba.PDEProcessingBufIn64KBReqs,
-                       mode_lib->vba.PitchY[k],
-                       mode_lib->vba.DCCMetaPitchY[k],
-                       &mode_lib->vba.MacroTileWidthY,
-                       &MetaRowByteY,
-                       &PixelPTEBytesPerRowY,
-                       &mode_lib->vba.PTEBufferSizeNotExceeded,
-                       &mode_lib->vba.dpte_row_height[k],
-                       &mode_lib->vba.meta_row_height[k]);
-               mode_lib->vba.PrefetchSourceLinesY[k] = CalculatePrefetchSourceLines(mode_lib,
-                       mode_lib->vba.VRatio[k],
-                       mode_lib->vba.vtaps[k],
-                       mode_lib->vba.Interlace[k],
-                       mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
-                       mode_lib->vba.SwathHeightY[k],
-                       mode_lib->vba.ViewportYStartY[k],
-                       &mode_lib->vba.VInitPreFillY[k],
-                       &mode_lib->vba.MaxNumSwathY[k]);
-
-               if ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64 && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
-                       && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
-                       && mode_lib->vba.SourcePixelFormat[k] != dm_444_8)) {
-                       PDEAndMetaPTEBytesFrameC = CalculateVMAndRowBytes(mode_lib,
-                               mode_lib->vba.DCCEnable[k],
-                               mode_lib->vba.BlockHeight256BytesC[k],
-                               mode_lib->vba.BlockWidth256BytesC[k],
+               Calculate256BBlockSizes(
                                mode_lib->vba.SourcePixelFormat[k],
                                mode_lib->vba.SurfaceTiling[k],
+                               dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
                                dml_ceil(mode_lib->vba.BytePerPixelDETC[k], 2),
+                               &mode_lib->vba.BlockHeight256BytesY[k],
+                               &mode_lib->vba.BlockHeight256BytesC[k],
+                               &mode_lib->vba.BlockWidth256BytesY[k],
+                               &mode_lib->vba.BlockWidth256BytesC[k]);
+               PDEAndMetaPTEBytesFrameY = CalculateVMAndRowBytes(
+                               mode_lib,
+                               mode_lib->vba.DCCEnable[k],
+                               mode_lib->vba.BlockHeight256BytesY[k],
+                               mode_lib->vba.BlockWidth256BytesY[k],
+                               mode_lib->vba.SourcePixelFormat[k],
+                               mode_lib->vba.SurfaceTiling[k],
+                               dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
                                mode_lib->vba.SourceScan[k],
-                               mode_lib->vba.ViewportWidth[k] / 2,
-                               mode_lib->vba.ViewportHeight[k] / 2,
-                               mode_lib->vba.SwathWidthY[k] / 2,
+                               mode_lib->vba.ViewportWidth[k],
+                               mode_lib->vba.ViewportHeight[k],
+                               mode_lib->vba.SwathWidthY[k],
                                mode_lib->vba.VirtualMemoryEnable,
                                mode_lib->vba.VMMPageSize,
                                mode_lib->vba.PTEBufferSizeInRequests,
                                mode_lib->vba.PDEProcessingBufIn64KBReqs,
-                               mode_lib->vba.PitchC[k],
-                               0,
-                               &mode_lib->vba.MacroTileWidthC,
-                               &MetaRowByteC,
-                               &PixelPTEBytesPerRowC,
-                               &mode_lib->vba.PTEBufferSizeNotExceeded,
-                               &mode_lib->vba.dpte_row_height_chroma[k],
-                               &mode_lib->vba.meta_row_height_chroma[k]);
-                       mode_lib->vba.PrefetchSourceLinesC[k] = CalculatePrefetchSourceLines(mode_lib,
-                               mode_lib->vba.VRatio[k] / 2,
-                               mode_lib->vba.VTAPsChroma[k],
+                               mode_lib->vba.PitchY[k],
+                               mode_lib->vba.DCCMetaPitchY[k],
+                               &mode_lib->vba.MacroTileWidthY[k],
+                               &MetaRowByteY,
+                               &PixelPTEBytesPerRowY,
+                               &mode_lib->vba.PTEBufferSizeNotExceeded[mode_lib->vba.VoltageLevel],
+                               &mode_lib->vba.dpte_row_height[k],
+                               &mode_lib->vba.meta_row_height[k]);
+               mode_lib->vba.PrefetchSourceLinesY[k] = CalculatePrefetchSourceLines(
+                               mode_lib,
+                               mode_lib->vba.VRatio[k],
+                               mode_lib->vba.vtaps[k],
                                mode_lib->vba.Interlace[k],
                                mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
-                               mode_lib->vba.SwathHeightC[k],
-                               mode_lib->vba.ViewportYStartC[k],
-                               &mode_lib->vba.VInitPreFillC[k],
-                               &mode_lib->vba.MaxNumSwathC[k]);
+                               mode_lib->vba.SwathHeightY[k],
+                               mode_lib->vba.ViewportYStartY[k],
+                               &mode_lib->vba.VInitPreFillY[k],
+                               &mode_lib->vba.MaxNumSwathY[k]);
+
+               if ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_8)) {
+                       PDEAndMetaPTEBytesFrameC =
+                                       CalculateVMAndRowBytes(
+                                                       mode_lib,
+                                                       mode_lib->vba.DCCEnable[k],
+                                                       mode_lib->vba.BlockHeight256BytesC[k],
+                                                       mode_lib->vba.BlockWidth256BytesC[k],
+                                                       mode_lib->vba.SourcePixelFormat[k],
+                                                       mode_lib->vba.SurfaceTiling[k],
+                                                       dml_ceil(
+                                                                       mode_lib->vba.BytePerPixelDETC[k],
+                                                                       2),
+                                                       mode_lib->vba.SourceScan[k],
+                                                       mode_lib->vba.ViewportWidth[k] / 2,
+                                                       mode_lib->vba.ViewportHeight[k] / 2,
+                                                       mode_lib->vba.SwathWidthY[k] / 2,
+                                                       mode_lib->vba.VirtualMemoryEnable,
+                                                       mode_lib->vba.VMMPageSize,
+                                                       mode_lib->vba.PTEBufferSizeInRequests,
+                                                       mode_lib->vba.PDEProcessingBufIn64KBReqs,
+                                                       mode_lib->vba.PitchC[k],
+                                                       0,
+                                                       &mode_lib->vba.MacroTileWidthC[k],
+                                                       &MetaRowByteC,
+                                                       &PixelPTEBytesPerRowC,
+                                                       &mode_lib->vba.PTEBufferSizeNotExceeded[mode_lib->vba.VoltageLevel],
+                                                       &mode_lib->vba.dpte_row_height_chroma[k],
+                                                       &mode_lib->vba.meta_row_height_chroma[k]);
+                       mode_lib->vba.PrefetchSourceLinesC[k] = CalculatePrefetchSourceLines(
+                                       mode_lib,
+                                       mode_lib->vba.VRatio[k] / 2,
+                                       mode_lib->vba.VTAPsChroma[k],
+                                       mode_lib->vba.Interlace[k],
+                                       mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
+                                       mode_lib->vba.SwathHeightC[k],
+                                       mode_lib->vba.ViewportYStartC[k],
+                                       &mode_lib->vba.VInitPreFillC[k],
+                                       &mode_lib->vba.MaxNumSwathC[k]);
                } else {
                        PixelPTEBytesPerRowC = 0;
                        PDEAndMetaPTEBytesFrameC = 0;
@@ -2138,25 +2509,27 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                }
 
                mode_lib->vba.PixelPTEBytesPerRow[k] = PixelPTEBytesPerRowY + PixelPTEBytesPerRowC;
-               mode_lib->vba.PDEAndMetaPTEBytesFrame[k] = PDEAndMetaPTEBytesFrameY + PDEAndMetaPTEBytesFrameC;
+               mode_lib->vba.PDEAndMetaPTEBytesFrame[k] = PDEAndMetaPTEBytesFrameY
+                               + PDEAndMetaPTEBytesFrameC;
                mode_lib->vba.MetaRowByte[k] = MetaRowByteY + MetaRowByteC;
 
-               CalculateActiveRowBandwidth(mode_lib->vba.VirtualMemoryEnable,
-                       mode_lib->vba.SourcePixelFormat[k],
-                       mode_lib->vba.VRatio[k],
-                       mode_lib->vba.DCCEnable[k],
-                       mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
-                       MetaRowByteY,
-                       MetaRowByteC,
-                       mode_lib->vba.meta_row_height[k],
-                       mode_lib->vba.meta_row_height_chroma[k],
-                       PixelPTEBytesPerRowY,
-                       PixelPTEBytesPerRowC,
-                       mode_lib->vba.dpte_row_height[k],
-                       mode_lib->vba.dpte_row_height_chroma[k],
-                       &mode_lib->vba.meta_row_bw[k],
-                       &mode_lib->vba.dpte_row_bw[k],
-                       &mode_lib->vba.qual_row_bw[k]);
+               CalculateActiveRowBandwidth(
+                               mode_lib->vba.VirtualMemoryEnable,
+                               mode_lib->vba.SourcePixelFormat[k],
+                               mode_lib->vba.VRatio[k],
+                               mode_lib->vba.DCCEnable[k],
+                               mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
+                               MetaRowByteY,
+                               MetaRowByteC,
+                               mode_lib->vba.meta_row_height[k],
+                               mode_lib->vba.meta_row_height_chroma[k],
+                               PixelPTEBytesPerRowY,
+                               PixelPTEBytesPerRowC,
+                               mode_lib->vba.dpte_row_height[k],
+                               mode_lib->vba.dpte_row_height_chroma[k],
+                               &mode_lib->vba.meta_row_bw[k],
+                               &mode_lib->vba.dpte_row_bw[k],
+                               &mode_lib->vba.qual_row_bw[k]);
        }
 
        mode_lib->vba.TCalc = 24.0 / mode_lib->vba.DCFClkDeepSleep;
@@ -2164,32 +2537,37 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.BlendingAndTiming[k] == k) {
                        if (mode_lib->vba.WritebackEnable[k] == true) {
-                               mode_lib->vba.WritebackDelay[k] = mode_lib->vba.WritebackLatency
-                                       + CalculateWriteBackDelay(mode_lib->vba.WritebackPixelFormat[k],
-                                               mode_lib->vba.WritebackHRatio[k],
-                                               mode_lib->vba.WritebackVRatio[k],
-                                               mode_lib->vba.WritebackLumaHTaps[k],
-                                               mode_lib->vba.WritebackLumaVTaps[k],
-                                               mode_lib->vba.WritebackChromaHTaps[k],
-                                               mode_lib->vba.WritebackChromaVTaps[k],
-                                               mode_lib->vba.WritebackDestinationWidth[k])
-                                       / mode_lib->vba.DISPCLK;
+                               mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][k] =
+                                               mode_lib->vba.WritebackLatency
+                                                               + CalculateWriteBackDelay(
+                                                                               mode_lib->vba.WritebackPixelFormat[k],
+                                                                               mode_lib->vba.WritebackHRatio[k],
+                                                                               mode_lib->vba.WritebackVRatio[k],
+                                                                               mode_lib->vba.WritebackLumaHTaps[k],
+                                                                               mode_lib->vba.WritebackLumaVTaps[k],
+                                                                               mode_lib->vba.WritebackChromaHTaps[k],
+                                                                               mode_lib->vba.WritebackChromaVTaps[k],
+                                                                               mode_lib->vba.WritebackDestinationWidth[k])
+                                                                               / mode_lib->vba.DISPCLK;
                        } else
-                               mode_lib->vba.WritebackDelay[k] = 0;
+                               mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][k] = 0;
                        for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j) {
-                               if (mode_lib->vba.BlendingAndTiming[j] == k && mode_lib->vba.WritebackEnable[j] == true) {
-                                       mode_lib->vba.WritebackDelay[k] =
-                                               dml_max(mode_lib->vba.WritebackDelay[k],
-                                                       mode_lib->vba.WritebackLatency
-                                                       + CalculateWriteBackDelay(mode_lib->vba.WritebackPixelFormat[j],
-                                                               mode_lib->vba.WritebackHRatio[j],
-                                                               mode_lib->vba.WritebackVRatio[j],
-                                                               mode_lib->vba.WritebackLumaHTaps[j],
-                                                               mode_lib->vba.WritebackLumaVTaps[j],
-                                                               mode_lib->vba.WritebackChromaHTaps[j],
-                                                               mode_lib->vba.WritebackChromaVTaps[j],
-                                                               mode_lib->vba.WritebackDestinationWidth[j])
-                                                       / mode_lib->vba.DISPCLK);
+                               if (mode_lib->vba.BlendingAndTiming[j] == k
+                                               && mode_lib->vba.WritebackEnable[j] == true) {
+                                       mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][k] =
+                                                       dml_max(
+                                                                       mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][k],
+                                                                       mode_lib->vba.WritebackLatency
+                                                                                       + CalculateWriteBackDelay(
+                                                                                                       mode_lib->vba.WritebackPixelFormat[j],
+                                                                                                       mode_lib->vba.WritebackHRatio[j],
+                                                                                                       mode_lib->vba.WritebackVRatio[j],
+                                                                                                       mode_lib->vba.WritebackLumaHTaps[j],
+                                                                                                       mode_lib->vba.WritebackLumaVTaps[j],
+                                                                                                       mode_lib->vba.WritebackChromaHTaps[j],
+                                                                                                       mode_lib->vba.WritebackChromaVTaps[j],
+                                                                                                       mode_lib->vba.WritebackDestinationWidth[j])
+                                                                                                       / mode_lib->vba.DISPCLK);
                                }
                        }
                }
@@ -2198,27 +2576,34 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
                for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j)
                        if (mode_lib->vba.BlendingAndTiming[k] == j)
-                               mode_lib->vba.WritebackDelay[k] = mode_lib->vba.WritebackDelay[j];
+                               mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][k] =
+                                               mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][j];
 
        mode_lib->vba.VStartupLines = 13;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                mode_lib->vba.MaxVStartupLines[k] =
-                       mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k]
-                       - dml_max(1.0,
-                               dml_ceil(mode_lib->vba.WritebackDelay[k]
-                                       / (mode_lib->vba.HTotal[k]
-                                               / mode_lib->vba.PixelClock[k]),
-                                       1));
+                               mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k]
+                                               - dml_max(
+                                                               1.0,
+                                                               dml_ceil(
+                                                                               mode_lib->vba.WritebackDelay[mode_lib->vba.VoltageLevel][k]
+                                                                                               / (mode_lib->vba.HTotal[k]
+                                                                                                               / mode_lib->vba.PixelClock[k]),
+                                                                               1));
        }
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
-               mode_lib->vba.MaximumMaxVStartupLines = dml_max(mode_lib->vba.MaximumMaxVStartupLines, mode_lib->vba.MaxVStartupLines[k]);
+               mode_lib->vba.MaximumMaxVStartupLines = dml_max(
+                               mode_lib->vba.MaximumMaxVStartupLines,
+                               mode_lib->vba.MaxVStartupLines[k]);
 
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                mode_lib->vba.cursor_bw[k] = 0.0;
                for (j = 0; j < mode_lib->vba.NumberOfCursors[k]; ++j)
-                       mode_lib->vba.cursor_bw[k] += mode_lib->vba.CursorWidth[k][j] * mode_lib->vba.CursorBPP[k][j] / 8.0
-                       / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * mode_lib->vba.VRatio[k];
+                       mode_lib->vba.cursor_bw[k] += mode_lib->vba.CursorWidth[k][j]
+                                       * mode_lib->vba.CursorBPP[k][j] / 8.0
+                                       / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
+                                       * mode_lib->vba.VRatio[k];
        }
 
        do {
@@ -2227,102 +2612,119 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                bool VRatioPrefetchMoreThan4 = false;
                bool prefetch_vm_bw_valid = true;
                bool prefetch_row_bw_valid = true;
-               double TWait = CalculateTWait(mode_lib->vba.PrefetchMode,
-                       mode_lib->vba.DRAMClockChangeLatency,
-                       mode_lib->vba.UrgentLatency,
-                       mode_lib->vba.SREnterPlusExitTime);
+               double TWait = CalculateTWait(
+                               mode_lib->vba.PrefetchMode,
+                               mode_lib->vba.DRAMClockChangeLatency,
+                               mode_lib->vba.UrgentLatency,
+                               mode_lib->vba.SREnterPlusExitTime);
 
                for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                        if (mode_lib->vba.XFCEnabled[k] == true) {
-                               mode_lib->vba.XFCRemoteSurfaceFlipDelay = CalculateRemoteSurfaceFlipDelay(mode_lib,
-                                       mode_lib->vba.VRatio[k],
-                                       mode_lib->vba.SwathWidthY[k],
-                                       dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
-                                       mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
-                                       mode_lib->vba.XFCTSlvVupdateOffset,
-                                       mode_lib->vba.XFCTSlvVupdateWidth,
-                                       mode_lib->vba.XFCTSlvVreadyOffset,
-                                       mode_lib->vba.XFCXBUFLatencyTolerance,
-                                       mode_lib->vba.XFCFillBWOverhead,
-                                       mode_lib->vba.XFCSlvChunkSize,
-                                       mode_lib->vba.XFCBusTransportTime,
-                                       mode_lib->vba.TCalc,
-                                       TWait,
-                                       &mode_lib->vba.SrcActiveDrainRate,
-                                       &mode_lib->vba.TInitXFill,
-                                       &mode_lib->vba.TslvChk);
+                               mode_lib->vba.XFCRemoteSurfaceFlipDelay =
+                                               CalculateRemoteSurfaceFlipDelay(
+                                                               mode_lib,
+                                                               mode_lib->vba.VRatio[k],
+                                                               mode_lib->vba.SwathWidthY[k],
+                                                               dml_ceil(
+                                                                               mode_lib->vba.BytePerPixelDETY[k],
+                                                                               1),
+                                                               mode_lib->vba.HTotal[k]
+                                                                               / mode_lib->vba.PixelClock[k],
+                                                               mode_lib->vba.XFCTSlvVupdateOffset,
+                                                               mode_lib->vba.XFCTSlvVupdateWidth,
+                                                               mode_lib->vba.XFCTSlvVreadyOffset,
+                                                               mode_lib->vba.XFCXBUFLatencyTolerance,
+                                                               mode_lib->vba.XFCFillBWOverhead,
+                                                               mode_lib->vba.XFCSlvChunkSize,
+                                                               mode_lib->vba.XFCBusTransportTime,
+                                                               mode_lib->vba.TCalc,
+                                                               TWait,
+                                                               &mode_lib->vba.SrcActiveDrainRate,
+                                                               &mode_lib->vba.TInitXFill,
+                                                               &mode_lib->vba.TslvChk);
                        } else {
                                mode_lib->vba.XFCRemoteSurfaceFlipDelay = 0;
                        }
-                       mode_lib->vba.ErrorResult[k] = CalculatePrefetchSchedule(mode_lib,
-                               mode_lib->vba.DPPCLK[k],
-                               mode_lib->vba.DISPCLK,
-                               mode_lib->vba.PixelClock[k],
-                               mode_lib->vba.DCFClkDeepSleep,
-                               mode_lib->vba.DSCDelay[k],
-                               mode_lib->vba.DPPPerPlane[k],
-                               mode_lib->vba.ScalerEnabled[k],
-                               mode_lib->vba.NumberOfCursors[k],
-                               mode_lib->vba.DPPCLKDelaySubtotal,
-                               mode_lib->vba.DPPCLKDelaySCL,
-                               mode_lib->vba.DPPCLKDelaySCLLBOnly,
-                               mode_lib->vba.DPPCLKDelayCNVCFormater,
-                               mode_lib->vba.DPPCLKDelayCNVCCursor,
-                               mode_lib->vba.DISPCLKDelaySubtotal,
-                               (unsigned int)(mode_lib->vba.SwathWidthY[k] / mode_lib->vba.HRatio[k]),
-                               mode_lib->vba.OutputFormat[k],
-                               mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k],
-                               mode_lib->vba.HTotal[k],
-                               mode_lib->vba.MaxInterDCNTileRepeaters,
-                               dml_min(mode_lib->vba.VStartupLines, mode_lib->vba.MaxVStartupLines[k]),
-                               mode_lib->vba.MaxPageTableLevels,
-                               mode_lib->vba.VirtualMemoryEnable,
-                               mode_lib->vba.DynamicMetadataEnable[k],
-                               mode_lib->vba.DynamicMetadataLinesBeforeActiveRequired[k],
-                               mode_lib->vba.DynamicMetadataTransmittedBytes[k],
-                               mode_lib->vba.DCCEnable[k],
-                               mode_lib->vba.UrgentLatency,
-                               mode_lib->vba.UrgentExtraLatency,
-                               mode_lib->vba.TCalc,
-                               mode_lib->vba.PDEAndMetaPTEBytesFrame[k],
-                               mode_lib->vba.MetaRowByte[k],
-                               mode_lib->vba.PixelPTEBytesPerRow[k],
-                               mode_lib->vba.PrefetchSourceLinesY[k],
-                               mode_lib->vba.SwathWidthY[k],
-                               mode_lib->vba.BytePerPixelDETY[k],
-                               mode_lib->vba.VInitPreFillY[k],
-                               mode_lib->vba.MaxNumSwathY[k],
-                               mode_lib->vba.PrefetchSourceLinesC[k],
-                               mode_lib->vba.BytePerPixelDETC[k],
-                               mode_lib->vba.VInitPreFillC[k],
-                               mode_lib->vba.MaxNumSwathC[k],
-                               mode_lib->vba.SwathHeightY[k],
-                               mode_lib->vba.SwathHeightC[k],
-                               TWait,
-                               mode_lib->vba.XFCEnabled[k],
-                               mode_lib->vba.XFCRemoteSurfaceFlipDelay,
-                               mode_lib->vba.Interlace[k],
-                               mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
-                               &mode_lib->vba.DSTXAfterScaler[k],
-                               &mode_lib->vba.DSTYAfterScaler[k],
-                               &mode_lib->vba.DestinationLinesForPrefetch[k],
-                               &mode_lib->vba.PrefetchBandwidth[k],
-                               &mode_lib->vba.DestinationLinesToRequestVMInVBlank[k],
-                               &mode_lib->vba.DestinationLinesToRequestRowInVBlank[k],
-                               &mode_lib->vba.VRatioPrefetchY[k],
-                               &mode_lib->vba.VRatioPrefetchC[k],
-                               &mode_lib->vba.RequiredPrefetchPixDataBW[k],
-                               &mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
-                               &mode_lib->vba.Tno_bw[k]);
+                       mode_lib->vba.ErrorResult[k] =
+                                       CalculatePrefetchSchedule(
+                                                       mode_lib,
+                                                       mode_lib->vba.DPPCLK[k],
+                                                       mode_lib->vba.DISPCLK,
+                                                       mode_lib->vba.PixelClock[k],
+                                                       mode_lib->vba.DCFClkDeepSleep,
+                                                       mode_lib->vba.DSCDelay[k],
+                                                       mode_lib->vba.DPPPerPlane[k],
+                                                       mode_lib->vba.ScalerEnabled[k],
+                                                       mode_lib->vba.NumberOfCursors[k],
+                                                       mode_lib->vba.DPPCLKDelaySubtotal,
+                                                       mode_lib->vba.DPPCLKDelaySCL,
+                                                       mode_lib->vba.DPPCLKDelaySCLLBOnly,
+                                                       mode_lib->vba.DPPCLKDelayCNVCFormater,
+                                                       mode_lib->vba.DPPCLKDelayCNVCCursor,
+                                                       mode_lib->vba.DISPCLKDelaySubtotal,
+                                                       (unsigned int) (mode_lib->vba.SwathWidthY[k]
+                                                                       / mode_lib->vba.HRatio[k]),
+                                                       mode_lib->vba.OutputFormat[k],
+                                                       mode_lib->vba.VTotal[k]
+                                                                       - mode_lib->vba.VActive[k],
+                                                       mode_lib->vba.HTotal[k],
+                                                       mode_lib->vba.MaxInterDCNTileRepeaters,
+                                                       dml_min(
+                                                                       mode_lib->vba.VStartupLines,
+                                                                       mode_lib->vba.MaxVStartupLines[k]),
+                                                       mode_lib->vba.MaxPageTableLevels,
+                                                       mode_lib->vba.VirtualMemoryEnable,
+                                                       mode_lib->vba.DynamicMetadataEnable[k],
+                                                       mode_lib->vba.DynamicMetadataLinesBeforeActiveRequired[k],
+                                                       mode_lib->vba.DynamicMetadataTransmittedBytes[k],
+                                                       mode_lib->vba.DCCEnable[k],
+                                                       mode_lib->vba.UrgentLatency,
+                                                       mode_lib->vba.UrgentExtraLatency,
+                                                       mode_lib->vba.TCalc,
+                                                       mode_lib->vba.PDEAndMetaPTEBytesFrame[k],
+                                                       mode_lib->vba.MetaRowByte[k],
+                                                       mode_lib->vba.PixelPTEBytesPerRow[k],
+                                                       mode_lib->vba.PrefetchSourceLinesY[k],
+                                                       mode_lib->vba.SwathWidthY[k],
+                                                       mode_lib->vba.BytePerPixelDETY[k],
+                                                       mode_lib->vba.VInitPreFillY[k],
+                                                       mode_lib->vba.MaxNumSwathY[k],
+                                                       mode_lib->vba.PrefetchSourceLinesC[k],
+                                                       mode_lib->vba.BytePerPixelDETC[k],
+                                                       mode_lib->vba.VInitPreFillC[k],
+                                                       mode_lib->vba.MaxNumSwathC[k],
+                                                       mode_lib->vba.SwathHeightY[k],
+                                                       mode_lib->vba.SwathHeightC[k],
+                                                       TWait,
+                                                       mode_lib->vba.XFCEnabled[k],
+                                                       mode_lib->vba.XFCRemoteSurfaceFlipDelay,
+                                                       mode_lib->vba.Interlace[k],
+                                                       mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
+                                                       &mode_lib->vba.DSTXAfterScaler[k],
+                                                       &mode_lib->vba.DSTYAfterScaler[k],
+                                                       &mode_lib->vba.DestinationLinesForPrefetch[k],
+                                                       &mode_lib->vba.PrefetchBandwidth[k],
+                                                       &mode_lib->vba.DestinationLinesToRequestVMInVBlank[k],
+                                                       &mode_lib->vba.DestinationLinesToRequestRowInVBlank[k],
+                                                       &mode_lib->vba.VRatioPrefetchY[k],
+                                                       &mode_lib->vba.VRatioPrefetchC[k],
+                                                       &mode_lib->vba.RequiredPrefetchPixDataBW[k],
+                                                       &mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
+                                                       &mode_lib->vba.Tno_bw[k]);
                        if (mode_lib->vba.BlendingAndTiming[k] == k) {
-                               mode_lib->vba.VStartup[k] = dml_min(mode_lib->vba.VStartupLines, mode_lib->vba.MaxVStartupLines[k]);
-                               if (mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata != 0) {
+                               mode_lib->vba.VStartup[k] = dml_min(
+                                               mode_lib->vba.VStartupLines,
+                                               mode_lib->vba.MaxVStartupLines[k]);
+                               if (mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata
+                                               != 0) {
                                        mode_lib->vba.VStartup[k] =
-                                               mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata;
+                                                       mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata;
                                }
                        } else {
-                               mode_lib->vba.VStartup[k] = dml_min(mode_lib->vba.VStartupLines,
-                                       mode_lib->vba.MaxVStartupLines[mode_lib->vba.BlendingAndTiming[k]]);
+                               mode_lib->vba.VStartup[k] =
+                                               dml_min(
+                                                               mode_lib->vba.VStartupLines,
+                                                               mode_lib->vba.MaxVStartupLines[mode_lib->vba.BlendingAndTiming[k]]);
                        }
                }
 
@@ -2331,116 +2733,136 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                        if (mode_lib->vba.PDEAndMetaPTEBytesFrame[k] == 0)
                                mode_lib->vba.prefetch_vm_bw[k] = 0;
                        else if (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k] > 0) {
-                               mode_lib->vba.prefetch_vm_bw[k] = (double)mode_lib->vba.PDEAndMetaPTEBytesFrame[k]
-                                       / (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k]
-                                               * mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+                               mode_lib->vba.prefetch_vm_bw[k] =
+                                               (double) mode_lib->vba.PDEAndMetaPTEBytesFrame[k]
+                                                               / (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k]
+                                                                               * mode_lib->vba.HTotal[k]
+                                                                               / mode_lib->vba.PixelClock[k]);
                        } else {
                                mode_lib->vba.prefetch_vm_bw[k] = 0;
                                prefetch_vm_bw_valid = false;
                        }
-                       if (mode_lib->vba.MetaRowByte[k] + mode_lib->vba.PixelPTEBytesPerRow[k] == 0)
+                       if (mode_lib->vba.MetaRowByte[k] + mode_lib->vba.PixelPTEBytesPerRow[k]
+                                       == 0)
                                mode_lib->vba.prefetch_row_bw[k] = 0;
                        else if (mode_lib->vba.DestinationLinesToRequestRowInVBlank[k] > 0) {
-                               mode_lib->vba.prefetch_row_bw[k] = (double)(mode_lib->vba.MetaRowByte[k]
-                                       + mode_lib->vba.PixelPTEBytesPerRow[k])
-                                       / (mode_lib->vba.DestinationLinesToRequestRowInVBlank[k]
-                                               * mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+                               mode_lib->vba.prefetch_row_bw[k] =
+                                               (double) (mode_lib->vba.MetaRowByte[k]
+                                                               + mode_lib->vba.PixelPTEBytesPerRow[k])
+                                                               / (mode_lib->vba.DestinationLinesToRequestRowInVBlank[k]
+                                                                               * mode_lib->vba.HTotal[k]
+                                                                               / mode_lib->vba.PixelClock[k]);
                        } else {
                                mode_lib->vba.prefetch_row_bw[k] = 0;
                                prefetch_row_bw_valid = false;
                        }
 
                        MaxTotalRDBandwidth =
-                               MaxTotalRDBandwidth + mode_lib->vba.cursor_bw[k]
-                               + dml_max(mode_lib->vba.prefetch_vm_bw[k],
-                                       dml_max(mode_lib->vba.prefetch_row_bw[k],
-                                               dml_max(mode_lib->vba.ReadBandwidthPlaneLuma[k]
-                                                       + mode_lib->vba.ReadBandwidthPlaneChroma[k],
-                                                       mode_lib->vba.RequiredPrefetchPixDataBW[k])
-                                               + mode_lib->vba.meta_row_bw[k]
-                                               + mode_lib->vba.dpte_row_bw[k]));
+                                       MaxTotalRDBandwidth + mode_lib->vba.cursor_bw[k]
+                                                       + dml_max(
+                                                                       mode_lib->vba.prefetch_vm_bw[k],
+                                                                       dml_max(
+                                                                                       mode_lib->vba.prefetch_row_bw[k],
+                                                                                       dml_max(
+                                                                                                       mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                                                                       + mode_lib->vba.ReadBandwidthPlaneChroma[k],
+                                                                                                       mode_lib->vba.RequiredPrefetchPixDataBW[k])
+                                                                                                       + mode_lib->vba.meta_row_bw[k]
+                                                                                                       + mode_lib->vba.dpte_row_bw[k]));
 
                        if (mode_lib->vba.DestinationLinesForPrefetch[k] < 2)
                                DestinationLineTimesForPrefetchLessThan2 = true;
-                       if (mode_lib->vba.VRatioPrefetchY[k] > 4 || mode_lib->vba.VRatioPrefetchC[k] > 4)
+                       if (mode_lib->vba.VRatioPrefetchY[k] > 4
+                                       || mode_lib->vba.VRatioPrefetchC[k] > 4)
                                VRatioPrefetchMoreThan4 = true;
                }
 
-               if (MaxTotalRDBandwidth <= mode_lib->vba.ReturnBW && prefetch_vm_bw_valid && prefetch_row_bw_valid
-                               && !VRatioPrefetchMoreThan4
+               if (MaxTotalRDBandwidth <= mode_lib->vba.ReturnBW && prefetch_vm_bw_valid
+                               && prefetch_row_bw_valid && !VRatioPrefetchMoreThan4
                                && !DestinationLineTimesForPrefetchLessThan2)
                        mode_lib->vba.PrefetchModeSupported = true;
                else {
                        mode_lib->vba.PrefetchModeSupported = false;
-                       dml_print("DML: CalculatePrefetchSchedule ***failed***. Bandwidth violation. Results are NOT valid\n");
+                       dml_print(
+                                       "DML: CalculatePrefetchSchedule ***failed***. Bandwidth violation. Results are NOT valid\n");
                }
 
                if (mode_lib->vba.PrefetchModeSupported == true) {
-                       double final_flip_bw[DC__NUM_PIPES__MAX];
-                       unsigned int ImmediateFlipBytes[DC__NUM_PIPES__MAX];
+                       double final_flip_bw[DC__NUM_DPP__MAX];
+                       unsigned int ImmediateFlipBytes[DC__NUM_DPP__MAX];
                        double total_dcn_read_bw_with_flip = 0;
 
                        mode_lib->vba.BandwidthAvailableForImmediateFlip = mode_lib->vba.ReturnBW;
                        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                                mode_lib->vba.BandwidthAvailableForImmediateFlip =
-                                       mode_lib->vba.BandwidthAvailableForImmediateFlip - mode_lib->vba.cursor_bw[k]
-                                       - dml_max(mode_lib->vba.ReadBandwidthPlaneLuma[k]
-                                               + mode_lib->vba.ReadBandwidthPlaneChroma[k]
-                                               + mode_lib->vba.qual_row_bw[k],
-                                               mode_lib->vba.PrefetchBandwidth[k]);
+                                               mode_lib->vba.BandwidthAvailableForImmediateFlip
+                                                               - mode_lib->vba.cursor_bw[k]
+                                                               - dml_max(
+                                                                               mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                                               + mode_lib->vba.ReadBandwidthPlaneChroma[k]
+                                                                                               + mode_lib->vba.qual_row_bw[k],
+                                                                               mode_lib->vba.PrefetchBandwidth[k]);
                        }
 
                        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                                ImmediateFlipBytes[k] = 0;
                                if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8
-                                       && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
-                                       ImmediateFlipBytes[k] = mode_lib->vba.PDEAndMetaPTEBytesFrame[k]
-                                               + mode_lib->vba.MetaRowByte[k]
-                                               + mode_lib->vba.PixelPTEBytesPerRow[k];
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
+                                       ImmediateFlipBytes[k] =
+                                                       mode_lib->vba.PDEAndMetaPTEBytesFrame[k]
+                                                                       + mode_lib->vba.MetaRowByte[k]
+                                                                       + mode_lib->vba.PixelPTEBytesPerRow[k];
                                }
                        }
                        mode_lib->vba.TotImmediateFlipBytes = 0;
                        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                                if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8
-                                       && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
-                                       mode_lib->vba.TotImmediateFlipBytes = mode_lib->vba.TotImmediateFlipBytes
-                                               + ImmediateFlipBytes[k];
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
+                                       mode_lib->vba.TotImmediateFlipBytes =
+                                                       mode_lib->vba.TotImmediateFlipBytes
+                                                                       + ImmediateFlipBytes[k];
                                }
                        }
                        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
-                               CalculateFlipSchedule(mode_lib,
-                                       mode_lib->vba.UrgentExtraLatency,
-                                       mode_lib->vba.UrgentLatency,
-                                       mode_lib->vba.MaxPageTableLevels,
-                                       mode_lib->vba.VirtualMemoryEnable,
-                                       mode_lib->vba.BandwidthAvailableForImmediateFlip,
-                                       mode_lib->vba.TotImmediateFlipBytes,
-                                       mode_lib->vba.SourcePixelFormat[k],
-                                       ImmediateFlipBytes[k],
-                                       mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
-                                       mode_lib->vba.VRatio[k],
-                                       mode_lib->vba.Tno_bw[k],
-                                       mode_lib->vba.PDEAndMetaPTEBytesFrame[k],
-                                       mode_lib->vba.MetaRowByte[k],
-                                       mode_lib->vba.PixelPTEBytesPerRow[k],
-                                       mode_lib->vba.DCCEnable[k],
-                                       mode_lib->vba.dpte_row_height[k],
-                                       mode_lib->vba.meta_row_height[k],
-                                       mode_lib->vba.qual_row_bw[k],
-                                       &mode_lib->vba.DestinationLinesToRequestVMInImmediateFlip[k],
-                                       &mode_lib->vba.DestinationLinesToRequestRowInImmediateFlip[k],
-                                       &final_flip_bw[k],
-                                       &mode_lib->vba.ImmediateFlipSupportedForPipe[k]);
+                               CalculateFlipSchedule(
+                                               mode_lib,
+                                               mode_lib->vba.UrgentExtraLatency,
+                                               mode_lib->vba.UrgentLatency,
+                                               mode_lib->vba.MaxPageTableLevels,
+                                               mode_lib->vba.VirtualMemoryEnable,
+                                               mode_lib->vba.BandwidthAvailableForImmediateFlip,
+                                               mode_lib->vba.TotImmediateFlipBytes,
+                                               mode_lib->vba.SourcePixelFormat[k],
+                                               ImmediateFlipBytes[k],
+                                               mode_lib->vba.HTotal[k]
+                                                               / mode_lib->vba.PixelClock[k],
+                                               mode_lib->vba.VRatio[k],
+                                               mode_lib->vba.Tno_bw[k],
+                                               mode_lib->vba.PDEAndMetaPTEBytesFrame[k],
+                                               mode_lib->vba.MetaRowByte[k],
+                                               mode_lib->vba.PixelPTEBytesPerRow[k],
+                                               mode_lib->vba.DCCEnable[k],
+                                               mode_lib->vba.dpte_row_height[k],
+                                               mode_lib->vba.meta_row_height[k],
+                                               mode_lib->vba.qual_row_bw[k],
+                                               &mode_lib->vba.DestinationLinesToRequestVMInImmediateFlip[k],
+                                               &mode_lib->vba.DestinationLinesToRequestRowInImmediateFlip[k],
+                                               &final_flip_bw[k],
+                                               &mode_lib->vba.ImmediateFlipSupportedForPipe[k]);
                        }
                        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                                total_dcn_read_bw_with_flip =
-                                       total_dcn_read_bw_with_flip + mode_lib->vba.cursor_bw[k]
-                                       + dml_max(mode_lib->vba.prefetch_vm_bw[k],
-                                               dml_max(mode_lib->vba.prefetch_row_bw[k],
-                                                       final_flip_bw[k]
-                                                       + dml_max(mode_lib->vba.ReadBandwidthPlaneLuma[k]
-                                                               + mode_lib->vba.ReadBandwidthPlaneChroma[k],
-                                                               mode_lib->vba.RequiredPrefetchPixDataBW[k])));
+                                               total_dcn_read_bw_with_flip
+                                                               + mode_lib->vba.cursor_bw[k]
+                                                               + dml_max(
+                                                                               mode_lib->vba.prefetch_vm_bw[k],
+                                                                               dml_max(
+                                                                                               mode_lib->vba.prefetch_row_bw[k],
+                                                                                               final_flip_bw[k]
+                                                                                                               + dml_max(
+                                                                                                                               mode_lib->vba.ReadBandwidthPlaneLuma[k]
+                                                                                                                                               + mode_lib->vba.ReadBandwidthPlaneChroma[k],
+                                                                                                                               mode_lib->vba.RequiredPrefetchPixDataBW[k])));
                        }
                        mode_lib->vba.ImmediateFlipSupported = true;
                        if (total_dcn_read_bw_with_flip > mode_lib->vba.ReturnBW) {
@@ -2458,35 +2880,44 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                        if (mode_lib->vba.ErrorResult[k]) {
                                mode_lib->vba.PrefetchModeSupported = false;
-                               dml_print("DML: CalculatePrefetchSchedule ***failed***. Prefetch schedule violation. Results are NOT valid\n");
+                               dml_print(
+                                               "DML: CalculatePrefetchSchedule ***failed***. Prefetch schedule violation. Results are NOT valid\n");
                        }
                }
 
                mode_lib->vba.VStartupLines = mode_lib->vba.VStartupLines + 1;
        } while (!((mode_lib->vba.PrefetchModeSupported
-               && (!mode_lib->vba.ImmediateFlipSupport || mode_lib->vba.ImmediateFlipSupported))
-               || mode_lib->vba.MaximumMaxVStartupLines < mode_lib->vba.VStartupLines));
+                       && (!mode_lib->vba.ImmediateFlipSupport
+                                       || mode_lib->vba.ImmediateFlipSupported))
+                       || mode_lib->vba.MaximumMaxVStartupLines < mode_lib->vba.VStartupLines));
 
        //Display Pipeline Delivery Time in Prefetch
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.VRatioPrefetchY[k] <= 1) {
-                       mode_lib->vba.DisplayPipeLineDeliveryTimeLumaPrefetch[k] = mode_lib->vba.SwathWidthY[k]
-                               * mode_lib->vba.DPPPerPlane[k] / mode_lib->vba.HRatio[k] / mode_lib->vba.PixelClock[k];
+                       mode_lib->vba.DisplayPipeLineDeliveryTimeLumaPrefetch[k] =
+                                       mode_lib->vba.SwathWidthY[k] * mode_lib->vba.DPPPerPlane[k]
+                                                       / mode_lib->vba.HRatio[k]
+                                                       / mode_lib->vba.PixelClock[k];
                } else {
-                       mode_lib->vba.DisplayPipeLineDeliveryTimeLumaPrefetch[k] = mode_lib->vba.SwathWidthY[k]
-                               / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k] / mode_lib->vba.DPPCLK[k];
+                       mode_lib->vba.DisplayPipeLineDeliveryTimeLumaPrefetch[k] =
+                                       mode_lib->vba.SwathWidthY[k]
+                                                       / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k]
+                                                       / mode_lib->vba.DPPCLK[k];
                }
                if (mode_lib->vba.BytePerPixelDETC[k] == 0) {
                        mode_lib->vba.DisplayPipeLineDeliveryTimeChromaPrefetch[k] = 0;
                } else {
                        if (mode_lib->vba.VRatioPrefetchC[k] <= 1) {
                                mode_lib->vba.DisplayPipeLineDeliveryTimeChromaPrefetch[k] =
-                                       mode_lib->vba.SwathWidthY[k] * mode_lib->vba.DPPPerPlane[k] / mode_lib->vba.HRatio[k]
-                                       / mode_lib->vba.PixelClock[k];
+                                               mode_lib->vba.SwathWidthY[k]
+                                                               * mode_lib->vba.DPPPerPlane[k]
+                                                               / mode_lib->vba.HRatio[k]
+                                                               / mode_lib->vba.PixelClock[k];
                        } else {
                                mode_lib->vba.DisplayPipeLineDeliveryTimeChromaPrefetch[k] =
-                                       mode_lib->vba.SwathWidthY[k] / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k]
-                                       / mode_lib->vba.DPPCLK[k];
+                                               mode_lib->vba.SwathWidthY[k]
+                                                               / mode_lib->vba.PSCL_THROUGHPUT_LUMA[k]
+                                                               / mode_lib->vba.DPPCLK[k];
                        }
                }
        }
@@ -2496,19 +2927,25 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                if (mode_lib->vba.PrefetchMode == 0) {
                        mode_lib->vba.AllowDRAMClockChangeDuringVBlank[k] = true;
                        mode_lib->vba.AllowDRAMSelfRefreshDuringVBlank[k] = true;
-                       mode_lib->vba.MinTTUVBlank[k] = dml_max(mode_lib->vba.DRAMClockChangeWatermark,
-                               dml_max(mode_lib->vba.StutterEnterPlusExitWatermark, mode_lib->vba.UrgentWatermark));
+                       mode_lib->vba.MinTTUVBlank[k] = dml_max(
+                                       mode_lib->vba.DRAMClockChangeWatermark,
+                                       dml_max(
+                                                       mode_lib->vba.StutterEnterPlusExitWatermark,
+                                                       mode_lib->vba.UrgentWatermark));
                } else if (mode_lib->vba.PrefetchMode == 1) {
                        mode_lib->vba.AllowDRAMClockChangeDuringVBlank[k] = false;
                        mode_lib->vba.AllowDRAMSelfRefreshDuringVBlank[k] = true;
-                       mode_lib->vba.MinTTUVBlank[k] = dml_max(mode_lib->vba.StutterEnterPlusExitWatermark, mode_lib->vba.UrgentWatermark);
+                       mode_lib->vba.MinTTUVBlank[k] = dml_max(
+                                       mode_lib->vba.StutterEnterPlusExitWatermark,
+                                       mode_lib->vba.UrgentWatermark);
                } else {
                        mode_lib->vba.AllowDRAMClockChangeDuringVBlank[k] = false;
                        mode_lib->vba.AllowDRAMSelfRefreshDuringVBlank[k] = false;
                        mode_lib->vba.MinTTUVBlank[k] = mode_lib->vba.UrgentWatermark;
                }
                if (!mode_lib->vba.DynamicMetadataEnable[k])
-                       mode_lib->vba.MinTTUVBlank[k] = mode_lib->vba.TCalc + mode_lib->vba.MinTTUVBlank[k];
+                       mode_lib->vba.MinTTUVBlank[k] = mode_lib->vba.TCalc
+                                       + mode_lib->vba.MinTTUVBlank[k];
        }
 
        // DCC Configuration
@@ -2528,33 +2965,43 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                double ActiveDRAMClockChangeLatencyMarginY;
 
                mode_lib->vba.LBLatencyHidingSourceLinesY =
-                       dml_min(mode_lib->vba.MaxLineBufferLines,
-                               (unsigned int)dml_floor((double)mode_lib->vba.LineBufferSize
-                                       / mode_lib->vba.LBBitPerPixel[k]
-                                       / (mode_lib->vba.SwathWidthY[k]
-                                               / dml_max(mode_lib->vba.HRatio[k],
-                                                       1.0)),
-                                       1)) - (mode_lib->vba.vtaps[k] - 1);
+                               dml_min(
+                                               mode_lib->vba.MaxLineBufferLines,
+                                               (unsigned int) dml_floor(
+                                                               (double) mode_lib->vba.LineBufferSize
+                                                                               / mode_lib->vba.LBBitPerPixel[k]
+                                                                               / (mode_lib->vba.SwathWidthY[k]
+                                                                                               / dml_max(
+                                                                                                               mode_lib->vba.HRatio[k],
+                                                                                                               1.0)),
+                                                               1)) - (mode_lib->vba.vtaps[k] - 1);
 
                mode_lib->vba.LBLatencyHidingSourceLinesC =
-                       dml_min(mode_lib->vba.MaxLineBufferLines,
-                               (unsigned int)dml_floor((double)mode_lib->vba.LineBufferSize
-                                       / mode_lib->vba.LBBitPerPixel[k]
-                                       / (mode_lib->vba.SwathWidthY[k]
-                                               / 2.0
-                                               / dml_max(mode_lib->vba.HRatio[k]
-                                                       / 2,
-                                                       1.0)),
-                                       1)) - (mode_lib->vba.VTAPsChroma[k] - 1);
-
-               EffectiveLBLatencyHidingY = mode_lib->vba.LBLatencyHidingSourceLinesY / mode_lib->vba.VRatio[k]
-                       * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
-
-               EffectiveLBLatencyHidingC = mode_lib->vba.LBLatencyHidingSourceLinesC / (mode_lib->vba.VRatio[k] / 2)
-                       * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+                               dml_min(
+                                               mode_lib->vba.MaxLineBufferLines,
+                                               (unsigned int) dml_floor(
+                                                               (double) mode_lib->vba.LineBufferSize
+                                                                               / mode_lib->vba.LBBitPerPixel[k]
+                                                                               / (mode_lib->vba.SwathWidthY[k]
+                                                                                               / 2.0
+                                                                                               / dml_max(
+                                                                                                               mode_lib->vba.HRatio[k]
+                                                                                                                               / 2,
+                                                                                                               1.0)),
+                                                               1))
+                                               - (mode_lib->vba.VTAPsChroma[k] - 1);
+
+               EffectiveLBLatencyHidingY = mode_lib->vba.LBLatencyHidingSourceLinesY
+                               / mode_lib->vba.VRatio[k]
+                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+
+               EffectiveLBLatencyHidingC = mode_lib->vba.LBLatencyHidingSourceLinesC
+                               / (mode_lib->vba.VRatio[k] / 2)
+                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
 
                if (mode_lib->vba.SwathWidthY[k] > 2 * mode_lib->vba.DPPOutputBufferPixels) {
-                       DPPOutputBufferLinesY = mode_lib->vba.DPPOutputBufferPixels / mode_lib->vba.SwathWidthY[k];
+                       DPPOutputBufferLinesY = mode_lib->vba.DPPOutputBufferPixels
+                                       / mode_lib->vba.SwathWidthY[k];
                } else if (mode_lib->vba.SwathWidthY[k] > mode_lib->vba.DPPOutputBufferPixels) {
                        DPPOutputBufferLinesY = 0.5;
                } else {
@@ -2562,7 +3009,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                }
 
                if (mode_lib->vba.SwathWidthY[k] / 2 > 2 * mode_lib->vba.DPPOutputBufferPixels) {
-                       DPPOutputBufferLinesC = mode_lib->vba.DPPOutputBufferPixels / (mode_lib->vba.SwathWidthY[k] / 2);
+                       DPPOutputBufferLinesC = mode_lib->vba.DPPOutputBufferPixels
+                                       / (mode_lib->vba.SwathWidthY[k] / 2);
                } else if (mode_lib->vba.SwathWidthY[k] / 2 > mode_lib->vba.DPPOutputBufferPixels) {
                        DPPOutputBufferLinesC = 0.5;
                } else {
@@ -2570,46 +3018,59 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                }
 
                DPPOPPBufferingY = (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
-                       * (DPPOutputBufferLinesY + mode_lib->vba.OPPOutputBufferLines);
+                               * (DPPOutputBufferLinesY + mode_lib->vba.OPPOutputBufferLines);
                MaxDETBufferingTimeY = mode_lib->vba.FullDETBufferingTimeY[k]
-                       + (mode_lib->vba.LinesInDETY[k] - mode_lib->vba.LinesInDETYRoundedDownToSwath[k])
-                       / mode_lib->vba.SwathHeightY[k] * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+                               + (mode_lib->vba.LinesInDETY[k]
+                                               - mode_lib->vba.LinesInDETYRoundedDownToSwath[k])
+                                               / mode_lib->vba.SwathHeightY[k]
+                                               * (mode_lib->vba.HTotal[k]
+                                                               / mode_lib->vba.PixelClock[k]);
 
                ActiveDRAMClockChangeLatencyMarginY = DPPOPPBufferingY + EffectiveLBLatencyHidingY
-                       + MaxDETBufferingTimeY - mode_lib->vba.DRAMClockChangeWatermark;
+                               + MaxDETBufferingTimeY - mode_lib->vba.DRAMClockChangeWatermark;
 
                if (mode_lib->vba.ActiveDPPs > 1) {
-                       ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY
-                               - (1 - 1 / (mode_lib->vba.ActiveDPPs - 1)) * mode_lib->vba.SwathHeightY[k]
-                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+                       ActiveDRAMClockChangeLatencyMarginY =
+                                       ActiveDRAMClockChangeLatencyMarginY
+                                                       - (1 - 1 / (mode_lib->vba.ActiveDPPs - 1))
+                                                                       * mode_lib->vba.SwathHeightY[k]
+                                                                       * (mode_lib->vba.HTotal[k]
+                                                                                       / mode_lib->vba.PixelClock[k]);
                }
 
                if (mode_lib->vba.BytePerPixelDETC[k] > 0) {
-                       double DPPOPPBufferingC = (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
-                               * (DPPOutputBufferLinesC + mode_lib->vba.OPPOutputBufferLines);
+                       double DPPOPPBufferingC = (mode_lib->vba.HTotal[k]
+                                       / mode_lib->vba.PixelClock[k])
+                                       * (DPPOutputBufferLinesC
+                                                       + mode_lib->vba.OPPOutputBufferLines);
                        double MaxDETBufferingTimeC =
-                               mode_lib->vba.FullDETBufferingTimeC[k]
-                               + (mode_lib->vba.LinesInDETC[k]
-                                       - mode_lib->vba.LinesInDETCRoundedDownToSwath[k])
-                               / mode_lib->vba.SwathHeightC[k]
-                               * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+                                       mode_lib->vba.FullDETBufferingTimeC[k]
+                                                       + (mode_lib->vba.LinesInDETC[k]
+                                                                       - mode_lib->vba.LinesInDETCRoundedDownToSwath[k])
+                                                                       / mode_lib->vba.SwathHeightC[k]
+                                                                       * (mode_lib->vba.HTotal[k]
+                                                                                       / mode_lib->vba.PixelClock[k]);
                        double ActiveDRAMClockChangeLatencyMarginC = DPPOPPBufferingC
-                               + EffectiveLBLatencyHidingC + MaxDETBufferingTimeC
-                               - mode_lib->vba.DRAMClockChangeWatermark;
+                                       + EffectiveLBLatencyHidingC + MaxDETBufferingTimeC
+                                       - mode_lib->vba.DRAMClockChangeWatermark;
 
                        if (mode_lib->vba.ActiveDPPs > 1) {
                                ActiveDRAMClockChangeLatencyMarginC =
-                                       ActiveDRAMClockChangeLatencyMarginC
-                                       - (1 - 1 / (mode_lib->vba.ActiveDPPs - 1))
-                                       * mode_lib->vba.SwathHeightC[k]
-                                       * (mode_lib->vba.HTotal[k]
-                                               / mode_lib->vba.PixelClock[k]);
-                       }
-                       mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY,
-                               ActiveDRAMClockChangeLatencyMarginC);
+                                               ActiveDRAMClockChangeLatencyMarginC
+                                                               - (1
+                                                                               - 1
+                                                                                               / (mode_lib->vba.ActiveDPPs
+                                                                                                               - 1))
+                                                                               * mode_lib->vba.SwathHeightC[k]
+                                                                               * (mode_lib->vba.HTotal[k]
+                                                                                               / mode_lib->vba.PixelClock[k]);
+                       }
+                       mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(
+                                       ActiveDRAMClockChangeLatencyMarginY,
+                                       ActiveDRAMClockChangeLatencyMarginC);
                } else {
                        mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] =
-                               ActiveDRAMClockChangeLatencyMarginY;
+                                       ActiveDRAMClockChangeLatencyMarginY;
                }
 
                if (mode_lib->vba.WritebackEnable[k]) {
@@ -2617,51 +3078,60 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 
                        if (mode_lib->vba.WritebackPixelFormat[k] == dm_444_32) {
                                WritebackDRAMClockChangeLatencyMargin =
-                                       (double)(mode_lib->vba.WritebackInterfaceLumaBufferSize
-                                               + mode_lib->vba.WritebackInterfaceChromaBufferSize)
-                                       / (mode_lib->vba.WritebackDestinationWidth[k]
-                                               * mode_lib->vba.WritebackDestinationHeight[k]
-                                               / (mode_lib->vba.WritebackSourceHeight[k]
-                                                       * mode_lib->vba.HTotal[k]
-                                                       / mode_lib->vba.PixelClock[k])
-                                               * 4)
-                                       - mode_lib->vba.WritebackDRAMClockChangeWatermark;
+                                               (double) (mode_lib->vba.WritebackInterfaceLumaBufferSize
+                                                               + mode_lib->vba.WritebackInterfaceChromaBufferSize)
+                                                               / (mode_lib->vba.WritebackDestinationWidth[k]
+                                                                               * mode_lib->vba.WritebackDestinationHeight[k]
+                                                                               / (mode_lib->vba.WritebackSourceHeight[k]
+                                                                                               * mode_lib->vba.HTotal[k]
+                                                                                               / mode_lib->vba.PixelClock[k])
+                                                                               * 4)
+                                                               - mode_lib->vba.WritebackDRAMClockChangeWatermark;
                        } else if (mode_lib->vba.WritebackPixelFormat[k] == dm_420_10) {
-                               WritebackDRAMClockChangeLatencyMargin = dml_min((double)mode_lib->vba.WritebackInterfaceLumaBufferSize * 8.0
-                                       / 10,
-                                       2.0 * mode_lib->vba.WritebackInterfaceChromaBufferSize * 8 / 10)
-                                       / (mode_lib->vba.WritebackDestinationWidth[k]
-                                               * mode_lib->vba.WritebackDestinationHeight[k]
-                                               / (mode_lib->vba.WritebackSourceHeight[k]
-                                                       * mode_lib->vba.HTotal[k]
-                                                       / mode_lib->vba.PixelClock[k]))
-                                       - mode_lib->vba.WritebackDRAMClockChangeWatermark;
+                               WritebackDRAMClockChangeLatencyMargin =
+                                               dml_min(
+                                                               (double) mode_lib->vba.WritebackInterfaceLumaBufferSize
+                                                                               * 8.0 / 10,
+                                                               2.0
+                                                                               * mode_lib->vba.WritebackInterfaceChromaBufferSize
+                                                                               * 8 / 10)
+                                                               / (mode_lib->vba.WritebackDestinationWidth[k]
+                                                                               * mode_lib->vba.WritebackDestinationHeight[k]
+                                                                               / (mode_lib->vba.WritebackSourceHeight[k]
+                                                                                               * mode_lib->vba.HTotal[k]
+                                                                                               / mode_lib->vba.PixelClock[k]))
+                                                               - mode_lib->vba.WritebackDRAMClockChangeWatermark;
                        } else {
-                               WritebackDRAMClockChangeLatencyMargin = dml_min((double)mode_lib->vba.WritebackInterfaceLumaBufferSize,
-                                       2.0 * mode_lib->vba.WritebackInterfaceChromaBufferSize)
-                                       / (mode_lib->vba.WritebackDestinationWidth[k]
-                                               * mode_lib->vba.WritebackDestinationHeight[k]
-                                               / (mode_lib->vba.WritebackSourceHeight[k]
-                                                       * mode_lib->vba.HTotal[k]
-                                                       / mode_lib->vba.PixelClock[k]))
-                                       - mode_lib->vba.WritebackDRAMClockChangeWatermark;
+                               WritebackDRAMClockChangeLatencyMargin =
+                                               dml_min(
+                                                               (double) mode_lib->vba.WritebackInterfaceLumaBufferSize,
+                                                               2.0
+                                                                               * mode_lib->vba.WritebackInterfaceChromaBufferSize)
+                                                               / (mode_lib->vba.WritebackDestinationWidth[k]
+                                                                               * mode_lib->vba.WritebackDestinationHeight[k]
+                                                                               / (mode_lib->vba.WritebackSourceHeight[k]
+                                                                                               * mode_lib->vba.HTotal[k]
+                                                                                               / mode_lib->vba.PixelClock[k]))
+                                                               - mode_lib->vba.WritebackDRAMClockChangeWatermark;
                        }
-                       mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k],
-                               WritebackDRAMClockChangeLatencyMargin);
+                       mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(
+                                       mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k],
+                                       WritebackDRAMClockChangeLatencyMargin);
                }
        }
 
        mode_lib->vba.MinActiveDRAMClockChangeMargin = 999999;
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                if (mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k]
-                       < mode_lib->vba.MinActiveDRAMClockChangeMargin) {
+                               < mode_lib->vba.MinActiveDRAMClockChangeMargin) {
                        mode_lib->vba.MinActiveDRAMClockChangeMargin =
-                               mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k];
+                                       mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k];
                }
        }
 
-       mode_lib->vba.MinActiveDRAMClockChangeLatencySupported = mode_lib->vba.MinActiveDRAMClockChangeMargin
-               + mode_lib->vba.DRAMClockChangeLatency;
+       mode_lib->vba.MinActiveDRAMClockChangeLatencySupported =
+                       mode_lib->vba.MinActiveDRAMClockChangeMargin
+                                       + mode_lib->vba.DRAMClockChangeLatency;
 
        if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 0) {
                mode_lib->vba.DRAMClockChangeSupport = dm_dram_clock_change_vactive;
@@ -2670,7 +3140,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                        mode_lib->vba.DRAMClockChangeSupport = dm_dram_clock_change_vblank;
                        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                                if (!mode_lib->vba.AllowDRAMClockChangeDuringVBlank[k]) {
-                                       mode_lib->vba.DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
+                                       mode_lib->vba.DRAMClockChangeSupport =
+                                                       dm_dram_clock_change_unsupported;
                                }
                        }
                } else {
@@ -2686,48 +3157,74 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                        mode_lib->vba.XFCSlaveVUpdateOffset[k] = mode_lib->vba.XFCTSlvVupdateOffset;
                        mode_lib->vba.XFCSlaveVupdateWidth[k] = mode_lib->vba.XFCTSlvVupdateWidth;
                        mode_lib->vba.XFCSlaveVReadyOffset[k] = mode_lib->vba.XFCTSlvVreadyOffset;
-                       TWait = CalculateTWait(mode_lib->vba.PrefetchMode,
-                               mode_lib->vba.DRAMClockChangeLatency,
-                               mode_lib->vba.UrgentLatency,
-                               mode_lib->vba.SREnterPlusExitTime);
-                       mode_lib->vba.XFCRemoteSurfaceFlipDelay = CalculateRemoteSurfaceFlipDelay(mode_lib,
-                               mode_lib->vba.VRatio[k],
-                               mode_lib->vba.SwathWidthY[k],
-                               dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
-                               mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
-                               mode_lib->vba.XFCTSlvVupdateOffset,
-                               mode_lib->vba.XFCTSlvVupdateWidth,
-                               mode_lib->vba.XFCTSlvVreadyOffset,
-                               mode_lib->vba.XFCXBUFLatencyTolerance,
-                               mode_lib->vba.XFCFillBWOverhead,
-                               mode_lib->vba.XFCSlvChunkSize,
-                               mode_lib->vba.XFCBusTransportTime,
-                               mode_lib->vba.TCalc,
-                               TWait,
-                               &mode_lib->vba.SrcActiveDrainRate,
-                               &mode_lib->vba.TInitXFill,
-                               &mode_lib->vba.TslvChk);
-                       mode_lib->vba.XFCRemoteSurfaceFlipLatency[k] = dml_floor(mode_lib->vba.XFCRemoteSurfaceFlipDelay / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]),
-                               1);
-                       mode_lib->vba.XFCTransferDelay[k] = dml_ceil(mode_lib->vba.XFCBusTransportTime / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]),
-                               1);
-                       mode_lib->vba.XFCPrechargeDelay[k] = dml_ceil((mode_lib->vba.XFCBusTransportTime + mode_lib->vba.TInitXFill + mode_lib->vba.TslvChk)
-                               / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]),
-                               1);
-                       mode_lib->vba.InitFillLevel = mode_lib->vba.XFCXBUFLatencyTolerance * mode_lib->vba.SrcActiveDrainRate;
-                       mode_lib->vba.FinalFillMargin = (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k]
-                               + mode_lib->vba.DestinationLinesToRequestRowInVBlank[k]) * mode_lib->vba.HTotal[k]
-                               / mode_lib->vba.PixelClock[k] * mode_lib->vba.SrcActiveDrainRate + mode_lib->vba.XFCFillConstant;
-                       mode_lib->vba.FinalFillLevel = mode_lib->vba.XFCRemoteSurfaceFlipDelay * mode_lib->vba.SrcActiveDrainRate
-                               + mode_lib->vba.FinalFillMargin;
-                       mode_lib->vba.RemainingFillLevel = dml_max(0.0,
-                               mode_lib->vba.FinalFillLevel - mode_lib->vba.InitFillLevel);
+                       TWait = CalculateTWait(
+                                       mode_lib->vba.PrefetchMode,
+                                       mode_lib->vba.DRAMClockChangeLatency,
+                                       mode_lib->vba.UrgentLatency,
+                                       mode_lib->vba.SREnterPlusExitTime);
+                       mode_lib->vba.XFCRemoteSurfaceFlipDelay = CalculateRemoteSurfaceFlipDelay(
+                                       mode_lib,
+                                       mode_lib->vba.VRatio[k],
+                                       mode_lib->vba.SwathWidthY[k],
+                                       dml_ceil(mode_lib->vba.BytePerPixelDETY[k], 1),
+                                       mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
+                                       mode_lib->vba.XFCTSlvVupdateOffset,
+                                       mode_lib->vba.XFCTSlvVupdateWidth,
+                                       mode_lib->vba.XFCTSlvVreadyOffset,
+                                       mode_lib->vba.XFCXBUFLatencyTolerance,
+                                       mode_lib->vba.XFCFillBWOverhead,
+                                       mode_lib->vba.XFCSlvChunkSize,
+                                       mode_lib->vba.XFCBusTransportTime,
+                                       mode_lib->vba.TCalc,
+                                       TWait,
+                                       &mode_lib->vba.SrcActiveDrainRate,
+                                       &mode_lib->vba.TInitXFill,
+                                       &mode_lib->vba.TslvChk);
+                       mode_lib->vba.XFCRemoteSurfaceFlipLatency[k] =
+                                       dml_floor(
+                                                       mode_lib->vba.XFCRemoteSurfaceFlipDelay
+                                                                       / (mode_lib->vba.HTotal[k]
+                                                                                       / mode_lib->vba.PixelClock[k]),
+                                                       1);
+                       mode_lib->vba.XFCTransferDelay[k] =
+                                       dml_ceil(
+                                                       mode_lib->vba.XFCBusTransportTime
+                                                                       / (mode_lib->vba.HTotal[k]
+                                                                                       / mode_lib->vba.PixelClock[k]),
+                                                       1);
+                       mode_lib->vba.XFCPrechargeDelay[k] =
+                                       dml_ceil(
+                                                       (mode_lib->vba.XFCBusTransportTime
+                                                                       + mode_lib->vba.TInitXFill
+                                                                       + mode_lib->vba.TslvChk)
+                                                                       / (mode_lib->vba.HTotal[k]
+                                                                                       / mode_lib->vba.PixelClock[k]),
+                                                       1);
+                       mode_lib->vba.InitFillLevel = mode_lib->vba.XFCXBUFLatencyTolerance
+                                       * mode_lib->vba.SrcActiveDrainRate;
+                       mode_lib->vba.FinalFillMargin =
+                                       (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k]
+                                                       + mode_lib->vba.DestinationLinesToRequestRowInVBlank[k])
+                                                       * mode_lib->vba.HTotal[k]
+                                                       / mode_lib->vba.PixelClock[k]
+                                                       * mode_lib->vba.SrcActiveDrainRate
+                                                       + mode_lib->vba.XFCFillConstant;
+                       mode_lib->vba.FinalFillLevel = mode_lib->vba.XFCRemoteSurfaceFlipDelay
+                                       * mode_lib->vba.SrcActiveDrainRate
+                                       + mode_lib->vba.FinalFillMargin;
+                       mode_lib->vba.RemainingFillLevel = dml_max(
+                                       0.0,
+                                       mode_lib->vba.FinalFillLevel - mode_lib->vba.InitFillLevel);
                        mode_lib->vba.TFinalxFill = mode_lib->vba.RemainingFillLevel
-                               / (mode_lib->vba.SrcActiveDrainRate * mode_lib->vba.XFCFillBWOverhead / 100);
-                       mode_lib->vba.XFCPrefetchMargin[k] = mode_lib->vba.XFCRemoteSurfaceFlipDelay + mode_lib->vba.TFinalxFill
-                               + (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k]
-                                       + mode_lib->vba.DestinationLinesToRequestRowInVBlank[k])
-                               * mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k];
+                                       / (mode_lib->vba.SrcActiveDrainRate
+                                                       * mode_lib->vba.XFCFillBWOverhead / 100);
+                       mode_lib->vba.XFCPrefetchMargin[k] =
+                                       mode_lib->vba.XFCRemoteSurfaceFlipDelay
+                                                       + mode_lib->vba.TFinalxFill
+                                                       + (mode_lib->vba.DestinationLinesToRequestVMInVBlank[k]
+                                                                       + mode_lib->vba.DestinationLinesToRequestRowInVBlank[k])
+                                                                       * mode_lib->vba.HTotal[k]
+                                                                       / mode_lib->vba.PixelClock[k];
                } else {
                        mode_lib->vba.XFCSlaveVUpdateOffset[k] = 0;
                        mode_lib->vba.XFCSlaveVupdateWidth[k] = 0;
@@ -2782,21 +3279,22 @@ static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib)
                        BytePerPixDETC = 8.0 / 3.0;
                }
 
-               if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64 || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
-                       || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
-                       || mode_lib->vba.SourcePixelFormat[k] == dm_444_8)) {
+               if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_8)) {
                        if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
                                Read256BytesBlockHeightY = 1;
                        } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_64) {
                                Read256BytesBlockHeightY = 4;
                        } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_32
-                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_16) {
+                                       || mode_lib->vba.SourcePixelFormat[k] == dm_444_16) {
                                Read256BytesBlockHeightY = 8;
                        } else {
                                Read256BytesBlockHeightY = 16;
                        }
                        Read256BytesBlockWidthY = 256 / dml_ceil(BytePerPixDETY, 1)
-                               / Read256BytesBlockHeightY;
+                                       / Read256BytesBlockHeightY;
                        Read256BytesBlockHeightC = 0;
                        Read256BytesBlockWidthC = 0;
                } else {
@@ -2811,9 +3309,9 @@ static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib)
                                Read256BytesBlockHeightC = 8;
                        }
                        Read256BytesBlockWidthY = 256 / dml_ceil(BytePerPixDETY, 1)
-                               / Read256BytesBlockHeightY;
+                                       / Read256BytesBlockHeightY;
                        Read256BytesBlockWidthC = 256 / dml_ceil(BytePerPixDETC, 2)
-                               / Read256BytesBlockHeightC;
+                                       / Read256BytesBlockHeightC;
                }
 
                if (mode_lib->vba.SourceScan[k] == dm_horz) {
@@ -2824,27 +3322,30 @@ static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib)
                        MaximumSwathHeightC = Read256BytesBlockWidthC;
                }
 
-               if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64 || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
-                       || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
-                       || mode_lib->vba.SourcePixelFormat[k] == dm_444_8)) {
+               if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_8)) {
                        if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear
-                               || (mode_lib->vba.SourcePixelFormat[k] == dm_444_64
-                                       && (mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_s
-                                               || mode_lib->vba.SurfaceTiling[k]
-                                               == dm_sw_4kb_s_x
-                                               || mode_lib->vba.SurfaceTiling[k]
-                                               == dm_sw_64kb_s
-                                               || mode_lib->vba.SurfaceTiling[k]
-                                               == dm_sw_64kb_s_t
-                                               || mode_lib->vba.SurfaceTiling[k]
-                                               == dm_sw_64kb_s_x
-                                               || mode_lib->vba.SurfaceTiling[k]
-                                               == dm_sw_var_s
-                                               || mode_lib->vba.SurfaceTiling[k]
-                                               == dm_sw_var_s_x)
-                                       && mode_lib->vba.SourceScan[k] == dm_horz)) {
+                                       || (mode_lib->vba.SourcePixelFormat[k] == dm_444_64
+                                                       && (mode_lib->vba.SurfaceTiling[k]
+                                                                       == dm_sw_4kb_s
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_4kb_s_x
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_64kb_s
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_64kb_s_t
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_64kb_s_x
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_var_s
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_var_s_x)
+                                                       && mode_lib->vba.SourceScan[k] == dm_horz)) {
                                MinimumSwathHeightY = MaximumSwathHeightY;
-                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_8 && mode_lib->vba.SourceScan[k] != dm_horz) {
+                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_8
+                                       && mode_lib->vba.SourceScan[k] != dm_horz) {
                                MinimumSwathHeightY = MaximumSwathHeightY;
                        } else {
                                MinimumSwathHeightY = MaximumSwathHeightY / 2.0;
@@ -2854,10 +3355,12 @@ static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib)
                        if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
                                MinimumSwathHeightY = MaximumSwathHeightY;
                                MinimumSwathHeightC = MaximumSwathHeightC;
-                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8 && mode_lib->vba.SourceScan[k] == dm_horz) {
+                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8
+                                       && mode_lib->vba.SourceScan[k] == dm_horz) {
                                MinimumSwathHeightY = MaximumSwathHeightY / 2.0;
                                MinimumSwathHeightC = MaximumSwathHeightC;
-                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10 && mode_lib->vba.SourceScan[k] == dm_horz) {
+                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10
+                                       && mode_lib->vba.SourceScan[k] == dm_horz) {
                                MinimumSwathHeightC = MaximumSwathHeightC / 2.0;
                                MinimumSwathHeightY = MaximumSwathHeightY;
                        } else {
@@ -2876,40 +3379,46 @@ static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib)
                        MainPlaneDoesODMCombine = true;
                }
                for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j) {
-                       if (mode_lib->vba.BlendingAndTiming[k] == j && mode_lib->vba.ODMCombineEnabled[j] == true) {
+                       if (mode_lib->vba.BlendingAndTiming[k] == j
+                                       && mode_lib->vba.ODMCombineEnabled[j] == true) {
                                MainPlaneDoesODMCombine = true;
                        }
                }
 
                if (MainPlaneDoesODMCombine == true) {
-                       SwathWidth = dml_min(SwathWidth, mode_lib->vba.HActive[k] / 2.0 * mode_lib->vba.HRatio[k]);
+                       SwathWidth = dml_min(
+                                       SwathWidth,
+                                       mode_lib->vba.HActive[k] / 2.0 * mode_lib->vba.HRatio[k]);
                } else {
                        SwathWidth = SwathWidth / mode_lib->vba.DPPPerPlane[k];
                }
 
                SwathWidthGranularityY = 256 / dml_ceil(BytePerPixDETY, 1) / MaximumSwathHeightY;
-               RoundedUpMaxSwathSizeBytesY = (dml_ceil((double)(SwathWidth - 1),
-                       SwathWidthGranularityY) + SwathWidthGranularityY) * BytePerPixDETY
-                       * MaximumSwathHeightY;
+               RoundedUpMaxSwathSizeBytesY = (dml_ceil(
+                               (double) (SwathWidth - 1),
+                               SwathWidthGranularityY) + SwathWidthGranularityY) * BytePerPixDETY
+                               * MaximumSwathHeightY;
                if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
                        RoundedUpMaxSwathSizeBytesY = dml_ceil(RoundedUpMaxSwathSizeBytesY, 256)
-                               + 256;
+                                       + 256;
                }
                if (MaximumSwathHeightC > 0) {
                        SwathWidthGranularityC = 256.0 / dml_ceil(BytePerPixDETC, 2)
-                               / MaximumSwathHeightC;
-                       RoundedUpMaxSwathSizeBytesC = (dml_ceil((double)(SwathWidth / 2.0 - 1),
-                               SwathWidthGranularityC) + SwathWidthGranularityC)
-                               * BytePerPixDETC * MaximumSwathHeightC;
+                                       / MaximumSwathHeightC;
+                       RoundedUpMaxSwathSizeBytesC = (dml_ceil(
+                                       (double) (SwathWidth / 2.0 - 1),
+                                       SwathWidthGranularityC) + SwathWidthGranularityC)
+                                       * BytePerPixDETC * MaximumSwathHeightC;
                        if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
-                               RoundedUpMaxSwathSizeBytesC = dml_ceil(RoundedUpMaxSwathSizeBytesC,
-                                       256) + 256;
+                               RoundedUpMaxSwathSizeBytesC = dml_ceil(
+                                               RoundedUpMaxSwathSizeBytesC,
+                                               256) + 256;
                        }
                } else
                        RoundedUpMaxSwathSizeBytesC = 0.0;
 
                if (RoundedUpMaxSwathSizeBytesY + RoundedUpMaxSwathSizeBytesC
-                       <= mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0) {
+                               <= mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0) {
                        mode_lib->vba.SwathHeightY[k] = MaximumSwathHeightY;
                        mode_lib->vba.SwathHeightC[k] = MaximumSwathHeightC;
                } else {
@@ -2921,27 +3430,32 @@ static void DisplayPipeConfiguration(struct display_mode_lib *mode_lib)
                        mode_lib->vba.DETBufferSizeY[k] = mode_lib->vba.DETBufferSizeInKByte * 1024;
                        mode_lib->vba.DETBufferSizeC[k] = 0;
                } else if (mode_lib->vba.SwathHeightY[k] <= mode_lib->vba.SwathHeightC[k]) {
-                       mode_lib->vba.DETBufferSizeY[k] = mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2;
-                       mode_lib->vba.DETBufferSizeC[k] = mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2;
+                       mode_lib->vba.DETBufferSizeY[k] = mode_lib->vba.DETBufferSizeInKByte
+                                       * 1024.0 / 2;
+                       mode_lib->vba.DETBufferSizeC[k] = mode_lib->vba.DETBufferSizeInKByte
+                                       * 1024.0 / 2;
                } else {
-                       mode_lib->vba.DETBufferSizeY[k] = mode_lib->vba.DETBufferSizeInKByte * 1024.0 * 2 / 3;
-                       mode_lib->vba.DETBufferSizeC[k] = mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 3;
+                       mode_lib->vba.DETBufferSizeY[k] = mode_lib->vba.DETBufferSizeInKByte
+                                       * 1024.0 * 2 / 3;
+                       mode_lib->vba.DETBufferSizeC[k] = mode_lib->vba.DETBufferSizeInKByte
+                                       * 1024.0 / 3;
                }
        }
 }
 
-bool Calculate256BBlockSizes(enum source_format_class SourcePixelFormat,
-       enum dm_swizzle_mode SurfaceTiling,
-       unsigned int BytePerPixelY,
-       unsigned int BytePerPixelC,
-       unsigned int *BlockHeight256BytesY,
-       unsigned int *BlockHeight256BytesC,
-       unsigned int *BlockWidth256BytesY,
-       unsigned int *BlockWidth256BytesC)
+bool Calculate256BBlockSizes(
+               enum source_format_class SourcePixelFormat,
+               enum dm_swizzle_mode SurfaceTiling,
+               unsigned int BytePerPixelY,
+               unsigned int BytePerPixelC,
+               unsigned int *BlockHeight256BytesY,
+               unsigned int *BlockHeight256BytesC,
+               unsigned int *BlockWidth256BytesY,
+               unsigned int *BlockWidth256BytesC)
 {
        if ((SourcePixelFormat == dm_444_64 || SourcePixelFormat == dm_444_32
-               || SourcePixelFormat == dm_444_16 || SourcePixelFormat == dm_444_16
-               || SourcePixelFormat == dm_444_8)) {
+                       || SourcePixelFormat == dm_444_16 || SourcePixelFormat == dm_444_16
+                       || SourcePixelFormat == dm_444_8)) {
                if (SurfaceTiling == dm_sw_linear) {
                        *BlockHeight256BytesY = 1;
                } else if (SourcePixelFormat == dm_444_64) {
@@ -2971,14 +3485,16 @@ bool Calculate256BBlockSizes(enum source_format_class SourcePixelFormat,
        return true;
 }
 
-static double CalculateTWait(unsigned int PrefetchMode,
-       double DRAMClockChangeLatency,
-       double UrgentLatency,
-       double SREnterPlusExitTime)
+static double CalculateTWait(
+               unsigned int PrefetchMode,
+               double DRAMClockChangeLatency,
+               double UrgentLatency,
+               double SREnterPlusExitTime)
 {
        if (PrefetchMode == 0) {
-               return dml_max(DRAMClockChangeLatency + UrgentLatency,
-                       dml_max(SREnterPlusExitTime, UrgentLatency));
+               return dml_max(
+                               DRAMClockChangeLatency + UrgentLatency,
+                               dml_max(SREnterPlusExitTime, UrgentLatency));
        } else if (PrefetchMode == 1) {
                return dml_max(SREnterPlusExitTime, UrgentLatency);
        } else {
@@ -2986,23 +3502,24 @@ static double CalculateTWait(unsigned int PrefetchMode,
        }
 }
 
-static double CalculateRemoteSurfaceFlipDelay(struct display_mode_lib *mode_lib,
-       double VRatio,
-       double SwathWidth,
-       double Bpp,
-       double LineTime,
-       double XFCTSlvVupdateOffset,
-       double XFCTSlvVupdateWidth,
-       double XFCTSlvVreadyOffset,
-       double XFCXBUFLatencyTolerance,
-       double XFCFillBWOverhead,
-       double XFCSlvChunkSize,
-       double XFCBusTransportTime,
-       double TCalc,
-       double TWait,
-       double *SrcActiveDrainRate,
-       double *TInitXFill,
-       double *TslvChk)
+static double CalculateRemoteSurfaceFlipDelay(
+               struct display_mode_lib *mode_lib,
+               double VRatio,
+               double SwathWidth,
+               double Bpp,
+               double LineTime,
+               double XFCTSlvVupdateOffset,
+               double XFCTSlvVupdateWidth,
+               double XFCTSlvVreadyOffset,
+               double XFCXBUFLatencyTolerance,
+               double XFCFillBWOverhead,
+               double XFCSlvChunkSize,
+               double XFCBusTransportTime,
+               double TCalc,
+               double TWait,
+               double *SrcActiveDrainRate,
+               double *TInitXFill,
+               double *TslvChk)
 {
        double TSlvSetup, AvgfillRate, result;
 
@@ -3011,8 +3528,9 @@ static double CalculateRemoteSurfaceFlipDelay(struct display_mode_lib *mode_lib,
        *TInitXFill = XFCXBUFLatencyTolerance / (1 + XFCFillBWOverhead / 100);
        AvgfillRate = *SrcActiveDrainRate * (1 + XFCFillBWOverhead / 100);
        *TslvChk = XFCSlvChunkSize / AvgfillRate;
-       dml_print("DML::CalculateRemoteSurfaceFlipDelay: SrcActiveDrainRate: %f\n",
-               *SrcActiveDrainRate);
+       dml_print(
+                       "DML::CalculateRemoteSurfaceFlipDelay: SrcActiveDrainRate: %f\n",
+                       *SrcActiveDrainRate);
        dml_print("DML::CalculateRemoteSurfaceFlipDelay: TSlvSetup: %f\n", TSlvSetup);
        dml_print("DML::CalculateRemoteSurfaceFlipDelay: TInitXFill: %f\n", *TInitXFill);
        dml_print("DML::CalculateRemoteSurfaceFlipDelay: AvgfillRate: %f\n", AvgfillRate);
@@ -3022,99 +3540,192 @@ static double CalculateRemoteSurfaceFlipDelay(struct display_mode_lib *mode_lib,
        return result;
 }
 
-static double CalculateWriteBackDISPCLK(enum source_format_class WritebackPixelFormat,
-       double PixelClock,
-       double WritebackHRatio,
-       double WritebackVRatio,
-       unsigned int WritebackLumaHTaps,
-       unsigned int WritebackLumaVTaps,
-       unsigned int WritebackChromaHTaps,
-       unsigned int WritebackChromaVTaps,
-       double WritebackDestinationWidth,
-       unsigned int HTotal,
-       unsigned int WritebackChromaLineBufferWidth)
+static double CalculateWriteBackDISPCLK(
+               enum source_format_class WritebackPixelFormat,
+               double PixelClock,
+               double WritebackHRatio,
+               double WritebackVRatio,
+               unsigned int WritebackLumaHTaps,
+               unsigned int WritebackLumaVTaps,
+               unsigned int WritebackChromaHTaps,
+               unsigned int WritebackChromaVTaps,
+               double WritebackDestinationWidth,
+               unsigned int HTotal,
+               unsigned int WritebackChromaLineBufferWidth)
 {
-       double CalculateWriteBackDISPCLK = 1.01 * PixelClock
-               * dml_max(
-                       dml_ceil(WritebackLumaHTaps / 4.0, 1) / WritebackHRatio,
-                       dml_max(
-                               (WritebackLumaVTaps * dml_ceil(1.0 / WritebackVRatio, 1)
-                                       * dml_ceil(WritebackDestinationWidth / 4.0, 1)
-                                       + dml_ceil(WritebackDestinationWidth / 4.0, 1)) / (double)HTotal
-                               + dml_ceil(1.0 / WritebackVRatio, 1) * (dml_ceil(WritebackLumaVTaps / 4.0, 1) + 4.0)
-                               / (double)HTotal,
-                               dml_ceil(1.0 / WritebackVRatio, 1) * WritebackDestinationWidth / (double)HTotal));
-       if (WritebackPixelFormat != dm_444_32) {
-               CalculateWriteBackDISPCLK = dml_max(
-                       CalculateWriteBackDISPCLK,
+       double CalculateWriteBackDISPCLK =
                        1.01 * PixelClock
-                       * dml_max(
-                               dml_ceil(WritebackChromaHTaps / 2.0, 1) / (2 * WritebackHRatio),
+                                       * dml_max(
+                                                       dml_ceil(WritebackLumaHTaps / 4.0, 1)
+                                                                       / WritebackHRatio,
+                                                       dml_max(
+                                                                       (WritebackLumaVTaps
+                                                                                       * dml_ceil(
+                                                                                                       1.0
+                                                                                                                       / WritebackVRatio,
+                                                                                                       1)
+                                                                                       * dml_ceil(
+                                                                                                       WritebackDestinationWidth
+                                                                                                                       / 4.0,
+                                                                                                       1)
+                                                                                       + dml_ceil(
+                                                                                                       WritebackDestinationWidth
+                                                                                                                       / 4.0,
+                                                                                                       1))
+                                                                                       / (double) HTotal
+                                                                                       + dml_ceil(
+                                                                                                       1.0
+                                                                                                                       / WritebackVRatio,
+                                                                                                       1)
+                                                                                                       * (dml_ceil(
+                                                                                                                       WritebackLumaVTaps
+                                                                                                                                       / 4.0,
+                                                                                                                       1)
+                                                                                                                       + 4.0)
+                                                                                                       / (double) HTotal,
+                                                                       dml_ceil(
+                                                                                       1.0
+                                                                                                       / WritebackVRatio,
+                                                                                       1)
+                                                                                       * WritebackDestinationWidth
+                                                                                       / (double) HTotal));
+       if (WritebackPixelFormat != dm_444_32) {
+               CalculateWriteBackDISPCLK =
                                dml_max(
-                                       (WritebackChromaVTaps * dml_ceil(1 / (2 * WritebackVRatio), 1)
-                                               * dml_ceil(WritebackDestinationWidth / 2.0 / 2.0, 1)
-                                               + dml_ceil(WritebackDestinationWidth / 2.0 / WritebackChromaLineBufferWidth, 1))
-                                       / HTotal
-                                       + dml_ceil(1 / (2 * WritebackVRatio), 1)
-                                       * (dml_ceil(WritebackChromaVTaps / 4.0, 1) + 4) / HTotal,
-                                       dml_ceil(1.0 / (2 * WritebackVRatio), 1) * WritebackDestinationWidth / 2.0
-                                       / HTotal)));
+                                               CalculateWriteBackDISPCLK,
+                                               1.01 * PixelClock
+                                                               * dml_max(
+                                                                               dml_ceil(
+                                                                                               WritebackChromaHTaps
+                                                                                                               / 2.0,
+                                                                                               1)
+                                                                                               / (2
+                                                                                                               * WritebackHRatio),
+                                                                               dml_max(
+                                                                                               (WritebackChromaVTaps
+                                                                                                               * dml_ceil(
+                                                                                                                               1
+                                                                                                                                               / (2
+                                                                                                                                                               * WritebackVRatio),
+                                                                                                                               1)
+                                                                                                               * dml_ceil(
+                                                                                                                               WritebackDestinationWidth
+                                                                                                                                               / 2.0
+                                                                                                                                               / 2.0,
+                                                                                                                               1)
+                                                                                                               + dml_ceil(
+                                                                                                                               WritebackDestinationWidth
+                                                                                                                                               / 2.0
+                                                                                                                                               / WritebackChromaLineBufferWidth,
+                                                                                                                               1))
+                                                                                                               / HTotal
+                                                                                                               + dml_ceil(
+                                                                                                                               1
+                                                                                                                                               / (2
+                                                                                                                                                               * WritebackVRatio),
+                                                                                                                               1)
+                                                                                                                               * (dml_ceil(
+                                                                                                                                               WritebackChromaVTaps
+                                                                                                                                                               / 4.0,
+                                                                                                                                               1)
+                                                                                                                                               + 4)
+                                                                                                                               / HTotal,
+                                                                                               dml_ceil(
+                                                                                                               1.0
+                                                                                                                               / (2
+                                                                                                                                               * WritebackVRatio),
+                                                                                                               1)
+                                                                                                               * WritebackDestinationWidth
+                                                                                                               / 2.0
+                                                                                                               / HTotal)));
        }
        return CalculateWriteBackDISPCLK;
 }
 
 static double CalculateWriteBackDelay(
-enum source_format_class WritebackPixelFormat,
-       double WritebackHRatio,
-       double WritebackVRatio,
-       unsigned int WritebackLumaHTaps,
-       unsigned int WritebackLumaVTaps,
-       unsigned int WritebackChromaHTaps,
-       unsigned int WritebackChromaVTaps,
-       unsigned int WritebackDestinationWidth)
+               enum source_format_class WritebackPixelFormat,
+               double WritebackHRatio,
+               double WritebackVRatio,
+               unsigned int WritebackLumaHTaps,
+               unsigned int WritebackLumaVTaps,
+               unsigned int WritebackChromaHTaps,
+               unsigned int WritebackChromaVTaps,
+               unsigned int WritebackDestinationWidth)
 {
-       double CalculateWriteBackDelay = dml_max(
-               dml_ceil(WritebackLumaHTaps / 4.0, 1) / WritebackHRatio,
-               WritebackLumaVTaps * dml_ceil(1.0 / WritebackVRatio, 1)
-               * dml_ceil(WritebackDestinationWidth / 4.0, 1)
-               + dml_ceil(1.0 / WritebackVRatio, 1) * (dml_ceil(WritebackLumaVTaps / 4.0, 1) + 4));
+       double CalculateWriteBackDelay =
+                       dml_max(
+                                       dml_ceil(WritebackLumaHTaps / 4.0, 1) / WritebackHRatio,
+                                       WritebackLumaVTaps * dml_ceil(1.0 / WritebackVRatio, 1)
+                                                       * dml_ceil(
+                                                                       WritebackDestinationWidth
+                                                                                       / 4.0,
+                                                                       1)
+                                                       + dml_ceil(1.0 / WritebackVRatio, 1)
+                                                                       * (dml_ceil(
+                                                                                       WritebackLumaVTaps
+                                                                                                       / 4.0,
+                                                                                       1) + 4));
 
        if (WritebackPixelFormat != dm_444_32) {
-               CalculateWriteBackDelay = dml_max(
-                       CalculateWriteBackDelay,
-                       dml_max(
-                               dml_ceil(WritebackChromaHTaps / 2.0, 1) / (2 * WritebackHRatio),
-                               WritebackChromaVTaps * dml_ceil(1 / (2 * WritebackVRatio), 1)
-                               * dml_ceil(WritebackDestinationWidth / 2.0 / 2.0, 1)
-                               + dml_ceil(1 / (2 * WritebackVRatio), 1)
-                               * (dml_ceil(WritebackChromaVTaps / 4.0, 1) + 4)));
+               CalculateWriteBackDelay =
+                               dml_max(
+                                               CalculateWriteBackDelay,
+                                               dml_max(
+                                                               dml_ceil(
+                                                                               WritebackChromaHTaps
+                                                                                               / 2.0,
+                                                                               1)
+                                                                               / (2
+                                                                                               * WritebackHRatio),
+                                                               WritebackChromaVTaps
+                                                                               * dml_ceil(
+                                                                                               1
+                                                                                                               / (2
+                                                                                                                               * WritebackVRatio),
+                                                                                               1)
+                                                                               * dml_ceil(
+                                                                                               WritebackDestinationWidth
+                                                                                                               / 2.0
+                                                                                                               / 2.0,
+                                                                                               1)
+                                                                               + dml_ceil(
+                                                                                               1
+                                                                                                               / (2
+                                                                                                                               * WritebackVRatio),
+                                                                                               1)
+                                                                                               * (dml_ceil(
+                                                                                                               WritebackChromaVTaps
+                                                                                                                               / 4.0,
+                                                                                                               1)
+                                                                                                               + 4)));
        }
        return CalculateWriteBackDelay;
 }
 
-static void CalculateActiveRowBandwidth(bool VirtualMemoryEnable,
-       enum source_format_class SourcePixelFormat,
-       double VRatio,
-       bool DCCEnable,
-       double LineTime,
-       unsigned int MetaRowByteLuma,
-       unsigned int MetaRowByteChroma,
-       unsigned int meta_row_height_luma,
-       unsigned int meta_row_height_chroma,
-       unsigned int PixelPTEBytesPerRowLuma,
-       unsigned int PixelPTEBytesPerRowChroma,
-       unsigned int dpte_row_height_luma,
-       unsigned int dpte_row_height_chroma,
-       double *meta_row_bw,
-       double *dpte_row_bw,
-       double *qual_row_bw)
+static void CalculateActiveRowBandwidth(
+               bool VirtualMemoryEnable,
+               enum source_format_class SourcePixelFormat,
+               double VRatio,
+               bool DCCEnable,
+               double LineTime,
+               unsigned int MetaRowByteLuma,
+               unsigned int MetaRowByteChroma,
+               unsigned int meta_row_height_luma,
+               unsigned int meta_row_height_chroma,
+               unsigned int PixelPTEBytesPerRowLuma,
+               unsigned int PixelPTEBytesPerRowChroma,
+               unsigned int dpte_row_height_luma,
+               unsigned int dpte_row_height_chroma,
+               double *meta_row_bw,
+               double *dpte_row_bw,
+               double *qual_row_bw)
 {
        if (DCCEnable != true) {
                *meta_row_bw = 0;
        } else if (SourcePixelFormat == dm_420_8 || SourcePixelFormat == dm_420_10) {
                *meta_row_bw = VRatio * MetaRowByteLuma / (meta_row_height_luma * LineTime)
-                       + VRatio / 2 * MetaRowByteChroma
-                       / (meta_row_height_chroma * LineTime);
+                               + VRatio / 2 * MetaRowByteChroma
+                                               / (meta_row_height_chroma * LineTime);
        } else {
                *meta_row_bw = VRatio * MetaRowByteLuma / (meta_row_height_luma * LineTime);
        }
@@ -3123,8 +3734,8 @@ static void CalculateActiveRowBandwidth(bool VirtualMemoryEnable,
                *dpte_row_bw = 0;
        } else if (SourcePixelFormat == dm_420_8 || SourcePixelFormat == dm_420_10) {
                *dpte_row_bw = VRatio * PixelPTEBytesPerRowLuma / (dpte_row_height_luma * LineTime)
-                       + VRatio / 2 * PixelPTEBytesPerRowChroma
-                       / (dpte_row_height_chroma * LineTime);
+                               + VRatio / 2 * PixelPTEBytesPerRowChroma
+                                               / (dpte_row_height_chroma * LineTime);
        } else {
                *dpte_row_bw = VRatio * PixelPTEBytesPerRowLuma / (dpte_row_height_luma * LineTime);
        }
@@ -3136,29 +3747,30 @@ static void CalculateActiveRowBandwidth(bool VirtualMemoryEnable,
        }
 }
 
-static void CalculateFlipSchedule(struct display_mode_lib *mode_lib,
-       double UrgentExtraLatency,
-       double UrgentLatency,
-       unsigned int MaxPageTableLevels,
-       bool VirtualMemoryEnable,
-       double BandwidthAvailableForImmediateFlip,
-       unsigned int TotImmediateFlipBytes,
-       enum source_format_class SourcePixelFormat,
-       unsigned int ImmediateFlipBytes,
-       double LineTime,
-       double Tno_bw,
-       double VRatio,
-       double PDEAndMetaPTEBytesFrame,
-       unsigned int MetaRowByte,
-       unsigned int PixelPTEBytesPerRow,
-       bool DCCEnable,
-       unsigned int dpte_row_height,
-       unsigned int meta_row_height,
-       double qual_row_bw,
-       double *DestinationLinesToRequestVMInImmediateFlip,
-       double *DestinationLinesToRequestRowInImmediateFlip,
-       double *final_flip_bw,
-       bool *ImmediateFlipSupportedForPipe)
+static void CalculateFlipSchedule(
+               struct display_mode_lib *mode_lib,
+               double UrgentExtraLatency,
+               double UrgentLatency,
+               unsigned int MaxPageTableLevels,
+               bool VirtualMemoryEnable,
+               double BandwidthAvailableForImmediateFlip,
+               unsigned int TotImmediateFlipBytes,
+               enum source_format_class SourcePixelFormat,
+               unsigned int ImmediateFlipBytes,
+               double LineTime,
+               double Tno_bw,
+               double VRatio,
+               double PDEAndMetaPTEBytesFrame,
+               unsigned int MetaRowByte,
+               unsigned int PixelPTEBytesPerRow,
+               bool DCCEnable,
+               unsigned int dpte_row_height,
+               unsigned int meta_row_height,
+               double qual_row_bw,
+               double *DestinationLinesToRequestVMInImmediateFlip,
+               double *DestinationLinesToRequestRowInImmediateFlip,
+               double *final_flip_bw,
+               bool *ImmediateFlipSupportedForPipe)
 {
        double min_row_time = 0.0;
 
@@ -3172,47 +3784,54 @@ static void CalculateFlipSchedule(struct display_mode_lib *mode_lib,
                double TimeForFetchingRowInVBlankImmediateFlip;
 
                if (VirtualMemoryEnable == true) {
-                       mode_lib->vba.ImmediateFlipBW = BandwidthAvailableForImmediateFlip * ImmediateFlipBytes
-                               / TotImmediateFlipBytes;
+                       mode_lib->vba.ImmediateFlipBW = BandwidthAvailableForImmediateFlip
+                                       * ImmediateFlipBytes / TotImmediateFlipBytes;
                        TimeForFetchingMetaPTEImmediateFlip =
-                               dml_max(Tno_bw
-                                       + PDEAndMetaPTEBytesFrame
-                                       / mode_lib->vba.ImmediateFlipBW,
-                                       dml_max(UrgentExtraLatency
-                                               + UrgentLatency
-                                               * (MaxPageTableLevels
-                                                       - 1),
-                                               LineTime / 4.0));
+                                       dml_max(
+                                                       Tno_bw
+                                                                       + PDEAndMetaPTEBytesFrame
+                                                                                       / mode_lib->vba.ImmediateFlipBW,
+                                                       dml_max(
+                                                                       UrgentExtraLatency
+                                                                                       + UrgentLatency
+                                                                                                       * (MaxPageTableLevels
+                                                                                                                       - 1),
+                                                                       LineTime / 4.0));
                } else {
                        TimeForFetchingMetaPTEImmediateFlip = 0;
                }
 
-               *DestinationLinesToRequestVMInImmediateFlip = dml_floor(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime + 0.125),
-                       1) / 4.0;
+               *DestinationLinesToRequestVMInImmediateFlip = dml_floor(
+                               4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime + 0.125),
+                               1) / 4.0;
 
                if ((VirtualMemoryEnable == true || DCCEnable == true)) {
-                       mode_lib->vba.ImmediateFlipBW = BandwidthAvailableForImmediateFlip * ImmediateFlipBytes
-                               / TotImmediateFlipBytes;
-                       TimeForFetchingRowInVBlankImmediateFlip = dml_max((MetaRowByte + PixelPTEBytesPerRow) / mode_lib->vba.ImmediateFlipBW,
-                               dml_max(UrgentLatency, LineTime / 4.0));
+                       mode_lib->vba.ImmediateFlipBW = BandwidthAvailableForImmediateFlip
+                                       * ImmediateFlipBytes / TotImmediateFlipBytes;
+                       TimeForFetchingRowInVBlankImmediateFlip = dml_max(
+                                       (MetaRowByte + PixelPTEBytesPerRow)
+                                                       / mode_lib->vba.ImmediateFlipBW,
+                                       dml_max(UrgentLatency, LineTime / 4.0));
                } else {
                        TimeForFetchingRowInVBlankImmediateFlip = 0;
                }
 
-               *DestinationLinesToRequestRowInImmediateFlip = dml_floor(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime + 0.125),
-                       1) / 4.0;
+               *DestinationLinesToRequestRowInImmediateFlip = dml_floor(
+                               4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime + 0.125),
+                               1) / 4.0;
 
                if (VirtualMemoryEnable == true) {
                        *final_flip_bw =
-                               dml_max(PDEAndMetaPTEBytesFrame
-                                       / (*DestinationLinesToRequestVMInImmediateFlip
-                                               * LineTime),
-                                       (MetaRowByte + PixelPTEBytesPerRow)
-                                       / (TimeForFetchingRowInVBlankImmediateFlip
-                                               * LineTime));
+                                       dml_max(
+                                                       PDEAndMetaPTEBytesFrame
+                                                                       / (*DestinationLinesToRequestVMInImmediateFlip
+                                                                                       * LineTime),
+                                                       (MetaRowByte + PixelPTEBytesPerRow)
+                                                                       / (TimeForFetchingRowInVBlankImmediateFlip
+                                                                                       * LineTime));
                } else if (MetaRowByte + PixelPTEBytesPerRow > 0) {
                        *final_flip_bw = (MetaRowByte + PixelPTEBytesPerRow)
-                               / (TimeForFetchingRowInVBlankImmediateFlip * LineTime);
+                                       / (TimeForFetchingRowInVBlankImmediateFlip * LineTime);
                } else {
                        *final_flip_bw = 0;
                }
@@ -3223,12 +3842,13 @@ static void CalculateFlipSchedule(struct display_mode_lib *mode_lib,
                        min_row_time = meta_row_height * LineTime / VRatio;
                else
                        min_row_time = dml_min(dpte_row_height, meta_row_height) * LineTime
-                       / VRatio;
+                                       / VRatio;
 
                if (*DestinationLinesToRequestVMInImmediateFlip >= 8
                                || *DestinationLinesToRequestRowInImmediateFlip >= 16
                                || TimeForFetchingMetaPTEImmediateFlip
-                                       + 2 * TimeForFetchingRowInVBlankImmediateFlip > min_row_time)
+                                               + 2 * TimeForFetchingRowInVBlankImmediateFlip
+                                               > min_row_time)
                        *ImmediateFlipSupportedForPipe = false;
                else
                        *ImmediateFlipSupportedForPipe = true;
@@ -3242,7 +3862,8 @@ static void PixelClockAdjustmentForProgressiveToInterlaceUnit(struct display_mod
        //Progressive To dml_ml->vba.Interlace Unit Effect
        for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
                mode_lib->vba.PixelClockBackEnd[k] = mode_lib->vba.PixelClock[k];
-               if (mode_lib->vba.Interlace[k] == 1 && mode_lib->vba.ProgressiveToInterlaceUnitInOPP == true) {
+               if (mode_lib->vba.Interlace[k] == 1
+                               && mode_lib->vba.ProgressiveToInterlaceUnitInOPP == true) {
                        mode_lib->vba.PixelClock[k] = 2 * mode_lib->vba.PixelClock[k];
                }
        }
@@ -3261,3 +3882,2211 @@ static unsigned int CursorBppEnumToBits(enum cursor_bpp ebpp)
                return 0;
        }
 }
+
+static unsigned int TruncToValidBPP(
+               double DecimalBPP,
+               bool DSCEnabled,
+               enum output_encoder_class Output,
+               enum output_format_class Format,
+               unsigned int DSCInputBitPerComponent)
+{
+       if (Output == dm_hdmi) {
+               if (Format == dm_420) {
+                       if (DecimalBPP >= 18)
+                               return 18;
+                       else if (DecimalBPP >= 15)
+                               return 15;
+                       else if (DecimalBPP >= 12)
+                               return 12;
+                       else
+                               return 0;
+               } else if (Format == dm_444) {
+                       if (DecimalBPP >= 36)
+                               return 36;
+                       else if (DecimalBPP >= 30)
+                               return 30;
+                       else if (DecimalBPP >= 24)
+                               return 24;
+                       else
+                               return 0;
+               } else {
+                       if (DecimalBPP / 1.5 >= 24)
+                               return 24;
+                       else if (DecimalBPP / 1.5 >= 20)
+                               return 20;
+                       else if (DecimalBPP / 1.5 >= 16)
+                               return 16;
+                       else
+                               return 0;
+               }
+       } else {
+               if (DSCEnabled) {
+                       if (Format == dm_420) {
+                               if (DecimalBPP < 6)
+                                       return 0;
+                               else if (DecimalBPP >= 1.5 * DSCInputBitPerComponent - 1 / 16)
+                                       return 1.5 * DSCInputBitPerComponent - 1 / 16;
+                               else
+                                       return dml_floor(16 * DecimalBPP, 1) / 16;
+                       } else if (Format == dm_n422) {
+                               if (DecimalBPP < 7)
+                                       return 0;
+                               else if (DecimalBPP >= 2 * DSCInputBitPerComponent - 1 / 16)
+                                       return 2 * DSCInputBitPerComponent - 1 / 16;
+                               else
+                                       return dml_floor(16 * DecimalBPP, 1) / 16;
+                       } else {
+                               if (DecimalBPP < 8)
+                                       return 0;
+                               else if (DecimalBPP >= 3 * DSCInputBitPerComponent - 1 / 16)
+                                       return 3 * DSCInputBitPerComponent - 1 / 16;
+                               else
+                                       return dml_floor(16 * DecimalBPP, 1) / 16;
+                       }
+               } else if (Format == dm_420) {
+                       if (DecimalBPP >= 18)
+                               return 18;
+                       else if (DecimalBPP >= 15)
+                               return 15;
+                       else if (DecimalBPP >= 12)
+                               return 12;
+                       else
+                               return 0;
+               } else if (Format == dm_s422 || Format == dm_n422) {
+                       if (DecimalBPP >= 24)
+                               return 24;
+                       else if (DecimalBPP >= 20)
+                               return 20;
+                       else if (DecimalBPP >= 16)
+                               return 16;
+                       else
+                               return 0;
+               } else {
+                       if (DecimalBPP >= 36)
+                               return 36;
+                       else if (DecimalBPP >= 30)
+                               return 30;
+                       else if (DecimalBPP >= 24)
+                               return 24;
+                       else
+                               return 0;
+               }
+       }
+}
+
+static void ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
+{
+       int i;
+       unsigned int j, k;
+       /*MODE SUPPORT, VOLTAGE STATE AND SOC CONFIGURATION*/
+
+       /*Scale Ratio, taps Support Check*/
+
+       mode_lib->vba.ScaleRatioAndTapsSupport = true;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.ScalerEnabled[k] == false
+                               && ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8)
+                                               || mode_lib->vba.HRatio[k] != 1.0
+                                               || mode_lib->vba.htaps[k] != 1.0
+                                               || mode_lib->vba.VRatio[k] != 1.0
+                                               || mode_lib->vba.vtaps[k] != 1.0)) {
+                       mode_lib->vba.ScaleRatioAndTapsSupport = false;
+               } else if (mode_lib->vba.vtaps[k] < 1.0 || mode_lib->vba.vtaps[k] > 8.0
+                               || mode_lib->vba.htaps[k] < 1.0 || mode_lib->vba.htaps[k] > 8.0
+                               || (mode_lib->vba.htaps[k] > 1.0
+                                               && (mode_lib->vba.htaps[k] % 2) == 1)
+                               || mode_lib->vba.HRatio[k] > mode_lib->vba.MaxHSCLRatio
+                               || mode_lib->vba.VRatio[k] > mode_lib->vba.MaxVSCLRatio
+                               || mode_lib->vba.HRatio[k] > mode_lib->vba.htaps[k]
+                               || mode_lib->vba.VRatio[k] > mode_lib->vba.vtaps[k]
+                               || (mode_lib->vba.SourcePixelFormat[k] != dm_444_64
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8
+                                               && (mode_lib->vba.HRatio[k] / 2.0
+                                                               > mode_lib->vba.HTAPsChroma[k]
+                                                               || mode_lib->vba.VRatio[k] / 2.0
+                                                                               > mode_lib->vba.VTAPsChroma[k]))) {
+                       mode_lib->vba.ScaleRatioAndTapsSupport = false;
+               }
+       }
+       /*Source Format, Pixel Format and Scan Support Check*/
+
+       mode_lib->vba.SourceFormatPixelAndScanSupport = true;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if ((mode_lib->vba.SurfaceTiling[k] == dm_sw_linear
+                               && mode_lib->vba.SourceScan[k] != dm_horz)
+                               || ((mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_d
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_d_x
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d_t
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d_x
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_var_d
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_var_d_x)
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_64)
+                               || (mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_r_x
+                                               && (mode_lib->vba.SourcePixelFormat[k] == dm_mono_8
+                                                               || mode_lib->vba.SourcePixelFormat[k]
+                                                                               == dm_420_8
+                                                               || mode_lib->vba.SourcePixelFormat[k]
+                                                                               == dm_420_10))
+                               || (((mode_lib->vba.SurfaceTiling[k]
+                                               == dm_sw_gfx7_2d_thin_gl
+                                               || mode_lib->vba.SurfaceTiling[k]
+                                                               == dm_sw_gfx7_2d_thin_lvp)
+                                               && !((mode_lib->vba.SourcePixelFormat[k]
+                                                               == dm_444_64
+                                                               || mode_lib->vba.SourcePixelFormat[k]
+                                                                               == dm_444_32)
+                                                               && mode_lib->vba.SourceScan[k]
+                                                                               == dm_horz
+                                                               && mode_lib->vba.SupportGFX7CompatibleTilingIn32bppAnd64bpp
+                                                                               == true
+                                                               && mode_lib->vba.DCCEnable[k]
+                                                                               == false))
+                                               || (mode_lib->vba.DCCEnable[k] == true
+                                                               && (mode_lib->vba.SurfaceTiling[k]
+                                                                               == dm_sw_linear
+                                                                               || mode_lib->vba.SourcePixelFormat[k]
+                                                                                               == dm_420_8
+                                                                               || mode_lib->vba.SourcePixelFormat[k]
+                                                                                               == dm_420_10)))) {
+                       mode_lib->vba.SourceFormatPixelAndScanSupport = false;
+               }
+       }
+       /*Bandwidth Support Check*/
+
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.SourceScan[k] == dm_horz) {
+                       mode_lib->vba.SwathWidthYSingleDPP[k] = mode_lib->vba.ViewportWidth[k];
+               } else {
+                       mode_lib->vba.SwathWidthYSingleDPP[k] = mode_lib->vba.ViewportHeight[k];
+               }
+               if (mode_lib->vba.SourcePixelFormat[k] == dm_444_64) {
+                       mode_lib->vba.BytePerPixelInDETY[k] = 8.0;
+                       mode_lib->vba.BytePerPixelInDETC[k] = 0.0;
+               } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_32) {
+                       mode_lib->vba.BytePerPixelInDETY[k] = 4.0;
+                       mode_lib->vba.BytePerPixelInDETC[k] = 0.0;
+               } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_16
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_mono_16) {
+                       mode_lib->vba.BytePerPixelInDETY[k] = 2.0;
+                       mode_lib->vba.BytePerPixelInDETC[k] = 0.0;
+               } else if (mode_lib->vba.SourcePixelFormat[k] == dm_mono_8) {
+                       mode_lib->vba.BytePerPixelInDETY[k] = 1.0;
+                       mode_lib->vba.BytePerPixelInDETC[k] = 0.0;
+               } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8) {
+                       mode_lib->vba.BytePerPixelInDETY[k] = 1.0;
+                       mode_lib->vba.BytePerPixelInDETC[k] = 2.0;
+               } else {
+                       mode_lib->vba.BytePerPixelInDETY[k] = 4.0 / 3;
+                       mode_lib->vba.BytePerPixelInDETC[k] = 8.0 / 3;
+               }
+       }
+       mode_lib->vba.TotalReadBandwidthConsumedGBytePerSecond = 0.0;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               mode_lib->vba.ReadBandwidth[k] = mode_lib->vba.SwathWidthYSingleDPP[k]
+                               * (dml_ceil(mode_lib->vba.BytePerPixelInDETY[k], 1.0)
+                                               * mode_lib->vba.VRatio[k]
+                                               + dml_ceil(mode_lib->vba.BytePerPixelInDETC[k], 2.0)
+                                                               / 2.0 * mode_lib->vba.VRatio[k] / 2)
+                               / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]);
+               if (mode_lib->vba.DCCEnable[k] == true) {
+                       mode_lib->vba.ReadBandwidth[k] = mode_lib->vba.ReadBandwidth[k]
+                                       * (1 + 1 / 256);
+               }
+               if (mode_lib->vba.VirtualMemoryEnable == true
+                               && mode_lib->vba.SourceScan[k] != dm_horz
+                               && (mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_s
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_s_x
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_d
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_d_x)) {
+                       mode_lib->vba.ReadBandwidth[k] = mode_lib->vba.ReadBandwidth[k]
+                                       * (1 + 1 / 64);
+               } else if (mode_lib->vba.VirtualMemoryEnable == true
+                               && mode_lib->vba.SourceScan[k] == dm_horz
+                               && (mode_lib->vba.SourcePixelFormat[k] == dm_444_64
+                                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_32)
+                               && (mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_s
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_s_t
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_s_x
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d_t
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d_x
+                                               || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_r_x)) {
+                       mode_lib->vba.ReadBandwidth[k] = mode_lib->vba.ReadBandwidth[k]
+                                       * (1 + 1 / 256);
+               } else if (mode_lib->vba.VirtualMemoryEnable == true) {
+                       mode_lib->vba.ReadBandwidth[k] = mode_lib->vba.ReadBandwidth[k]
+                                       * (1 + 1 / 512);
+               }
+               mode_lib->vba.TotalReadBandwidthConsumedGBytePerSecond =
+                               mode_lib->vba.TotalReadBandwidthConsumedGBytePerSecond
+                                               + mode_lib->vba.ReadBandwidth[k] / 1000.0;
+       }
+       mode_lib->vba.TotalWriteBandwidthConsumedGBytePerSecond = 0.0;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.WritebackEnable[k] == true
+                               && mode_lib->vba.WritebackPixelFormat[k] == dm_444_32) {
+                       mode_lib->vba.WriteBandwidth[k] = mode_lib->vba.WritebackDestinationWidth[k]
+                                       * mode_lib->vba.WritebackDestinationHeight[k]
+                                       / (mode_lib->vba.WritebackSourceHeight[k]
+                                                       * mode_lib->vba.HTotal[k]
+                                                       / mode_lib->vba.PixelClock[k]) * 4.0;
+               } else if (mode_lib->vba.WritebackEnable[k] == true
+                               && mode_lib->vba.WritebackPixelFormat[k] == dm_420_10) {
+                       mode_lib->vba.WriteBandwidth[k] = mode_lib->vba.WritebackDestinationWidth[k]
+                                       * mode_lib->vba.WritebackDestinationHeight[k]
+                                       / (mode_lib->vba.WritebackSourceHeight[k]
+                                                       * mode_lib->vba.HTotal[k]
+                                                       / mode_lib->vba.PixelClock[k]) * 3.0;
+               } else if (mode_lib->vba.WritebackEnable[k] == true) {
+                       mode_lib->vba.WriteBandwidth[k] = mode_lib->vba.WritebackDestinationWidth[k]
+                                       * mode_lib->vba.WritebackDestinationHeight[k]
+                                       / (mode_lib->vba.WritebackSourceHeight[k]
+                                                       * mode_lib->vba.HTotal[k]
+                                                       / mode_lib->vba.PixelClock[k]) * 1.5;
+               } else {
+                       mode_lib->vba.WriteBandwidth[k] = 0.0;
+               }
+               mode_lib->vba.TotalWriteBandwidthConsumedGBytePerSecond =
+                               mode_lib->vba.TotalWriteBandwidthConsumedGBytePerSecond
+                                               + mode_lib->vba.WriteBandwidth[k] / 1000.0;
+       }
+       mode_lib->vba.TotalBandwidthConsumedGBytePerSecond =
+                       mode_lib->vba.TotalReadBandwidthConsumedGBytePerSecond
+                                       + mode_lib->vba.TotalWriteBandwidthConsumedGBytePerSecond;
+       mode_lib->vba.DCCEnabledInAnyPlane = false;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.DCCEnable[k] == true) {
+                       mode_lib->vba.DCCEnabledInAnyPlane = true;
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.FabricAndDRAMBandwidthPerState[i] = dml_min(
+                               mode_lib->vba.DRAMSpeedPerState[i] * mode_lib->vba.NumberOfChannels
+                                               * mode_lib->vba.DRAMChannelWidth,
+                               mode_lib->vba.FabricClockPerState[i]
+                                               * mode_lib->vba.FabricDatapathToDCNDataReturn)
+                               / 1000;
+               mode_lib->vba.ReturnBWToDCNPerState = dml_min(
+                               mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLKPerState[i],
+                               mode_lib->vba.FabricAndDRAMBandwidthPerState[i] * 1000.0)
+                               * mode_lib->vba.PercentOfIdealDRAMAndFabricBWReceivedAfterUrgLatency
+                               / 100;
+               mode_lib->vba.ReturnBWPerState[i] = mode_lib->vba.ReturnBWToDCNPerState;
+               if (mode_lib->vba.DCCEnabledInAnyPlane == true
+                               && mode_lib->vba.ReturnBWToDCNPerState
+                                               > mode_lib->vba.DCFCLKPerState[i]
+                                                               * mode_lib->vba.ReturnBusWidth
+                                                               / 4.0) {
+                       mode_lib->vba.ReturnBWPerState[i] =
+                                       dml_min(
+                                                       mode_lib->vba.ReturnBWPerState[i],
+                                                       mode_lib->vba.ReturnBWToDCNPerState * 4.0
+                                                                       * (1.0
+                                                                                       - mode_lib->vba.UrgentLatency
+                                                                                                       / ((mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                                                       * 1024.0
+                                                                                                                       / (mode_lib->vba.ReturnBWToDCNPerState
+                                                                                                                                       - mode_lib->vba.DCFCLKPerState[i]
+                                                                                                                                                       * mode_lib->vba.ReturnBusWidth
+                                                                                                                                                       / 4.0)
+                                                                                                                       + mode_lib->vba.UrgentLatency)));
+               }
+               mode_lib->vba.CriticalPoint =
+                               2.0 * mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLKPerState[i]
+                                               * mode_lib->vba.UrgentLatency
+                                               / (mode_lib->vba.ReturnBWToDCNPerState
+                                                               * mode_lib->vba.UrgentLatency
+                                                               + (mode_lib->vba.ROBBufferSizeInKByte
+                                                                               - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                               * 1024.0);
+               if (mode_lib->vba.DCCEnabledInAnyPlane == true && mode_lib->vba.CriticalPoint > 1.0
+                               && mode_lib->vba.CriticalPoint < 4.0) {
+                       mode_lib->vba.ReturnBWPerState[i] =
+                                       dml_min(
+                                                       mode_lib->vba.ReturnBWPerState[i],
+                                                       dml_pow(
+                                                                       4.0
+                                                                                       * mode_lib->vba.ReturnBWToDCNPerState
+                                                                                       * (mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                       * 1024.0
+                                                                                       * mode_lib->vba.ReturnBusWidth
+                                                                                       * mode_lib->vba.DCFCLKPerState[i]
+                                                                                       * mode_lib->vba.UrgentLatency
+                                                                                       / (mode_lib->vba.ReturnBWToDCNPerState
+                                                                                                       * mode_lib->vba.UrgentLatency
+                                                                                                       + (mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                                                       * 1024.0),
+                                                                       2));
+               }
+               mode_lib->vba.ReturnBWToDCNPerState = dml_min(
+                               mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLKPerState[i],
+                               mode_lib->vba.FabricAndDRAMBandwidthPerState[i] * 1000.0);
+               if (mode_lib->vba.DCCEnabledInAnyPlane == true
+                               && mode_lib->vba.ReturnBWToDCNPerState
+                                               > mode_lib->vba.DCFCLKPerState[i]
+                                                               * mode_lib->vba.ReturnBusWidth
+                                                               / 4.0) {
+                       mode_lib->vba.ReturnBWPerState[i] =
+                                       dml_min(
+                                                       mode_lib->vba.ReturnBWPerState[i],
+                                                       mode_lib->vba.ReturnBWToDCNPerState * 4.0
+                                                                       * (1.0
+                                                                                       - mode_lib->vba.UrgentLatency
+                                                                                                       / ((mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                                                       * 1024.0
+                                                                                                                       / (mode_lib->vba.ReturnBWToDCNPerState
+                                                                                                                                       - mode_lib->vba.DCFCLKPerState[i]
+                                                                                                                                                       * mode_lib->vba.ReturnBusWidth
+                                                                                                                                                       / 4.0)
+                                                                                                                       + mode_lib->vba.UrgentLatency)));
+               }
+               mode_lib->vba.CriticalPoint =
+                               2.0 * mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLKPerState[i]
+                                               * mode_lib->vba.UrgentLatency
+                                               / (mode_lib->vba.ReturnBWToDCNPerState
+                                                               * mode_lib->vba.UrgentLatency
+                                                               + (mode_lib->vba.ROBBufferSizeInKByte
+                                                                               - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                               * 1024.0);
+               if (mode_lib->vba.DCCEnabledInAnyPlane == true && mode_lib->vba.CriticalPoint > 1.0
+                               && mode_lib->vba.CriticalPoint < 4.0) {
+                       mode_lib->vba.ReturnBWPerState[i] =
+                                       dml_min(
+                                                       mode_lib->vba.ReturnBWPerState[i],
+                                                       dml_pow(
+                                                                       4.0
+                                                                                       * mode_lib->vba.ReturnBWToDCNPerState
+                                                                                       * (mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                       * 1024.0
+                                                                                       * mode_lib->vba.ReturnBusWidth
+                                                                                       * mode_lib->vba.DCFCLKPerState[i]
+                                                                                       * mode_lib->vba.UrgentLatency
+                                                                                       / (mode_lib->vba.ReturnBWToDCNPerState
+                                                                                                       * mode_lib->vba.UrgentLatency
+                                                                                                       + (mode_lib->vba.ROBBufferSizeInKByte
+                                                                                                                       - mode_lib->vba.PixelChunkSizeInKByte)
+                                                                                                                       * 1024.0),
+                                                                       2));
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               if ((mode_lib->vba.TotalReadBandwidthConsumedGBytePerSecond * 1000.0
+                               <= mode_lib->vba.ReturnBWPerState[i])
+                               && (mode_lib->vba.TotalBandwidthConsumedGBytePerSecond * 1000.0
+                                               <= mode_lib->vba.FabricAndDRAMBandwidthPerState[i]
+                                                               * 1000.0
+                                                               * mode_lib->vba.PercentOfIdealDRAMAndFabricBWReceivedAfterUrgLatency
+                                                               / 100.0)) {
+                       mode_lib->vba.BandwidthSupport[i] = true;
+               } else {
+                       mode_lib->vba.BandwidthSupport[i] = false;
+               }
+       }
+       /*Writeback Latency support check*/
+
+       mode_lib->vba.WritebackLatencySupport = true;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.WritebackEnable[k] == true) {
+                       if (mode_lib->vba.WritebackPixelFormat[k] == dm_444_32) {
+                               if (mode_lib->vba.WriteBandwidth[k]
+                                               > (mode_lib->vba.WritebackInterfaceLumaBufferSize
+                                                               + mode_lib->vba.WritebackInterfaceChromaBufferSize)
+                                                               / mode_lib->vba.WritebackLatency) {
+                                       mode_lib->vba.WritebackLatencySupport = false;
+                               }
+                       } else {
+                               if (mode_lib->vba.WriteBandwidth[k]
+                                               > 1.5
+                                                               * dml_min(
+                                                                               mode_lib->vba.WritebackInterfaceLumaBufferSize,
+                                                                               2.0
+                                                                                               * mode_lib->vba.WritebackInterfaceChromaBufferSize)
+                                                               / mode_lib->vba.WritebackLatency) {
+                                       mode_lib->vba.WritebackLatencySupport = false;
+                               }
+                       }
+               }
+       }
+       /*Re-ordering Buffer Support Check*/
+
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.UrgentRoundTripAndOutOfOrderLatencyPerState[i] =
+                               (mode_lib->vba.RoundTripPingLatencyCycles + 32.0)
+                                               / mode_lib->vba.DCFCLKPerState[i]
+                                               + mode_lib->vba.UrgentOutOfOrderReturnPerChannel
+                                                               * mode_lib->vba.NumberOfChannels
+                                                               / mode_lib->vba.ReturnBWPerState[i];
+               if ((mode_lib->vba.ROBBufferSizeInKByte - mode_lib->vba.PixelChunkSizeInKByte)
+                               * 1024.0 / mode_lib->vba.ReturnBWPerState[i]
+                               > mode_lib->vba.UrgentRoundTripAndOutOfOrderLatencyPerState[i]) {
+                       mode_lib->vba.ROBSupport[i] = true;
+               } else {
+                       mode_lib->vba.ROBSupport[i] = false;
+               }
+       }
+       /*Writeback Mode Support Check*/
+
+       mode_lib->vba.TotalNumberOfActiveWriteback = 0;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.WritebackEnable[k] == true) {
+                       mode_lib->vba.TotalNumberOfActiveWriteback =
+                                       mode_lib->vba.TotalNumberOfActiveWriteback + 1;
+               }
+       }
+       mode_lib->vba.WritebackModeSupport = true;
+       if (mode_lib->vba.TotalNumberOfActiveWriteback > mode_lib->vba.MaxNumWriteback) {
+               mode_lib->vba.WritebackModeSupport = false;
+       }
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.WritebackEnable[k] == true
+                               && mode_lib->vba.Writeback10bpc420Supported != true
+                               && mode_lib->vba.WritebackPixelFormat[k] == dm_420_10) {
+                       mode_lib->vba.WritebackModeSupport = false;
+               }
+       }
+       /*Writeback Scale Ratio and Taps Support Check*/
+
+       mode_lib->vba.WritebackScaleRatioAndTapsSupport = true;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.WritebackEnable[k] == true) {
+                       if (mode_lib->vba.WritebackLumaAndChromaScalingSupported == false
+                                       && (mode_lib->vba.WritebackHRatio[k] != 1.0
+                                                       || mode_lib->vba.WritebackVRatio[k] != 1.0)) {
+                               mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
+                       }
+                       if (mode_lib->vba.WritebackHRatio[k] > mode_lib->vba.WritebackMaxHSCLRatio
+                                       || mode_lib->vba.WritebackVRatio[k]
+                                                       > mode_lib->vba.WritebackMaxVSCLRatio
+                                       || mode_lib->vba.WritebackHRatio[k]
+                                                       < mode_lib->vba.WritebackMinHSCLRatio
+                                       || mode_lib->vba.WritebackVRatio[k]
+                                                       < mode_lib->vba.WritebackMinVSCLRatio
+                                       || mode_lib->vba.WritebackLumaHTaps[k]
+                                                       > mode_lib->vba.WritebackMaxHSCLTaps
+                                       || mode_lib->vba.WritebackLumaVTaps[k]
+                                                       > mode_lib->vba.WritebackMaxVSCLTaps
+                                       || mode_lib->vba.WritebackHRatio[k]
+                                                       > mode_lib->vba.WritebackLumaHTaps[k]
+                                       || mode_lib->vba.WritebackVRatio[k]
+                                                       > mode_lib->vba.WritebackLumaVTaps[k]
+                                       || (mode_lib->vba.WritebackLumaHTaps[k] > 2.0
+                                                       && ((mode_lib->vba.WritebackLumaHTaps[k] % 2)
+                                                                       == 1))
+                                       || (mode_lib->vba.WritebackPixelFormat[k] != dm_444_32
+                                                       && (mode_lib->vba.WritebackChromaHTaps[k]
+                                                                       > mode_lib->vba.WritebackMaxHSCLTaps
+                                                                       || mode_lib->vba.WritebackChromaVTaps[k]
+                                                                                       > mode_lib->vba.WritebackMaxVSCLTaps
+                                                                       || 2.0
+                                                                                       * mode_lib->vba.WritebackHRatio[k]
+                                                                                       > mode_lib->vba.WritebackChromaHTaps[k]
+                                                                       || 2.0
+                                                                                       * mode_lib->vba.WritebackVRatio[k]
+                                                                                       > mode_lib->vba.WritebackChromaVTaps[k]
+                                                                       || (mode_lib->vba.WritebackChromaHTaps[k] > 2.0
+                                                                               && ((mode_lib->vba.WritebackChromaHTaps[k] % 2) == 1))))) {
+                               mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
+                       }
+                       if (mode_lib->vba.WritebackVRatio[k] < 1.0) {
+                               mode_lib->vba.WritebackLumaVExtra =
+                                               dml_max(1.0 - 2.0 / dml_ceil(1.0 / mode_lib->vba.WritebackVRatio[k], 1.0), 0.0);
+                       } else {
+                               mode_lib->vba.WritebackLumaVExtra = -1;
+                       }
+                       if ((mode_lib->vba.WritebackPixelFormat[k] == dm_444_32
+                                       && mode_lib->vba.WritebackLumaVTaps[k]
+                                                       > (mode_lib->vba.WritebackLineBufferLumaBufferSize
+                                                                       + mode_lib->vba.WritebackLineBufferChromaBufferSize)
+                                                                       / 3.0
+                                                                       / mode_lib->vba.WritebackDestinationWidth[k]
+                                                                       - mode_lib->vba.WritebackLumaVExtra)
+                                       || (mode_lib->vba.WritebackPixelFormat[k] == dm_420_8
+                                                       && mode_lib->vba.WritebackLumaVTaps[k]
+                                                                       > mode_lib->vba.WritebackLineBufferLumaBufferSize
+                                                                                       / mode_lib->vba.WritebackDestinationWidth[k]
+                                                                                       - mode_lib->vba.WritebackLumaVExtra)
+                                       || (mode_lib->vba.WritebackPixelFormat[k] == dm_420_10
+                                                       && mode_lib->vba.WritebackLumaVTaps[k]
+                                                                       > mode_lib->vba.WritebackLineBufferLumaBufferSize
+                                                                                       * 8.0 / 10.0
+                                                                                       / mode_lib->vba.WritebackDestinationWidth[k]
+                                                                                       - mode_lib->vba.WritebackLumaVExtra)) {
+                               mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
+                       }
+                       if (2.0 * mode_lib->vba.WritebackVRatio[k] < 1) {
+                               mode_lib->vba.WritebackChromaVExtra = 0.0;
+                       } else {
+                               mode_lib->vba.WritebackChromaVExtra = -1;
+                       }
+                       if ((mode_lib->vba.WritebackPixelFormat[k] == dm_420_8
+                                       && mode_lib->vba.WritebackChromaVTaps[k]
+                                                       > mode_lib->vba.WritebackLineBufferChromaBufferSize
+                                                                       / mode_lib->vba.WritebackDestinationWidth[k]
+                                                                       - mode_lib->vba.WritebackChromaVExtra)
+                                       || (mode_lib->vba.WritebackPixelFormat[k] == dm_420_10
+                                                       && mode_lib->vba.WritebackChromaVTaps[k]
+                                                                       > mode_lib->vba.WritebackLineBufferChromaBufferSize
+                                                                                       * 8.0 / 10.0
+                                                                                       / mode_lib->vba.WritebackDestinationWidth[k]
+                                                                                       - mode_lib->vba.WritebackChromaVExtra)) {
+                               mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
+                       }
+               }
+       }
+       /*Maximum DISPCLK/DPPCLK Support check*/
+
+       mode_lib->vba.WritebackRequiredDISPCLK = 0.0;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.WritebackEnable[k] == true) {
+                       mode_lib->vba.WritebackRequiredDISPCLK =
+                                       dml_max(
+                                                       mode_lib->vba.WritebackRequiredDISPCLK,
+                                                       CalculateWriteBackDISPCLK(
+                                                                       mode_lib->vba.WritebackPixelFormat[k],
+                                                                       mode_lib->vba.PixelClock[k],
+                                                                       mode_lib->vba.WritebackHRatio[k],
+                                                                       mode_lib->vba.WritebackVRatio[k],
+                                                                       mode_lib->vba.WritebackLumaHTaps[k],
+                                                                       mode_lib->vba.WritebackLumaVTaps[k],
+                                                                       mode_lib->vba.WritebackChromaHTaps[k],
+                                                                       mode_lib->vba.WritebackChromaVTaps[k],
+                                                                       mode_lib->vba.WritebackDestinationWidth[k],
+                                                                       mode_lib->vba.HTotal[k],
+                                                                       mode_lib->vba.WritebackChromaLineBufferWidth));
+               }
+       }
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.HRatio[k] > 1.0) {
+                       mode_lib->vba.PSCL_FACTOR[k] = dml_min(
+                                       mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                       mode_lib->vba.MaxPSCLToLBThroughput
+                                                       * mode_lib->vba.HRatio[k]
+                                                       / dml_ceil(
+                                                                       mode_lib->vba.htaps[k]
+                                                                                       / 6.0,
+                                                                       1.0));
+               } else {
+                       mode_lib->vba.PSCL_FACTOR[k] = dml_min(
+                                       mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                       mode_lib->vba.MaxPSCLToLBThroughput);
+               }
+               if (mode_lib->vba.BytePerPixelInDETC[k] == 0.0) {
+                       mode_lib->vba.PSCL_FACTOR_CHROMA[k] = 0.0;
+                       mode_lib->vba.MinDPPCLKUsingSingleDPP[k] =
+                                       mode_lib->vba.PixelClock[k]
+                                                       * dml_max3(
+                                                                       mode_lib->vba.vtaps[k] / 6.0
+                                                                                       * dml_min(
+                                                                                                       1.0,
+                                                                                                       mode_lib->vba.HRatio[k]),
+                                                                       mode_lib->vba.HRatio[k]
+                                                                                       * mode_lib->vba.VRatio[k]
+                                                                                       / mode_lib->vba.PSCL_FACTOR[k],
+                                                                       1.0);
+                       if ((mode_lib->vba.htaps[k] > 6.0 || mode_lib->vba.vtaps[k] > 6.0)
+                                       && mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                       < 2.0 * mode_lib->vba.PixelClock[k]) {
+                               mode_lib->vba.MinDPPCLKUsingSingleDPP[k] = 2.0
+                                               * mode_lib->vba.PixelClock[k];
+                       }
+               } else {
+                       if (mode_lib->vba.HRatio[k] / 2.0 > 1.0) {
+                               mode_lib->vba.PSCL_FACTOR_CHROMA[k] =
+                                               dml_min(
+                                                               mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                                               mode_lib->vba.MaxPSCLToLBThroughput
+                                                                               * mode_lib->vba.HRatio[k]
+                                                                               / 2.0
+                                                                               / dml_ceil(
+                                                                                               mode_lib->vba.HTAPsChroma[k]
+                                                                                                               / 6.0,
+                                                                                               1.0));
+                       } else {
+                               mode_lib->vba.PSCL_FACTOR_CHROMA[k] = dml_min(
+                                               mode_lib->vba.MaxDCHUBToPSCLThroughput,
+                                               mode_lib->vba.MaxPSCLToLBThroughput);
+                       }
+                       mode_lib->vba.MinDPPCLKUsingSingleDPP[k] =
+                                       mode_lib->vba.PixelClock[k]
+                                                       * dml_max5(
+                                                                       mode_lib->vba.vtaps[k] / 6.0
+                                                                                       * dml_min(
+                                                                                                       1.0,
+                                                                                                       mode_lib->vba.HRatio[k]),
+                                                                       mode_lib->vba.HRatio[k]
+                                                                                       * mode_lib->vba.VRatio[k]
+                                                                                       / mode_lib->vba.PSCL_FACTOR[k],
+                                                                       mode_lib->vba.VTAPsChroma[k]
+                                                                                       / 6.0
+                                                                                       * dml_min(
+                                                                                                       1.0,
+                                                                                                       mode_lib->vba.HRatio[k]
+                                                                                                                       / 2.0),
+                                                                       mode_lib->vba.HRatio[k]
+                                                                                       * mode_lib->vba.VRatio[k]
+                                                                                       / 4.0
+                                                                                       / mode_lib->vba.PSCL_FACTOR_CHROMA[k],
+                                                                       1.0);
+                       if ((mode_lib->vba.htaps[k] > 6.0 || mode_lib->vba.vtaps[k] > 6.0
+                                       || mode_lib->vba.HTAPsChroma[k] > 6.0
+                                       || mode_lib->vba.VTAPsChroma[k] > 6.0)
+                                       && mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                       < 2.0 * mode_lib->vba.PixelClock[k]) {
+                               mode_lib->vba.MinDPPCLKUsingSingleDPP[k] = 2.0
+                                               * mode_lib->vba.PixelClock[k];
+                       }
+               }
+       }
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               Calculate256BBlockSizes(
+                               mode_lib->vba.SourcePixelFormat[k],
+                               mode_lib->vba.SurfaceTiling[k],
+                               dml_ceil(mode_lib->vba.BytePerPixelInDETY[k], 1.0),
+                               dml_ceil(mode_lib->vba.BytePerPixelInDETC[k], 2.0),
+                               &mode_lib->vba.Read256BlockHeightY[k],
+                               &mode_lib->vba.Read256BlockHeightC[k],
+                               &mode_lib->vba.Read256BlockWidthY[k],
+                               &mode_lib->vba.Read256BlockWidthC[k]);
+               if (mode_lib->vba.SourceScan[k] == dm_horz) {
+                       mode_lib->vba.MaxSwathHeightY[k] = mode_lib->vba.Read256BlockHeightY[k];
+                       mode_lib->vba.MaxSwathHeightC[k] = mode_lib->vba.Read256BlockHeightC[k];
+               } else {
+                       mode_lib->vba.MaxSwathHeightY[k] = mode_lib->vba.Read256BlockWidthY[k];
+                       mode_lib->vba.MaxSwathHeightC[k] = mode_lib->vba.Read256BlockWidthC[k];
+               }
+               if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_mono_16
+                               || mode_lib->vba.SourcePixelFormat[k] == dm_mono_8)) {
+                       if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear
+                                       || (mode_lib->vba.SourcePixelFormat[k] == dm_444_64
+                                                       && (mode_lib->vba.SurfaceTiling[k]
+                                                                       == dm_sw_4kb_s
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_4kb_s_x
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_64kb_s
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_64kb_s_t
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_64kb_s_x
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_var_s
+                                                                       || mode_lib->vba.SurfaceTiling[k]
+                                                                                       == dm_sw_var_s_x)
+                                                       && mode_lib->vba.SourceScan[k] == dm_horz)) {
+                               mode_lib->vba.MinSwathHeightY[k] = mode_lib->vba.MaxSwathHeightY[k];
+                       } else {
+                               mode_lib->vba.MinSwathHeightY[k] = mode_lib->vba.MaxSwathHeightY[k]
+                                               / 2.0;
+                       }
+                       mode_lib->vba.MinSwathHeightC[k] = mode_lib->vba.MaxSwathHeightC[k];
+               } else {
+                       if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
+                               mode_lib->vba.MinSwathHeightY[k] = mode_lib->vba.MaxSwathHeightY[k];
+                               mode_lib->vba.MinSwathHeightC[k] = mode_lib->vba.MaxSwathHeightC[k];
+                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8
+                                       && mode_lib->vba.SourceScan[k] == dm_horz) {
+                               mode_lib->vba.MinSwathHeightY[k] = mode_lib->vba.MaxSwathHeightY[k]
+                                               / 2.0;
+                               mode_lib->vba.MinSwathHeightC[k] = mode_lib->vba.MaxSwathHeightC[k];
+                       } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10
+                                       && mode_lib->vba.SourceScan[k] == dm_horz) {
+                               mode_lib->vba.MinSwathHeightC[k] = mode_lib->vba.MaxSwathHeightC[k]
+                                               / 2.0;
+                               mode_lib->vba.MinSwathHeightY[k] = mode_lib->vba.MaxSwathHeightY[k];
+                       } else {
+                               mode_lib->vba.MinSwathHeightY[k] = mode_lib->vba.MaxSwathHeightY[k];
+                               mode_lib->vba.MinSwathHeightC[k] = mode_lib->vba.MaxSwathHeightC[k];
+                       }
+               }
+               if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
+                       mode_lib->vba.MaximumSwathWidthSupport = 8192.0;
+               } else {
+                       mode_lib->vba.MaximumSwathWidthSupport = 5120.0;
+               }
+               mode_lib->vba.MaximumSwathWidthInDETBuffer =
+                               dml_min(
+                                               mode_lib->vba.MaximumSwathWidthSupport,
+                                               mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0
+                                                               / (mode_lib->vba.BytePerPixelInDETY[k]
+                                                                               * mode_lib->vba.MinSwathHeightY[k]
+                                                                               + mode_lib->vba.BytePerPixelInDETC[k]
+                                                                                               / 2.0
+                                                                                               * mode_lib->vba.MinSwathHeightC[k]));
+               if (mode_lib->vba.BytePerPixelInDETC[k] == 0.0) {
+                       mode_lib->vba.MaximumSwathWidthInLineBuffer =
+                                       mode_lib->vba.LineBufferSize
+                                                       * dml_max(mode_lib->vba.HRatio[k], 1.0)
+                                                       / mode_lib->vba.LBBitPerPixel[k]
+                                                       / (mode_lib->vba.vtaps[k]
+                                                                       + dml_max(
+                                                                                       dml_ceil(
+                                                                                                       mode_lib->vba.VRatio[k],
+                                                                                                       1.0)
+                                                                                                       - 2,
+                                                                                       0.0));
+               } else {
+                       mode_lib->vba.MaximumSwathWidthInLineBuffer =
+                                       dml_min(
+                                                       mode_lib->vba.LineBufferSize
+                                                                       * dml_max(
+                                                                                       mode_lib->vba.HRatio[k],
+                                                                                       1.0)
+                                                                       / mode_lib->vba.LBBitPerPixel[k]
+                                                                       / (mode_lib->vba.vtaps[k]
+                                                                                       + dml_max(
+                                                                                                       dml_ceil(
+                                                                                                                       mode_lib->vba.VRatio[k],
+                                                                                                                       1.0)
+                                                                                                                       - 2,
+                                                                                                       0.0)),
+                                                       2.0 * mode_lib->vba.LineBufferSize
+                                                                       * dml_max(
+                                                                                       mode_lib->vba.HRatio[k]
+                                                                                                       / 2.0,
+                                                                                       1.0)
+                                                                       / mode_lib->vba.LBBitPerPixel[k]
+                                                                       / (mode_lib->vba.VTAPsChroma[k]
+                                                                                       + dml_max(
+                                                                                                       dml_ceil(
+                                                                                                                       mode_lib->vba.VRatio[k]
+                                                                                                                                       / 2.0,
+                                                                                                                       1.0)
+                                                                                                                       - 2,
+                                                                                                       0.0)));
+               }
+               mode_lib->vba.MaximumSwathWidth[k] = dml_min(
+                               mode_lib->vba.MaximumSwathWidthInDETBuffer,
+                               mode_lib->vba.MaximumSwathWidthInLineBuffer);
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity = RoundToDFSGranularityDown(
+                               mode_lib->vba.MaxDispclk[i],
+                               mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
+               mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity = RoundToDFSGranularityDown(
+                               mode_lib->vba.MaxDppclk[i],
+                               mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
+               mode_lib->vba.RequiredDISPCLK[i] = 0.0;
+               mode_lib->vba.DISPCLK_DPPCLK_Support[i] = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine =
+                                       mode_lib->vba.PixelClock[k]
+                                                       * (1.0
+                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                       / 100.0)
+                                                       * (1.0
+                                                                       + mode_lib->vba.DISPCLKRampingMargin
+                                                                                       / 100.0);
+                       if (mode_lib->vba.ODMCapability == true
+                                       && mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine
+                                                       > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity) {
+                               mode_lib->vba.ODMCombineEnablePerState[i][k] = true;
+                               mode_lib->vba.PlaneRequiredDISPCLK =
+                                               mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine
+                                                               / 2.0;
+                       } else {
+                               mode_lib->vba.ODMCombineEnablePerState[i][k] = false;
+                               mode_lib->vba.PlaneRequiredDISPCLK =
+                                               mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine;
+                       }
+                       if (mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                       * (1.0
+                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                       / 100.0)
+                                       <= mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity
+                                       && mode_lib->vba.SwathWidthYSingleDPP[k]
+                                                       <= mode_lib->vba.MaximumSwathWidth[k]
+                                       && mode_lib->vba.ODMCombineEnablePerState[i][k] == false) {
+                               mode_lib->vba.NoOfDPP[i][k] = 1.0;
+                               mode_lib->vba.RequiredDPPCLK[i][k] =
+                                               mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                               * (1.0
+                                                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                               / 100.0);
+                       } else {
+                               mode_lib->vba.NoOfDPP[i][k] = 2.0;
+                               mode_lib->vba.RequiredDPPCLK[i][k] =
+                                               mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                               * (1.0
+                                                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                               / 100.0)
+                                                               / 2.0;
+                       }
+                       mode_lib->vba.RequiredDISPCLK[i] = dml_max(
+                                       mode_lib->vba.RequiredDISPCLK[i],
+                                       mode_lib->vba.PlaneRequiredDISPCLK);
+                       if ((mode_lib->vba.MinDPPCLKUsingSingleDPP[k] / mode_lib->vba.NoOfDPP[i][k]
+                                       * (1.0
+                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                       / 100.0)
+                                       > mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity)
+                                       || (mode_lib->vba.PlaneRequiredDISPCLK
+                                                       > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity)) {
+                               mode_lib->vba.DISPCLK_DPPCLK_Support[i] = false;
+                       }
+               }
+               mode_lib->vba.TotalNumberOfActiveDPP[i] = 0.0;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.TotalNumberOfActiveDPP[i] =
+                                       mode_lib->vba.TotalNumberOfActiveDPP[i]
+                                                       + mode_lib->vba.NoOfDPP[i][k];
+               }
+               if ((mode_lib->vba.MaxDispclk[i] == mode_lib->vba.MaxDispclk[DC__VOLTAGE_STATES]
+                               && mode_lib->vba.MaxDppclk[i]
+                                               == mode_lib->vba.MaxDppclk[DC__VOLTAGE_STATES])
+                               && (mode_lib->vba.TotalNumberOfActiveDPP[i]
+                                               > mode_lib->vba.MaxNumDPP
+                                               || mode_lib->vba.DISPCLK_DPPCLK_Support[i] == false)) {
+                       mode_lib->vba.RequiredDISPCLK[i] = 0.0;
+                       mode_lib->vba.DISPCLK_DPPCLK_Support[i] = true;
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine =
+                                               mode_lib->vba.PixelClock[k]
+                                                               * (1.0
+                                                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                               / 100.0);
+                               if (mode_lib->vba.ODMCapability == true
+                                               && mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine
+                                                               > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity) {
+                                       mode_lib->vba.ODMCombineEnablePerState[i][k] = true;
+                                       mode_lib->vba.PlaneRequiredDISPCLK =
+                                                       mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine
+                                                                       / 2.0;
+                               } else {
+                                       mode_lib->vba.ODMCombineEnablePerState[i][k] = false;
+                                       mode_lib->vba.PlaneRequiredDISPCLK =
+                                                       mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine;
+                               }
+                               if (mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                               * (1.0
+                                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                               / 100.0)
+                                               <= mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity
+                                               && mode_lib->vba.SwathWidthYSingleDPP[k]
+                                                               <= mode_lib->vba.MaximumSwathWidth[k]
+                                               && mode_lib->vba.ODMCombineEnablePerState[i][k]
+                                                               == false) {
+                                       mode_lib->vba.NoOfDPP[i][k] = 1.0;
+                                       mode_lib->vba.RequiredDPPCLK[i][k] =
+                                                       mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0);
+                               } else {
+                                       mode_lib->vba.NoOfDPP[i][k] = 2.0;
+                                       mode_lib->vba.RequiredDPPCLK[i][k] =
+                                                       mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0)
+                                                                       / 2.0;
+                               }
+                               mode_lib->vba.RequiredDISPCLK[i] = dml_max(
+                                               mode_lib->vba.RequiredDISPCLK[i],
+                                               mode_lib->vba.PlaneRequiredDISPCLK);
+                               if ((mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                               / mode_lib->vba.NoOfDPP[i][k]
+                                               * (1.0
+                                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                               / 100.0)
+                                               > mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity)
+                                               || (mode_lib->vba.PlaneRequiredDISPCLK
+                                                               > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity)) {
+                                       mode_lib->vba.DISPCLK_DPPCLK_Support[i] = false;
+                               }
+                       }
+                       mode_lib->vba.TotalNumberOfActiveDPP[i] = 0.0;
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.TotalNumberOfActiveDPP[i] =
+                                               mode_lib->vba.TotalNumberOfActiveDPP[i]
+                                                               + mode_lib->vba.NoOfDPP[i][k];
+                       }
+               }
+               if (mode_lib->vba.TotalNumberOfActiveDPP[i] > mode_lib->vba.MaxNumDPP) {
+                       mode_lib->vba.RequiredDISPCLK[i] = 0.0;
+                       mode_lib->vba.DISPCLK_DPPCLK_Support[i] = true;
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.ODMCombineEnablePerState[i][k] = false;
+                               if (mode_lib->vba.SwathWidthYSingleDPP[k]
+                                               <= mode_lib->vba.MaximumSwathWidth[k]) {
+                                       mode_lib->vba.NoOfDPP[i][k] = 1.0;
+                                       mode_lib->vba.RequiredDPPCLK[i][k] =
+                                                       mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0);
+                               } else {
+                                       mode_lib->vba.NoOfDPP[i][k] = 2.0;
+                                       mode_lib->vba.RequiredDPPCLK[i][k] =
+                                                       mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0)
+                                                                       / 2.0;
+                               }
+                               if (!(mode_lib->vba.MaxDispclk[i]
+                                               == mode_lib->vba.MaxDispclk[DC__VOLTAGE_STATES]
+                                               && mode_lib->vba.MaxDppclk[i]
+                                                               == mode_lib->vba.MaxDppclk[DC__VOLTAGE_STATES])) {
+                                       mode_lib->vba.PlaneRequiredDISPCLK =
+                                                       mode_lib->vba.PixelClock[k]
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0)
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKRampingMargin
+                                                                                                       / 100.0);
+                               } else {
+                                       mode_lib->vba.PlaneRequiredDISPCLK =
+                                                       mode_lib->vba.PixelClock[k]
+                                                                       * (1.0
+                                                                                       + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0);
+                               }
+                               mode_lib->vba.RequiredDISPCLK[i] = dml_max(
+                                               mode_lib->vba.RequiredDISPCLK[i],
+                                               mode_lib->vba.PlaneRequiredDISPCLK);
+                               if ((mode_lib->vba.MinDPPCLKUsingSingleDPP[k]
+                                               / mode_lib->vba.NoOfDPP[i][k]
+                                               * (1.0
+                                                               + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                               / 100.0)
+                                               > mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity)
+                                               || (mode_lib->vba.PlaneRequiredDISPCLK
+                                                               > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity)) {
+                                       mode_lib->vba.DISPCLK_DPPCLK_Support[i] = false;
+                               }
+                       }
+                       mode_lib->vba.TotalNumberOfActiveDPP[i] = 0.0;
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.TotalNumberOfActiveDPP[i] =
+                                               mode_lib->vba.TotalNumberOfActiveDPP[i]
+                                                               + mode_lib->vba.NoOfDPP[i][k];
+                       }
+               }
+               mode_lib->vba.RequiredDISPCLK[i] = dml_max(
+                               mode_lib->vba.RequiredDISPCLK[i],
+                               mode_lib->vba.WritebackRequiredDISPCLK);
+               if (mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity
+                               < mode_lib->vba.WritebackRequiredDISPCLK) {
+                       mode_lib->vba.DISPCLK_DPPCLK_Support[i] = false;
+               }
+       }
+       /*Viewport Size Check*/
+
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.ViewportSizeSupport[i] = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.ODMCombineEnablePerState[i][k] == true) {
+                               if (dml_min(
+                                               mode_lib->vba.SwathWidthYSingleDPP[k],
+                                               dml_round(
+                                                               mode_lib->vba.HActive[k] / 2.0
+                                                                               * mode_lib->vba.HRatio[k]))
+                                               > mode_lib->vba.MaximumSwathWidth[k]) {
+                                       mode_lib->vba.ViewportSizeSupport[i] = false;
+                               }
+                       } else {
+                               if (mode_lib->vba.SwathWidthYSingleDPP[k] / 2.0
+                                               > mode_lib->vba.MaximumSwathWidth[k]) {
+                                       mode_lib->vba.ViewportSizeSupport[i] = false;
+                               }
+                       }
+               }
+       }
+       /*Total Available Pipes Support Check*/
+
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               if (mode_lib->vba.TotalNumberOfActiveDPP[i] <= mode_lib->vba.MaxNumDPP) {
+                       mode_lib->vba.TotalAvailablePipesSupport[i] = true;
+               } else {
+                       mode_lib->vba.TotalAvailablePipesSupport[i] = false;
+               }
+       }
+       /*Total Available OTG Support Check*/
+
+       mode_lib->vba.TotalNumberOfActiveOTG = 0.0;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.BlendingAndTiming[k] == k) {
+                       mode_lib->vba.TotalNumberOfActiveOTG = mode_lib->vba.TotalNumberOfActiveOTG
+                                       + 1.0;
+               }
+       }
+       if (mode_lib->vba.TotalNumberOfActiveOTG <= mode_lib->vba.MaxNumOTG) {
+               mode_lib->vba.NumberOfOTGSupport = true;
+       } else {
+               mode_lib->vba.NumberOfOTGSupport = false;
+       }
+       /*Display IO and DSC Support Check*/
+
+       mode_lib->vba.NonsupportedDSCInputBPC = false;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (!(mode_lib->vba.DSCInputBitPerComponent[k] == 12.0
+                               || mode_lib->vba.DSCInputBitPerComponent[k] == 10.0
+                               || mode_lib->vba.DSCInputBitPerComponent[k] == 8.0)) {
+                       mode_lib->vba.NonsupportedDSCInputBPC = true;
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.RequiresDSC[i][k] = 0;
+                       mode_lib->vba.RequiresFEC[i][k] = 0;
+                       if (mode_lib->vba.BlendingAndTiming[k] == k) {
+                               if (mode_lib->vba.Output[k] == dm_hdmi) {
+                                       mode_lib->vba.RequiresDSC[i][k] = 0;
+                                       mode_lib->vba.RequiresFEC[i][k] = 0;
+                                       mode_lib->vba.OutputBppPerState[i][k] =
+                                                       TruncToValidBPP(
+                                                                       dml_min(
+                                                                                       600.0,
+                                                                                       mode_lib->vba.PHYCLKPerState[i])
+                                                                                       / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                       * 24,
+                                                                       false,
+                                                                       mode_lib->vba.Output[k],
+                                                                       mode_lib->vba.OutputFormat[k],
+                                                                       mode_lib->vba.DSCInputBitPerComponent[k]);
+                               } else if (mode_lib->vba.Output[k] == dm_dp
+                                               || mode_lib->vba.Output[k] == dm_edp) {
+                                       if (mode_lib->vba.Output[k] == dm_edp) {
+                                               mode_lib->vba.EffectiveFECOverhead = 0.0;
+                                       } else {
+                                               mode_lib->vba.EffectiveFECOverhead =
+                                                               mode_lib->vba.FECOverhead;
+                                       }
+                                       if (mode_lib->vba.PHYCLKPerState[i] >= 270.0) {
+                                               mode_lib->vba.Outbpp =
+                                                               TruncToValidBPP(
+                                                                               (1.0
+                                                                                               - mode_lib->vba.Downspreading
+                                                                                                               / 100.0)
+                                                                                               * 270.0
+                                                                                               * mode_lib->vba.OutputLinkDPLanes[k]
+                                                                                               / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                               * 8.0,
+                                                                               false,
+                                                                               mode_lib->vba.Output[k],
+                                                                               mode_lib->vba.OutputFormat[k],
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k]);
+                                               mode_lib->vba.OutbppDSC =
+                                                               TruncToValidBPP(
+                                                                               (1.0
+                                                                                               - mode_lib->vba.Downspreading
+                                                                                                               / 100.0)
+                                                                                               * (1.0
+                                                                                                               - mode_lib->vba.EffectiveFECOverhead
+                                                                                                                               / 100.0)
+                                                                                               * 270.0
+                                                                                               * mode_lib->vba.OutputLinkDPLanes[k]
+                                                                                               / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                               * 8.0,
+                                                                               true,
+                                                                               mode_lib->vba.Output[k],
+                                                                               mode_lib->vba.OutputFormat[k],
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k]);
+                                               if (mode_lib->vba.DSCEnabled[k] == true) {
+                                                       mode_lib->vba.RequiresDSC[i][k] = true;
+                                                       if (mode_lib->vba.Output[k] == dm_dp) {
+                                                               mode_lib->vba.RequiresFEC[i][k] =
+                                                                               true;
+                                                       } else {
+                                                               mode_lib->vba.RequiresFEC[i][k] =
+                                                                               false;
+                                                       }
+                                                       mode_lib->vba.Outbpp =
+                                                                       mode_lib->vba.OutbppDSC;
+                                               } else {
+                                                       mode_lib->vba.RequiresDSC[i][k] = false;
+                                                       mode_lib->vba.RequiresFEC[i][k] = false;
+                                               }
+                                               mode_lib->vba.OutputBppPerState[i][k] =
+                                                               mode_lib->vba.Outbpp;
+                                       }
+                                       if (mode_lib->vba.Outbpp == 0) {
+                                               mode_lib->vba.Outbpp =
+                                                               TruncToValidBPP(
+                                                                               (1.0
+                                                                                               - mode_lib->vba.Downspreading
+                                                                                                               / 100.0)
+                                                                                               * 540.0
+                                                                                               * mode_lib->vba.OutputLinkDPLanes[k]
+                                                                                               / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                               * 8.0,
+                                                                               false,
+                                                                               mode_lib->vba.Output[k],
+                                                                               mode_lib->vba.OutputFormat[k],
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k]);
+                                               mode_lib->vba.OutbppDSC =
+                                                               TruncToValidBPP(
+                                                                               (1.0
+                                                                                               - mode_lib->vba.Downspreading
+                                                                                                               / 100.0)
+                                                                                               * (1.0
+                                                                                                               - mode_lib->vba.EffectiveFECOverhead
+                                                                                                                               / 100.0)
+                                                                                               * 540.0
+                                                                                               * mode_lib->vba.OutputLinkDPLanes[k]
+                                                                                               / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                               * 8.0,
+                                                                               true,
+                                                                               mode_lib->vba.Output[k],
+                                                                               mode_lib->vba.OutputFormat[k],
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k]);
+                                               if (mode_lib->vba.DSCEnabled[k] == true) {
+                                                       mode_lib->vba.RequiresDSC[i][k] = true;
+                                                       if (mode_lib->vba.Output[k] == dm_dp) {
+                                                               mode_lib->vba.RequiresFEC[i][k] =
+                                                                               true;
+                                                       } else {
+                                                               mode_lib->vba.RequiresFEC[i][k] =
+                                                                               false;
+                                                       }
+                                                       mode_lib->vba.Outbpp =
+                                                                       mode_lib->vba.OutbppDSC;
+                                               } else {
+                                                       mode_lib->vba.RequiresDSC[i][k] = false;
+                                                       mode_lib->vba.RequiresFEC[i][k] = false;
+                                               }
+                                               mode_lib->vba.OutputBppPerState[i][k] =
+                                                               mode_lib->vba.Outbpp;
+                                       }
+                                       if (mode_lib->vba.Outbpp == 0
+                                                       && mode_lib->vba.PHYCLKPerState[i]
+                                                                       >= 810.0) {
+                                               mode_lib->vba.Outbpp =
+                                                               TruncToValidBPP(
+                                                                               (1.0
+                                                                                               - mode_lib->vba.Downspreading
+                                                                                                               / 100.0)
+                                                                                               * 810.0
+                                                                                               * mode_lib->vba.OutputLinkDPLanes[k]
+                                                                                               / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                               * 8.0,
+                                                                               false,
+                                                                               mode_lib->vba.Output[k],
+                                                                               mode_lib->vba.OutputFormat[k],
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k]);
+                                               mode_lib->vba.OutbppDSC =
+                                                               TruncToValidBPP(
+                                                                               (1.0
+                                                                                               - mode_lib->vba.Downspreading
+                                                                                                               / 100.0)
+                                                                                               * (1.0
+                                                                                                               - mode_lib->vba.EffectiveFECOverhead
+                                                                                                                               / 100.0)
+                                                                                               * 810.0
+                                                                                               * mode_lib->vba.OutputLinkDPLanes[k]
+                                                                                               / mode_lib->vba.PixelClockBackEnd[k]
+                                                                                               * 8.0,
+                                                                               true,
+                                                                               mode_lib->vba.Output[k],
+                                                                               mode_lib->vba.OutputFormat[k],
+                                                                               mode_lib->vba.DSCInputBitPerComponent[k]);
+                                               if (mode_lib->vba.DSCEnabled[k] == true
+                                                               || mode_lib->vba.Outbpp == 0) {
+                                                       mode_lib->vba.RequiresDSC[i][k] = true;
+                                                       if (mode_lib->vba.Output[k] == dm_dp) {
+                                                               mode_lib->vba.RequiresFEC[i][k] =
+                                                                               true;
+                                                       } else {
+                                                               mode_lib->vba.RequiresFEC[i][k] =
+                                                                               false;
+                                                       }
+                                                       mode_lib->vba.Outbpp =
+                                                                       mode_lib->vba.OutbppDSC;
+                                               } else {
+                                                       mode_lib->vba.RequiresDSC[i][k] = false;
+                                                       mode_lib->vba.RequiresFEC[i][k] = false;
+                                               }
+                                               mode_lib->vba.OutputBppPerState[i][k] =
+                                                               mode_lib->vba.Outbpp;
+                                       }
+                               }
+                       } else {
+                               mode_lib->vba.OutputBppPerState[i][k] = 0;
+                       }
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.DIOSupport[i] = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.OutputBppPerState[i][k] == 0
+                                       || (mode_lib->vba.OutputFormat[k] == dm_420
+                                                       && mode_lib->vba.ProgressiveToInterlaceUnitInOPP
+                                                                       == true)) {
+                               mode_lib->vba.DIOSupport[i] = false;
+                       }
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.DSCCLKRequiredMoreThanSupported[i] = false;
+                       if (mode_lib->vba.BlendingAndTiming[k] == k) {
+                               if ((mode_lib->vba.Output[k] == dm_dp
+                                               || mode_lib->vba.Output[k] == dm_edp)) {
+                                       if (mode_lib->vba.OutputFormat[k] == dm_420
+                                                       || mode_lib->vba.OutputFormat[k]
+                                                                       == dm_n422) {
+                                               mode_lib->vba.DSCFormatFactor = 2;
+                                       } else {
+                                               mode_lib->vba.DSCFormatFactor = 1;
+                                       }
+                                       if (mode_lib->vba.RequiresDSC[i][k] == true) {
+                                               if (mode_lib->vba.ODMCombineEnablePerState[i][k]
+                                                               == true) {
+                                                       if (mode_lib->vba.PixelClockBackEnd[k] / 6.0
+                                                                       / mode_lib->vba.DSCFormatFactor
+                                                                       > (1.0
+                                                                                       - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0)
+                                                                                       * mode_lib->vba.MaxDSCCLK[i]) {
+                                                               mode_lib->vba.DSCCLKRequiredMoreThanSupported[i] =
+                                                                               true;
+                                                       }
+                                               } else {
+                                                       if (mode_lib->vba.PixelClockBackEnd[k] / 3.0
+                                                                       / mode_lib->vba.DSCFormatFactor
+                                                                       > (1.0
+                                                                                       - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
+                                                                                                       / 100.0)
+                                                                                       * mode_lib->vba.MaxDSCCLK[i]) {
+                                                               mode_lib->vba.DSCCLKRequiredMoreThanSupported[i] =
+                                                                               true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.NotEnoughDSCUnits[i] = false;
+               mode_lib->vba.TotalDSCUnitsRequired = 0.0;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.RequiresDSC[i][k] == true) {
+                               if (mode_lib->vba.ODMCombineEnablePerState[i][k] == true) {
+                                       mode_lib->vba.TotalDSCUnitsRequired =
+                                                       mode_lib->vba.TotalDSCUnitsRequired + 2.0;
+                               } else {
+                                       mode_lib->vba.TotalDSCUnitsRequired =
+                                                       mode_lib->vba.TotalDSCUnitsRequired + 1.0;
+                               }
+                       }
+               }
+               if (mode_lib->vba.TotalDSCUnitsRequired > mode_lib->vba.NumberOfDSC) {
+                       mode_lib->vba.NotEnoughDSCUnits[i] = true;
+               }
+       }
+       /*DSC Delay per state*/
+
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.BlendingAndTiming[k] != k) {
+                               mode_lib->vba.slices = 0;
+                       } else if (mode_lib->vba.RequiresDSC[i][k] == 0
+                                       || mode_lib->vba.RequiresDSC[i][k] == false) {
+                               mode_lib->vba.slices = 0;
+                       } else if (mode_lib->vba.PixelClockBackEnd[k] > 3200.0) {
+                               mode_lib->vba.slices = dml_ceil(
+                                               mode_lib->vba.PixelClockBackEnd[k] / 400.0,
+                                               4.0);
+                       } else if (mode_lib->vba.PixelClockBackEnd[k] > 1360.0) {
+                               mode_lib->vba.slices = 8.0;
+                       } else if (mode_lib->vba.PixelClockBackEnd[k] > 680.0) {
+                               mode_lib->vba.slices = 4.0;
+                       } else if (mode_lib->vba.PixelClockBackEnd[k] > 340.0) {
+                               mode_lib->vba.slices = 2.0;
+                       } else {
+                               mode_lib->vba.slices = 1.0;
+                       }
+                       if (mode_lib->vba.OutputBppPerState[i][k] == 0
+                                       || mode_lib->vba.OutputBppPerState[i][k] == 0) {
+                               mode_lib->vba.bpp = 0.0;
+                       } else {
+                               mode_lib->vba.bpp = mode_lib->vba.OutputBppPerState[i][k];
+                       }
+                       if (mode_lib->vba.RequiresDSC[i][k] == true && mode_lib->vba.bpp != 0.0) {
+                               if (mode_lib->vba.ODMCombineEnablePerState[i][k] == false) {
+                                       mode_lib->vba.DSCDelayPerState[i][k] =
+                                                       dscceComputeDelay(
+                                                                       mode_lib->vba.DSCInputBitPerComponent[k],
+                                                                       mode_lib->vba.bpp,
+                                                                       dml_ceil(
+                                                                                       mode_lib->vba.HActive[k]
+                                                                                                       / mode_lib->vba.slices,
+                                                                                       1.0),
+                                                                       mode_lib->vba.slices,
+                                                                       mode_lib->vba.OutputFormat[k])
+                                                                       + dscComputeDelay(
+                                                                                       mode_lib->vba.OutputFormat[k]);
+                               } else {
+                                       mode_lib->vba.DSCDelayPerState[i][k] =
+                                                       2.0
+                                                                       * (dscceComputeDelay(
+                                                                                       mode_lib->vba.DSCInputBitPerComponent[k],
+                                                                                       mode_lib->vba.bpp,
+                                                                                       dml_ceil(
+                                                                                                       mode_lib->vba.HActive[k]
+                                                                                                                       / mode_lib->vba.slices,
+                                                                                                       1.0),
+                                                                                       mode_lib->vba.slices
+                                                                                                       / 2,
+                                                                                       mode_lib->vba.OutputFormat[k])
+                                                                                       + dscComputeDelay(
+                                                                                                       mode_lib->vba.OutputFormat[k]));
+                               }
+                               mode_lib->vba.DSCDelayPerState[i][k] =
+                                               mode_lib->vba.DSCDelayPerState[i][k]
+                                                               * mode_lib->vba.PixelClock[k]
+                                                               / mode_lib->vba.PixelClockBackEnd[k];
+                       } else {
+                               mode_lib->vba.DSCDelayPerState[i][k] = 0.0;
+                       }
+               }
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       for (j = 0; j <= mode_lib->vba.NumberOfActivePlanes - 1; j++) {
+                               if (mode_lib->vba.BlendingAndTiming[k] == j
+                                               && mode_lib->vba.RequiresDSC[i][j] == true) {
+                                       mode_lib->vba.DSCDelayPerState[i][k] =
+                                                       mode_lib->vba.DSCDelayPerState[i][j];
+                               }
+                       }
+               }
+       }
+       /*Urgent Latency Support Check*/
+
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+                       if (mode_lib->vba.ODMCombineEnablePerState[i][k] == true) {
+                               mode_lib->vba.SwathWidthYPerState[i][k] =
+                                               dml_min(
+                                                               mode_lib->vba.SwathWidthYSingleDPP[k],
+                                                               dml_round(
+                                                                               mode_lib->vba.HActive[k]
+                                                                                               / 2.0
+                                                                                               * mode_lib->vba.HRatio[k]));
+                       } else {
+                               mode_lib->vba.SwathWidthYPerState[i][k] =
+                                               mode_lib->vba.SwathWidthYSingleDPP[k]
+                                                               / mode_lib->vba.NoOfDPP[i][k];
+                       }
+                       mode_lib->vba.SwathWidthGranularityY = 256.0
+                                       / dml_ceil(mode_lib->vba.BytePerPixelInDETY[k], 1.0)
+                                       / mode_lib->vba.MaxSwathHeightY[k];
+                       mode_lib->vba.RoundedUpMaxSwathSizeBytesY = (dml_ceil(
+                                       mode_lib->vba.SwathWidthYPerState[i][k] - 1.0,
+                                       mode_lib->vba.SwathWidthGranularityY)
+                                       + mode_lib->vba.SwathWidthGranularityY)
+                                       * mode_lib->vba.BytePerPixelInDETY[k]
+                                       * mode_lib->vba.MaxSwathHeightY[k];
+                       if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
+                               mode_lib->vba.RoundedUpMaxSwathSizeBytesY = dml_ceil(
+                                               mode_lib->vba.RoundedUpMaxSwathSizeBytesY,
+                                               256.0) + 256;
+                       }
+                       if (mode_lib->vba.MaxSwathHeightC[k] > 0.0) {
+                               mode_lib->vba.SwathWidthGranularityC = 256.0
+                                               / dml_ceil(mode_lib->vba.BytePerPixelInDETC[k], 2.0)
+                                               / mode_lib->vba.MaxSwathHeightC[k];
+                               mode_lib->vba.RoundedUpMaxSwathSizeBytesC = (dml_ceil(
+                                               mode_lib->vba.SwathWidthYPerState[i][k] / 2.0 - 1.0,
+                                               mode_lib->vba.SwathWidthGranularityC)
+                                               + mode_lib->vba.SwathWidthGranularityC)
+                                               * mode_lib->vba.BytePerPixelInDETC[k]
+                                               * mode_lib->vba.MaxSwathHeightC[k];
+                               if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
+                                       mode_lib->vba.RoundedUpMaxSwathSizeBytesC = dml_ceil(
+                                                       mode_lib->vba.RoundedUpMaxSwathSizeBytesC,
+                                                       256.0) + 256;
+                               }
+                       } else {
+                               mode_lib->vba.RoundedUpMaxSwathSizeBytesC = 0.0;
+                       }
+                       if (mode_lib->vba.RoundedUpMaxSwathSizeBytesY
+                                       + mode_lib->vba.RoundedUpMaxSwathSizeBytesC
+                                       <= mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0) {
+                               mode_lib->vba.SwathHeightYPerState[i][k] =
+                                               mode_lib->vba.MaxSwathHeightY[k];
+                               mode_lib->vba.SwathHeightCPerState[i][k] =
+                                               mode_lib->vba.MaxSwathHeightC[k];
+                       } else {
+                               mode_lib->vba.SwathHeightYPerState[i][k] =
+                                               mode_lib->vba.MinSwathHeightY[k];
+                               mode_lib->vba.SwathHeightCPerState[i][k] =
+                                               mode_lib->vba.MinSwathHeightC[k];
+                       }
+                       if (mode_lib->vba.BytePerPixelInDETC[k] == 0.0) {
+                               mode_lib->vba.LinesInDETLuma = mode_lib->vba.DETBufferSizeInKByte
+                                               * 1024.0 / mode_lib->vba.BytePerPixelInDETY[k]
+                                               / mode_lib->vba.SwathWidthYPerState[i][k];
+                               mode_lib->vba.LinesInDETChroma = 0.0;
+                       } else if (mode_lib->vba.SwathHeightYPerState[i][k]
+                                       <= mode_lib->vba.SwathHeightCPerState[i][k]) {
+                               mode_lib->vba.LinesInDETLuma = mode_lib->vba.DETBufferSizeInKByte
+                                               * 1024.0 / 2.0 / mode_lib->vba.BytePerPixelInDETY[k]
+                                               / mode_lib->vba.SwathWidthYPerState[i][k];
+                               mode_lib->vba.LinesInDETChroma = mode_lib->vba.DETBufferSizeInKByte
+                                               * 1024.0 / 2.0 / mode_lib->vba.BytePerPixelInDETC[k]
+                                               / (mode_lib->vba.SwathWidthYPerState[i][k] / 2.0);
+                       } else {
+                               mode_lib->vba.LinesInDETLuma = mode_lib->vba.DETBufferSizeInKByte
+                                               * 1024.0 * 2.0 / 3.0
+                                               / mode_lib->vba.BytePerPixelInDETY[k]
+                                               / mode_lib->vba.SwathWidthYPerState[i][k];
+                               mode_lib->vba.LinesInDETChroma = mode_lib->vba.DETBufferSizeInKByte
+                                               * 1024.0 / 3.0 / mode_lib->vba.BytePerPixelInDETY[k]
+                                               / (mode_lib->vba.SwathWidthYPerState[i][k] / 2.0);
+                       }
+                       mode_lib->vba.EffectiveLBLatencyHidingSourceLinesLuma =
+                                       dml_min(
+                                                       mode_lib->vba.MaxLineBufferLines,
+                                                       dml_floor(
+                                                                       mode_lib->vba.LineBufferSize
+                                                                                       / mode_lib->vba.LBBitPerPixel[k]
+                                                                                       / (mode_lib->vba.SwathWidthYPerState[i][k]
+                                                                                                       / dml_max(
+                                                                                                                       mode_lib->vba.HRatio[k],
+                                                                                                                       1.0)),
+                                                                       1.0))
+                                                       - (mode_lib->vba.vtaps[k] - 1.0);
+                       mode_lib->vba.EffectiveLBLatencyHidingSourceLinesChroma =
+                                       dml_min(
+                                                       mode_lib->vba.MaxLineBufferLines,
+                                                       dml_floor(
+                                                                       mode_lib->vba.LineBufferSize
+                                                                                       / mode_lib->vba.LBBitPerPixel[k]
+                                                                                       / (mode_lib->vba.SwathWidthYPerState[i][k]
+                                                                                                       / 2.0
+                                                                                                       / dml_max(
+                                                                                                                       mode_lib->vba.HRatio[k]
+                                                                                                                                       / 2.0,
+                                                                                                                       1.0)),
+                                                                       1.0))
+                                                       - (mode_lib->vba.VTAPsChroma[k] - 1.0);
+                       mode_lib->vba.EffectiveDETLBLinesLuma =
+                                       dml_floor(
+                                                       mode_lib->vba.LinesInDETLuma
+                                                                       + dml_min(
+                                                                                       mode_lib->vba.LinesInDETLuma
+                                                                                                       * mode_lib->vba.RequiredDISPCLK[i]
+                                                                                                       * mode_lib->vba.BytePerPixelInDETY[k]
+                                                                                                       * mode_lib->vba.PSCL_FACTOR[k]
+                                                                                                       / mode_lib->vba.ReturnBWPerState[i],
+                                                                                       mode_lib->vba.EffectiveLBLatencyHidingSourceLinesLuma),
+                                                       mode_lib->vba.SwathHeightYPerState[i][k]);
+                       mode_lib->vba.EffectiveDETLBLinesChroma =
+                                       dml_floor(
+                                                       mode_lib->vba.LinesInDETChroma
+                                                                       + dml_min(
+                                                                                       mode_lib->vba.LinesInDETChroma
+                                                                                                       * mode_lib->vba.RequiredDISPCLK[i]
+                                                                                                       * mode_lib->vba.BytePerPixelInDETC[k]
+                                                                                                       * mode_lib->vba.PSCL_FACTOR_CHROMA[k]
+                                                                                                       / mode_lib->vba.ReturnBWPerState[i],
+                                                                                       mode_lib->vba.EffectiveLBLatencyHidingSourceLinesChroma),
+                                                       mode_lib->vba.SwathHeightCPerState[i][k]);
+                       if (mode_lib->vba.BytePerPixelInDETC[k] == 0.0) {
+                               mode_lib->vba.UrgentLatencySupportUsPerState[i][k] =
+                                               mode_lib->vba.EffectiveDETLBLinesLuma
+                                                               * (mode_lib->vba.HTotal[k]
+                                                                               / mode_lib->vba.PixelClock[k])
+                                                               / mode_lib->vba.VRatio[k]
+                                                               - mode_lib->vba.EffectiveDETLBLinesLuma
+                                                                               * mode_lib->vba.SwathWidthYPerState[i][k]
+                                                                               * dml_ceil(
+                                                                                               mode_lib->vba.BytePerPixelInDETY[k],
+                                                                                               1.0)
+                                                                               / (mode_lib->vba.ReturnBWPerState[i]
+                                                                                               / mode_lib->vba.NoOfDPP[i][k]);
+                       } else {
+                               mode_lib->vba.UrgentLatencySupportUsPerState[i][k] =
+                                               dml_min(
+                                                               mode_lib->vba.EffectiveDETLBLinesLuma
+                                                                               * (mode_lib->vba.HTotal[k]
+                                                                                               / mode_lib->vba.PixelClock[k])
+                                                                               / mode_lib->vba.VRatio[k]
+                                                                               - mode_lib->vba.EffectiveDETLBLinesLuma
+                                                                                               * mode_lib->vba.SwathWidthYPerState[i][k]
+                                                                                               * dml_ceil(
+                                                                                                               mode_lib->vba.BytePerPixelInDETY[k],
+                                                                                                               1.0)
+                                                                                               / (mode_lib->vba.ReturnBWPerState[i]
+                                                                                                               / mode_lib->vba.NoOfDPP[i][k]),
+                                                               mode_lib->vba.EffectiveDETLBLinesChroma
+                                                                               * (mode_lib->vba.HTotal[k]
+                                                                                               / mode_lib->vba.PixelClock[k])
+                                                                               / (mode_lib->vba.VRatio[k]
+                                                                                               / 2.0)
+                                                                               - mode_lib->vba.EffectiveDETLBLinesChroma
+                                                                                               * mode_lib->vba.SwathWidthYPerState[i][k]
+                                                                                               / 2.0
+                                                                                               * dml_ceil(
+                                                                                                               mode_lib->vba.BytePerPixelInDETC[k],
+                                                                                                               2.0)
+                                                                                               / (mode_lib->vba.ReturnBWPerState[i]
+                                                                                                               / mode_lib->vba.NoOfDPP[i][k]));
+                       }
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.UrgentLatencySupport[i] = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.UrgentLatencySupportUsPerState[i][k]
+                                       < mode_lib->vba.UrgentLatency / 1.0) {
+                               mode_lib->vba.UrgentLatencySupport[i] = false;
+                       }
+               }
+       }
+       /*Prefetch Check*/
+
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.TotalNumberOfDCCActiveDPP[i] = 0.0;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.DCCEnable[k] == true) {
+                               mode_lib->vba.TotalNumberOfDCCActiveDPP[i] =
+                                               mode_lib->vba.TotalNumberOfDCCActiveDPP[i]
+                                                               + mode_lib->vba.NoOfDPP[i][k];
+                       }
+               }
+       }
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.ProjectedDCFCLKDeepSleep = 8.0;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.ProjectedDCFCLKDeepSleep = dml_max(
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                       mode_lib->vba.PixelClock[k] / 16.0);
+                       if (mode_lib->vba.BytePerPixelInDETC[k] == 0.0) {
+                               if (mode_lib->vba.VRatio[k] <= 1.0) {
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep =
+                                                       dml_max(
+                                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                                       1.1
+                                                                                       * dml_ceil(
+                                                                                                       mode_lib->vba.BytePerPixelInDETY[k],
+                                                                                                       1.0)
+                                                                                       / 64.0
+                                                                                       * mode_lib->vba.HRatio[k]
+                                                                                       * mode_lib->vba.PixelClock[k]
+                                                                                       / mode_lib->vba.NoOfDPP[i][k]);
+                               } else {
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep =
+                                                       dml_max(
+                                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                                       1.1
+                                                                                       * dml_ceil(
+                                                                                                       mode_lib->vba.BytePerPixelInDETY[k],
+                                                                                                       1.0)
+                                                                                       / 64.0
+                                                                                       * mode_lib->vba.PSCL_FACTOR[k]
+                                                                                       * mode_lib->vba.RequiredDPPCLK[i][k]);
+                               }
+                       } else {
+                               if (mode_lib->vba.VRatio[k] <= 1.0) {
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep =
+                                                       dml_max(
+                                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                                       1.1
+                                                                                       * dml_ceil(
+                                                                                                       mode_lib->vba.BytePerPixelInDETY[k],
+                                                                                                       1.0)
+                                                                                       / 32.0
+                                                                                       * mode_lib->vba.HRatio[k]
+                                                                                       * mode_lib->vba.PixelClock[k]
+                                                                                       / mode_lib->vba.NoOfDPP[i][k]);
+                               } else {
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep =
+                                                       dml_max(
+                                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                                       1.1
+                                                                                       * dml_ceil(
+                                                                                                       mode_lib->vba.BytePerPixelInDETY[k],
+                                                                                                       1.0)
+                                                                                       / 32.0
+                                                                                       * mode_lib->vba.PSCL_FACTOR[k]
+                                                                                       * mode_lib->vba.RequiredDPPCLK[i][k]);
+                               }
+                               if (mode_lib->vba.VRatio[k] / 2.0 <= 1.0) {
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep =
+                                                       dml_max(
+                                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                                       1.1
+                                                                                       * dml_ceil(
+                                                                                                       mode_lib->vba.BytePerPixelInDETC[k],
+                                                                                                       2.0)
+                                                                                       / 32.0
+                                                                                       * mode_lib->vba.HRatio[k]
+                                                                                       / 2.0
+                                                                                       * mode_lib->vba.PixelClock[k]
+                                                                                       / mode_lib->vba.NoOfDPP[i][k]);
+                               } else {
+                                       mode_lib->vba.ProjectedDCFCLKDeepSleep =
+                                                       dml_max(
+                                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                                       1.1
+                                                                                       * dml_ceil(
+                                                                                                       mode_lib->vba.BytePerPixelInDETC[k],
+                                                                                                       2.0)
+                                                                                       / 32.0
+                                                                                       * mode_lib->vba.PSCL_FACTOR_CHROMA[k]
+                                                                                       * mode_lib->vba.RequiredDPPCLK[i][k]);
+                               }
+                       }
+               }
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.PDEAndMetaPTEBytesPerFrameY = CalculateVMAndRowBytes(
+                                       mode_lib,
+                                       mode_lib->vba.DCCEnable[k],
+                                       mode_lib->vba.Read256BlockHeightY[k],
+                                       mode_lib->vba.Read256BlockWidthY[k],
+                                       mode_lib->vba.SourcePixelFormat[k],
+                                       mode_lib->vba.SurfaceTiling[k],
+                                       dml_ceil(mode_lib->vba.BytePerPixelInDETY[k], 1.0),
+                                       mode_lib->vba.SourceScan[k],
+                                       mode_lib->vba.ViewportWidth[k],
+                                       mode_lib->vba.ViewportHeight[k],
+                                       mode_lib->vba.SwathWidthYPerState[i][k],
+                                       mode_lib->vba.VirtualMemoryEnable,
+                                       mode_lib->vba.VMMPageSize,
+                                       mode_lib->vba.PTEBufferSizeInRequests,
+                                       mode_lib->vba.PDEProcessingBufIn64KBReqs,
+                                       mode_lib->vba.PitchY[k],
+                                       mode_lib->vba.DCCMetaPitchY[k],
+                                       &mode_lib->vba.MacroTileWidthY[k],
+                                       &mode_lib->vba.MetaRowBytesY,
+                                       &mode_lib->vba.DPTEBytesPerRowY,
+                                       &mode_lib->vba.PTEBufferSizeNotExceededY[i][k],
+                                       &mode_lib->vba.dpte_row_height[k],
+                                       &mode_lib->vba.meta_row_height[k]);
+                       mode_lib->vba.PrefetchLinesY[k] = CalculatePrefetchSourceLines(
+                                       mode_lib,
+                                       mode_lib->vba.VRatio[k],
+                                       mode_lib->vba.vtaps[k],
+                                       mode_lib->vba.Interlace[k],
+                                       mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
+                                       mode_lib->vba.SwathHeightYPerState[i][k],
+                                       mode_lib->vba.ViewportYStartY[k],
+                                       &mode_lib->vba.PrefillY[k],
+                                       &mode_lib->vba.MaxNumSwY[k]);
+                       if ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64
+                                       && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
+                                       && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
+                                       && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
+                                       && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8)) {
+                               mode_lib->vba.PDEAndMetaPTEBytesPerFrameC = CalculateVMAndRowBytes(
+                                               mode_lib,
+                                               mode_lib->vba.DCCEnable[k],
+                                               mode_lib->vba.Read256BlockHeightY[k],
+                                               mode_lib->vba.Read256BlockWidthY[k],
+                                               mode_lib->vba.SourcePixelFormat[k],
+                                               mode_lib->vba.SurfaceTiling[k],
+                                               dml_ceil(mode_lib->vba.BytePerPixelInDETC[k], 2.0),
+                                               mode_lib->vba.SourceScan[k],
+                                               mode_lib->vba.ViewportWidth[k] / 2.0,
+                                               mode_lib->vba.ViewportHeight[k] / 2.0,
+                                               mode_lib->vba.SwathWidthYPerState[i][k] / 2.0,
+                                               mode_lib->vba.VirtualMemoryEnable,
+                                               mode_lib->vba.VMMPageSize,
+                                               mode_lib->vba.PTEBufferSizeInRequests,
+                                               mode_lib->vba.PDEProcessingBufIn64KBReqs,
+                                               mode_lib->vba.PitchC[k],
+                                               0.0,
+                                               &mode_lib->vba.MacroTileWidthC[k],
+                                               &mode_lib->vba.MetaRowBytesC,
+                                               &mode_lib->vba.DPTEBytesPerRowC,
+                                               &mode_lib->vba.PTEBufferSizeNotExceededC[i][k],
+                                               &mode_lib->vba.dpte_row_height_chroma[k],
+                                               &mode_lib->vba.meta_row_height_chroma[k]);
+                               mode_lib->vba.PrefetchLinesC[k] = CalculatePrefetchSourceLines(
+                                               mode_lib,
+                                               mode_lib->vba.VRatio[k] / 2.0,
+                                               mode_lib->vba.VTAPsChroma[k],
+                                               mode_lib->vba.Interlace[k],
+                                               mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
+                                               mode_lib->vba.SwathHeightCPerState[i][k],
+                                               mode_lib->vba.ViewportYStartC[k],
+                                               &mode_lib->vba.PrefillC[k],
+                                               &mode_lib->vba.MaxNumSwC[k]);
+                       } else {
+                               mode_lib->vba.PDEAndMetaPTEBytesPerFrameC = 0.0;
+                               mode_lib->vba.MetaRowBytesC = 0.0;
+                               mode_lib->vba.DPTEBytesPerRowC = 0.0;
+                               mode_lib->vba.PrefetchLinesC[k] = 0.0;
+                               mode_lib->vba.PTEBufferSizeNotExceededC[i][k] = true;
+                       }
+                       mode_lib->vba.PDEAndMetaPTEBytesPerFrame[k] =
+                                       mode_lib->vba.PDEAndMetaPTEBytesPerFrameY
+                                                       + mode_lib->vba.PDEAndMetaPTEBytesPerFrameC;
+                       mode_lib->vba.MetaRowBytes[k] = mode_lib->vba.MetaRowBytesY
+                                       + mode_lib->vba.MetaRowBytesC;
+                       mode_lib->vba.DPTEBytesPerRow[k] = mode_lib->vba.DPTEBytesPerRowY
+                                       + mode_lib->vba.DPTEBytesPerRowC;
+               }
+               mode_lib->vba.ExtraLatency =
+                               mode_lib->vba.UrgentRoundTripAndOutOfOrderLatencyPerState[i]
+                                               + (mode_lib->vba.TotalNumberOfActiveDPP[i]
+                                                               * mode_lib->vba.PixelChunkSizeInKByte
+                                                               + mode_lib->vba.TotalNumberOfDCCActiveDPP[i]
+                                                                               * mode_lib->vba.MetaChunkSize)
+                                                               * 1024.0
+                                                               / mode_lib->vba.ReturnBWPerState[i];
+               if (mode_lib->vba.VirtualMemoryEnable == true) {
+                       mode_lib->vba.ExtraLatency = mode_lib->vba.ExtraLatency
+                                       + mode_lib->vba.TotalNumberOfActiveDPP[i]
+                                                       * mode_lib->vba.PTEChunkSize * 1024.0
+                                                       / mode_lib->vba.ReturnBWPerState[i];
+               }
+               mode_lib->vba.TimeCalc = 24.0 / mode_lib->vba.ProjectedDCFCLKDeepSleep;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.BlendingAndTiming[k] == k) {
+                               if (mode_lib->vba.WritebackEnable[k] == true) {
+                                       mode_lib->vba.WritebackDelay[i][k] =
+                                                       mode_lib->vba.WritebackLatency
+                                                                       + CalculateWriteBackDelay(
+                                                                                       mode_lib->vba.WritebackPixelFormat[k],
+                                                                                       mode_lib->vba.WritebackHRatio[k],
+                                                                                       mode_lib->vba.WritebackVRatio[k],
+                                                                                       mode_lib->vba.WritebackLumaHTaps[k],
+                                                                                       mode_lib->vba.WritebackLumaVTaps[k],
+                                                                                       mode_lib->vba.WritebackChromaHTaps[k],
+                                                                                       mode_lib->vba.WritebackChromaVTaps[k],
+                                                                                       mode_lib->vba.WritebackDestinationWidth[k])
+                                                                                       / mode_lib->vba.RequiredDISPCLK[i];
+                               } else {
+                                       mode_lib->vba.WritebackDelay[i][k] = 0.0;
+                               }
+                               for (j = 0; j <= mode_lib->vba.NumberOfActivePlanes - 1; j++) {
+                                       if (mode_lib->vba.BlendingAndTiming[j] == k
+                                                       && mode_lib->vba.WritebackEnable[j]
+                                                                       == true) {
+                                               mode_lib->vba.WritebackDelay[i][k] =
+                                                               dml_max(
+                                                                               mode_lib->vba.WritebackDelay[i][k],
+                                                                               mode_lib->vba.WritebackLatency
+                                                                                               + CalculateWriteBackDelay(
+                                                                                                               mode_lib->vba.WritebackPixelFormat[j],
+                                                                                                               mode_lib->vba.WritebackHRatio[j],
+                                                                                                               mode_lib->vba.WritebackVRatio[j],
+                                                                                                               mode_lib->vba.WritebackLumaHTaps[j],
+                                                                                                               mode_lib->vba.WritebackLumaVTaps[j],
+                                                                                                               mode_lib->vba.WritebackChromaHTaps[j],
+                                                                                                               mode_lib->vba.WritebackChromaVTaps[j],
+                                                                                                               mode_lib->vba.WritebackDestinationWidth[j])
+                                                                                                               / mode_lib->vba.RequiredDISPCLK[i]);
+                                       }
+                               }
+                       }
+               }
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       for (j = 0; j <= mode_lib->vba.NumberOfActivePlanes - 1; j++) {
+                               if (mode_lib->vba.BlendingAndTiming[k] == j) {
+                                       mode_lib->vba.WritebackDelay[i][k] =
+                                                       mode_lib->vba.WritebackDelay[i][j];
+                               }
+                       }
+               }
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.MaximumVStartup[k] =
+                                       mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k]
+                                                       - dml_max(
+                                                                       1.0,
+                                                                       dml_ceil(
+                                                                                       mode_lib->vba.WritebackDelay[i][k]
+                                                                                                       / (mode_lib->vba.HTotal[k]
+                                                                                                                       / mode_lib->vba.PixelClock[k]),
+                                                                                       1.0));
+               }
+               mode_lib->vba.TWait = CalculateTWait(
+                               mode_lib->vba.PrefetchMode,
+                               mode_lib->vba.DRAMClockChangeLatency,
+                               mode_lib->vba.UrgentLatency,
+                               mode_lib->vba.SREnterPlusExitTime);
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.XFCEnabled[k] == true) {
+                               mode_lib->vba.XFCRemoteSurfaceFlipDelay =
+                                               CalculateRemoteSurfaceFlipDelay(
+                                                               mode_lib,
+                                                               mode_lib->vba.VRatio[k],
+                                                               mode_lib->vba.SwathWidthYPerState[i][k],
+                                                               dml_ceil(
+                                                                               mode_lib->vba.BytePerPixelInDETY[k],
+                                                                               1.0),
+                                                               mode_lib->vba.HTotal[k]
+                                                                               / mode_lib->vba.PixelClock[k],
+                                                               mode_lib->vba.XFCTSlvVupdateOffset,
+                                                               mode_lib->vba.XFCTSlvVupdateWidth,
+                                                               mode_lib->vba.XFCTSlvVreadyOffset,
+                                                               mode_lib->vba.XFCXBUFLatencyTolerance,
+                                                               mode_lib->vba.XFCFillBWOverhead,
+                                                               mode_lib->vba.XFCSlvChunkSize,
+                                                               mode_lib->vba.XFCBusTransportTime,
+                                                               mode_lib->vba.TimeCalc,
+                                                               mode_lib->vba.TWait,
+                                                               &mode_lib->vba.SrcActiveDrainRate,
+                                                               &mode_lib->vba.TInitXFill,
+                                                               &mode_lib->vba.TslvChk);
+                       } else {
+                               mode_lib->vba.XFCRemoteSurfaceFlipDelay = 0.0;
+                       }
+                       mode_lib->vba.IsErrorResult[i][k] =
+                                       CalculatePrefetchSchedule(
+                                                       mode_lib,
+                                                       mode_lib->vba.RequiredDPPCLK[i][k],
+                                                       mode_lib->vba.RequiredDISPCLK[i],
+                                                       mode_lib->vba.PixelClock[k],
+                                                       mode_lib->vba.ProjectedDCFCLKDeepSleep,
+                                                       mode_lib->vba.DSCDelayPerState[i][k],
+                                                       mode_lib->vba.NoOfDPP[i][k],
+                                                       mode_lib->vba.ScalerEnabled[k],
+                                                       mode_lib->vba.NumberOfCursors[k],
+                                                       mode_lib->vba.DPPCLKDelaySubtotal,
+                                                       mode_lib->vba.DPPCLKDelaySCL,
+                                                       mode_lib->vba.DPPCLKDelaySCLLBOnly,
+                                                       mode_lib->vba.DPPCLKDelayCNVCFormater,
+                                                       mode_lib->vba.DPPCLKDelayCNVCCursor,
+                                                       mode_lib->vba.DISPCLKDelaySubtotal,
+                                                       mode_lib->vba.SwathWidthYPerState[i][k]
+                                                                       / mode_lib->vba.HRatio[k],
+                                                       mode_lib->vba.OutputFormat[k],
+                                                       mode_lib->vba.VTotal[k]
+                                                                       - mode_lib->vba.VActive[k],
+                                                       mode_lib->vba.HTotal[k],
+                                                       mode_lib->vba.MaxInterDCNTileRepeaters,
+                                                       mode_lib->vba.MaximumVStartup[k],
+                                                       mode_lib->vba.MaxPageTableLevels,
+                                                       mode_lib->vba.VirtualMemoryEnable,
+                                                       mode_lib->vba.DynamicMetadataEnable[k],
+                                                       mode_lib->vba.DynamicMetadataLinesBeforeActiveRequired[k],
+                                                       mode_lib->vba.DynamicMetadataTransmittedBytes[k],
+                                                       mode_lib->vba.DCCEnable[k],
+                                                       mode_lib->vba.UrgentLatency,
+                                                       mode_lib->vba.ExtraLatency,
+                                                       mode_lib->vba.TimeCalc,
+                                                       mode_lib->vba.PDEAndMetaPTEBytesPerFrame[k],
+                                                       mode_lib->vba.MetaRowBytes[k],
+                                                       mode_lib->vba.DPTEBytesPerRow[k],
+                                                       mode_lib->vba.PrefetchLinesY[k],
+                                                       mode_lib->vba.SwathWidthYPerState[i][k],
+                                                       mode_lib->vba.BytePerPixelInDETY[k],
+                                                       mode_lib->vba.PrefillY[k],
+                                                       mode_lib->vba.MaxNumSwY[k],
+                                                       mode_lib->vba.PrefetchLinesC[k],
+                                                       mode_lib->vba.BytePerPixelInDETC[k],
+                                                       mode_lib->vba.PrefillC[k],
+                                                       mode_lib->vba.MaxNumSwC[k],
+                                                       mode_lib->vba.SwathHeightYPerState[i][k],
+                                                       mode_lib->vba.SwathHeightCPerState[i][k],
+                                                       mode_lib->vba.TWait,
+                                                       mode_lib->vba.XFCEnabled[k],
+                                                       mode_lib->vba.XFCRemoteSurfaceFlipDelay,
+                                                       mode_lib->vba.Interlace[k],
+                                                       mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
+                                                       mode_lib->vba.DSTXAfterScaler,
+                                                       mode_lib->vba.DSTYAfterScaler,
+                                                       &mode_lib->vba.LineTimesForPrefetch[k],
+                                                       &mode_lib->vba.PrefetchBW[k],
+                                                       &mode_lib->vba.LinesForMetaPTE[k],
+                                                       &mode_lib->vba.LinesForMetaAndDPTERow[k],
+                                                       &mode_lib->vba.VRatioPreY[i][k],
+                                                       &mode_lib->vba.VRatioPreC[i][k],
+                                                       &mode_lib->vba.RequiredPrefetchPixelDataBW[i][k],
+                                                       &mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata,
+                                                       &mode_lib->vba.Tno_bw[k]);
+               }
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       mode_lib->vba.cursor_bw[k] = mode_lib->vba.NumberOfCursors[k]
+                                       * mode_lib->vba.CursorWidth[k][0]
+                                       * mode_lib->vba.CursorBPP[k][0] / 8.0
+                                       / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
+                                       * mode_lib->vba.VRatio[k];
+               }
+               mode_lib->vba.MaximumReadBandwidthWithPrefetch = 0.0;
+               mode_lib->vba.prefetch_vm_bw_valid = true;
+               mode_lib->vba.prefetch_row_bw_valid = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.PDEAndMetaPTEBytesPerFrame[k] == 0.0) {
+                               mode_lib->vba.prefetch_vm_bw[k] = 0.0;
+                       } else if (mode_lib->vba.LinesForMetaPTE[k] > 0.0) {
+                               mode_lib->vba.prefetch_vm_bw[k] =
+                                               mode_lib->vba.PDEAndMetaPTEBytesPerFrame[k]
+                                                               / (mode_lib->vba.LinesForMetaPTE[k]
+                                                                               * mode_lib->vba.HTotal[k]
+                                                                               / mode_lib->vba.PixelClock[k]);
+                       } else {
+                               mode_lib->vba.prefetch_vm_bw[k] = 0.0;
+                               mode_lib->vba.prefetch_vm_bw_valid = false;
+                       }
+                       if (mode_lib->vba.MetaRowBytes[k] + mode_lib->vba.DPTEBytesPerRow[k]
+                                       == 0.0) {
+                               mode_lib->vba.prefetch_row_bw[k] = 0.0;
+                       } else if (mode_lib->vba.LinesForMetaAndDPTERow[k] > 0.0) {
+                               mode_lib->vba.prefetch_row_bw[k] = (mode_lib->vba.MetaRowBytes[k]
+                                               + mode_lib->vba.DPTEBytesPerRow[k])
+                                               / (mode_lib->vba.LinesForMetaAndDPTERow[k]
+                                                               * mode_lib->vba.HTotal[k]
+                                                               / mode_lib->vba.PixelClock[k]);
+                       } else {
+                               mode_lib->vba.prefetch_row_bw[k] = 0.0;
+                               mode_lib->vba.prefetch_row_bw_valid = false;
+                       }
+                       mode_lib->vba.MaximumReadBandwidthWithPrefetch =
+                                       mode_lib->vba.MaximumReadBandwidthWithPrefetch
+                                                       + mode_lib->vba.cursor_bw[k]
+                                                       + dml_max4(
+                                                                       mode_lib->vba.prefetch_vm_bw[k],
+                                                                       mode_lib->vba.prefetch_row_bw[k],
+                                                                       mode_lib->vba.ReadBandwidth[k],
+                                                                       mode_lib->vba.RequiredPrefetchPixelDataBW[i][k]);
+               }
+               mode_lib->vba.PrefetchSupported[i] = true;
+               if (mode_lib->vba.MaximumReadBandwidthWithPrefetch
+                               > mode_lib->vba.ReturnBWPerState[i]
+                               || mode_lib->vba.prefetch_vm_bw_valid == false
+                               || mode_lib->vba.prefetch_row_bw_valid == false) {
+                       mode_lib->vba.PrefetchSupported[i] = false;
+               }
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.LineTimesForPrefetch[k] < 2.0
+                                       || mode_lib->vba.LinesForMetaPTE[k] >= 8.0
+                                       || mode_lib->vba.LinesForMetaAndDPTERow[k] >= 16.0
+                                       || mode_lib->vba.IsErrorResult[i][k] == true) {
+                               mode_lib->vba.PrefetchSupported[i] = false;
+                       }
+               }
+               mode_lib->vba.VRatioInPrefetchSupported[i] = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.VRatioPreY[i][k] > 4.0
+                                       || mode_lib->vba.VRatioPreC[i][k] > 4.0
+                                       || mode_lib->vba.IsErrorResult[i][k] == true) {
+                               mode_lib->vba.VRatioInPrefetchSupported[i] = false;
+                       }
+               }
+               if (mode_lib->vba.PrefetchSupported[i] == true
+                               && mode_lib->vba.VRatioInPrefetchSupported[i] == true) {
+                       mode_lib->vba.BandwidthAvailableForImmediateFlip =
+                                       mode_lib->vba.ReturnBWPerState[i];
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.BandwidthAvailableForImmediateFlip =
+                                               mode_lib->vba.BandwidthAvailableForImmediateFlip
+                                                               - mode_lib->vba.cursor_bw[k]
+                                                               - dml_max(
+                                                                               mode_lib->vba.ReadBandwidth[k],
+                                                                               mode_lib->vba.PrefetchBW[k]);
+                       }
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.ImmediateFlipBytes[k] = 0.0;
+                               if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
+                                       mode_lib->vba.ImmediateFlipBytes[k] =
+                                                       mode_lib->vba.PDEAndMetaPTEBytesPerFrame[k]
+                                                                       + mode_lib->vba.MetaRowBytes[k]
+                                                                       + mode_lib->vba.DPTEBytesPerRow[k];
+                               }
+                       }
+                       mode_lib->vba.TotImmediateFlipBytes = 0.0;
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8
+                                               && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
+                                       mode_lib->vba.TotImmediateFlipBytes =
+                                                       mode_lib->vba.TotImmediateFlipBytes
+                                                                       + mode_lib->vba.ImmediateFlipBytes[k];
+                               }
+                       }
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               CalculateFlipSchedule(
+                                               mode_lib,
+                                               mode_lib->vba.ExtraLatency,
+                                               mode_lib->vba.UrgentLatency,
+                                               mode_lib->vba.MaxPageTableLevels,
+                                               mode_lib->vba.VirtualMemoryEnable,
+                                               mode_lib->vba.BandwidthAvailableForImmediateFlip,
+                                               mode_lib->vba.TotImmediateFlipBytes,
+                                               mode_lib->vba.SourcePixelFormat[k],
+                                               mode_lib->vba.ImmediateFlipBytes[k],
+                                               mode_lib->vba.HTotal[k]
+                                                               / mode_lib->vba.PixelClock[k],
+                                               mode_lib->vba.VRatio[k],
+                                               mode_lib->vba.Tno_bw[k],
+                                               mode_lib->vba.PDEAndMetaPTEBytesPerFrame[k],
+                                               mode_lib->vba.MetaRowBytes[k],
+                                               mode_lib->vba.DPTEBytesPerRow[k],
+                                               mode_lib->vba.DCCEnable[k],
+                                               mode_lib->vba.dpte_row_height[k],
+                                               mode_lib->vba.meta_row_height[k],
+                                               mode_lib->vba.qual_row_bw[k],
+                                               &mode_lib->vba.DestinationLinesToRequestVMInImmediateFlip[k],
+                                               &mode_lib->vba.DestinationLinesToRequestRowInImmediateFlip[k],
+                                               &mode_lib->vba.final_flip_bw[k],
+                                               &mode_lib->vba.ImmediateFlipSupportedForPipe[k]);
+                       }
+                       mode_lib->vba.total_dcn_read_bw_with_flip = 0.0;
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               mode_lib->vba.total_dcn_read_bw_with_flip =
+                                               mode_lib->vba.total_dcn_read_bw_with_flip
+                                                               + mode_lib->vba.cursor_bw[k]
+                                                               + dml_max3(
+                                                                               mode_lib->vba.prefetch_vm_bw[k],
+                                                                               mode_lib->vba.prefetch_row_bw[k],
+                                                                               mode_lib->vba.final_flip_bw[k]
+                                                                                               + dml_max(
+                                                                                                               mode_lib->vba.ReadBandwidth[k],
+                                                                                                               mode_lib->vba.RequiredPrefetchPixelDataBW[i][k]));
+                       }
+                       mode_lib->vba.ImmediateFlipSupportedForState[i] = true;
+                       if (mode_lib->vba.total_dcn_read_bw_with_flip
+                                       > mode_lib->vba.ReturnBWPerState[i]) {
+                               mode_lib->vba.ImmediateFlipSupportedForState[i] = false;
+                       }
+                       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                               if (mode_lib->vba.ImmediateFlipSupportedForPipe[k] == false) {
+                                       mode_lib->vba.ImmediateFlipSupportedForState[i] = false;
+                               }
+                       }
+               } else {
+                       mode_lib->vba.ImmediateFlipSupportedForState[i] = false;
+               }
+       }
+       /*PTE Buffer Size Check*/
+
+       for (i = 0; i <= DC__VOLTAGE_STATES; i++) {
+               mode_lib->vba.PTEBufferSizeNotExceeded[i] = true;
+               for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+                       if (mode_lib->vba.PTEBufferSizeNotExceededY[i][k] == false
+                                       || mode_lib->vba.PTEBufferSizeNotExceededC[i][k] == false) {
+                               mode_lib->vba.PTEBufferSizeNotExceeded[i] = false;
+                       }
+               }
+       }
+       /*Cursor Support Check*/
+
+       mode_lib->vba.CursorSupport = true;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.CursorWidth[k][0] > 0.0) {
+                       if (dml_floor(
+                                       dml_floor(
+                                                       mode_lib->vba.CursorBufferSize
+                                                                       - mode_lib->vba.CursorChunkSize,
+                                                       mode_lib->vba.CursorChunkSize) * 1024.0
+                                                       / (mode_lib->vba.CursorWidth[k][0]
+                                                                       * mode_lib->vba.CursorBPP[k][0]
+                                                                       / 8.0),
+                                       1.0)
+                                       * (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
+                                       / mode_lib->vba.VRatio[k] < mode_lib->vba.UrgentLatency
+                                       || (mode_lib->vba.CursorBPP[k][0] == 64.0
+                                                       && mode_lib->vba.Cursor64BppSupport == false)) {
+                               mode_lib->vba.CursorSupport = false;
+                       }
+               }
+       }
+       /*Valid Pitch Check*/
+
+       mode_lib->vba.PitchSupport = true;
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               mode_lib->vba.AlignedYPitch[k] = dml_ceil(
+                               dml_max(mode_lib->vba.PitchY[k], mode_lib->vba.ViewportWidth[k]),
+                               mode_lib->vba.MacroTileWidthY[k]);
+               if (mode_lib->vba.AlignedYPitch[k] > mode_lib->vba.PitchY[k]) {
+                       mode_lib->vba.PitchSupport = false;
+               }
+               if (mode_lib->vba.DCCEnable[k] == true) {
+                       mode_lib->vba.AlignedDCCMetaPitch[k] = dml_ceil(
+                                       dml_max(
+                                                       mode_lib->vba.DCCMetaPitchY[k],
+                                                       mode_lib->vba.ViewportWidth[k]),
+                                       64.0 * mode_lib->vba.Read256BlockWidthY[k]);
+               } else {
+                       mode_lib->vba.AlignedDCCMetaPitch[k] = mode_lib->vba.DCCMetaPitchY[k];
+               }
+               if (mode_lib->vba.AlignedDCCMetaPitch[k] > mode_lib->vba.DCCMetaPitchY[k]) {
+                       mode_lib->vba.PitchSupport = false;
+               }
+               if (mode_lib->vba.SourcePixelFormat[k] != dm_444_64
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
+                               && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8) {
+                       mode_lib->vba.AlignedCPitch[k] = dml_ceil(
+                                       dml_max(
+                                                       mode_lib->vba.PitchC[k],
+                                                       mode_lib->vba.ViewportWidth[k] / 2.0),
+                                       mode_lib->vba.MacroTileWidthC[k]);
+               } else {
+                       mode_lib->vba.AlignedCPitch[k] = mode_lib->vba.PitchC[k];
+               }
+               if (mode_lib->vba.AlignedCPitch[k] > mode_lib->vba.PitchC[k]) {
+                       mode_lib->vba.PitchSupport = false;
+               }
+       }
+       /*Mode Support, Voltage State and SOC Configuration*/
+
+       for (i = DC__VOLTAGE_STATES; i >= 0; i--) {
+               if (mode_lib->vba.ScaleRatioAndTapsSupport == true
+                               && mode_lib->vba.SourceFormatPixelAndScanSupport == true
+                               && mode_lib->vba.ViewportSizeSupport[i] == true
+                               && mode_lib->vba.BandwidthSupport[i] == true
+                               && mode_lib->vba.DIOSupport[i] == true
+                               && mode_lib->vba.NotEnoughDSCUnits[i] == false
+                               && mode_lib->vba.DSCCLKRequiredMoreThanSupported[i] == false
+                               && mode_lib->vba.UrgentLatencySupport[i] == true
+                               && mode_lib->vba.ROBSupport[i] == true
+                               && mode_lib->vba.DISPCLK_DPPCLK_Support[i] == true
+                               && mode_lib->vba.TotalAvailablePipesSupport[i] == true
+                               && mode_lib->vba.NumberOfOTGSupport == true
+                               && mode_lib->vba.WritebackModeSupport == true
+                               && mode_lib->vba.WritebackLatencySupport == true
+                               && mode_lib->vba.WritebackScaleRatioAndTapsSupport == true
+                               && mode_lib->vba.CursorSupport == true
+                               && mode_lib->vba.PitchSupport == true
+                               && mode_lib->vba.PrefetchSupported[i] == true
+                               && mode_lib->vba.VRatioInPrefetchSupported[i] == true
+                               && mode_lib->vba.PTEBufferSizeNotExceeded[i] == true
+                               && mode_lib->vba.NonsupportedDSCInputBPC == false) {
+                       mode_lib->vba.ModeSupport[i] = true;
+               } else {
+                       mode_lib->vba.ModeSupport[i] = false;
+               }
+       }
+       for (i = DC__VOLTAGE_STATES; i >= 0; i--) {
+               if (i == DC__VOLTAGE_STATES || mode_lib->vba.ModeSupport[i] == true) {
+                       mode_lib->vba.VoltageLevel = i;
+               }
+       }
+       mode_lib->vba.DCFCLK = mode_lib->vba.DCFCLKPerState[mode_lib->vba.VoltageLevel];
+       mode_lib->vba.DRAMSpeed = mode_lib->vba.DRAMSpeedPerState[mode_lib->vba.VoltageLevel];
+       mode_lib->vba.FabricClock = mode_lib->vba.FabricClockPerState[mode_lib->vba.VoltageLevel];
+       mode_lib->vba.SOCCLK = mode_lib->vba.SOCCLKPerState[mode_lib->vba.VoltageLevel];
+       mode_lib->vba.FabricAndDRAMBandwidth =
+                       mode_lib->vba.FabricAndDRAMBandwidthPerState[mode_lib->vba.VoltageLevel];
+       mode_lib->vba.ImmediateFlipSupport =
+                       mode_lib->vba.ImmediateFlipSupportedForState[mode_lib->vba.VoltageLevel];
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               mode_lib->vba.DPPPerPlane[k] = mode_lib->vba.NoOfDPP[mode_lib->vba.VoltageLevel][k];
+       }
+       for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
+               if (mode_lib->vba.BlendingAndTiming[k] == k) {
+                       mode_lib->vba.ODMCombineEnabled[k] =
+                                       mode_lib->vba.ODMCombineEnablePerState[mode_lib->vba.VoltageLevel][k];
+               } else {
+                       mode_lib->vba.ODMCombineEnabled[k] = 0;
+               }
+               mode_lib->vba.DSCEnabled[k] =
+                               mode_lib->vba.RequiresDSC[mode_lib->vba.VoltageLevel][k];
+               mode_lib->vba.OutputBpp[k] =
+                               mode_lib->vba.OutputBppPerState[mode_lib->vba.VoltageLevel][k];
+       }
+}
index a24fe9a0383db938e3e8d1d97a8ac745436964fb..346ffea843c99d419da5be6a35b73e06eb4874f3 100644 (file)
@@ -79,6 +79,11 @@ double get_total_prefetch_bw(
                const display_e2e_pipe_params_st *pipes,
                unsigned int num_pipes);
 
+unsigned int dml_get_voltage_level(
+               struct display_mode_lib *mode_lib,
+               const display_e2e_pipe_params_st *pipes,
+               unsigned int num_pipes);
+
 bool Calculate256BBlockSizes(
                enum source_format_class SourcePixelFormat,
                enum dm_swizzle_mode SurfaceTiling,
@@ -96,42 +101,41 @@ struct vba_vars_st {
        mode_evaluation_st me;
 
        unsigned int MaximumMaxVStartupLines;
-       double cursor_bw[DC__NUM_PIPES__MAX];
-       double meta_row_bw[DC__NUM_PIPES__MAX];
-       double dpte_row_bw[DC__NUM_PIPES__MAX];
-       double qual_row_bw[DC__NUM_PIPES__MAX];
+       double cursor_bw[DC__NUM_DPP__MAX];
+       double meta_row_bw[DC__NUM_DPP__MAX];
+       double dpte_row_bw[DC__NUM_DPP__MAX];
+       double qual_row_bw[DC__NUM_DPP__MAX];
        double WritebackDISPCLK;
-       double PSCL_THROUGHPUT_LUMA[DC__NUM_PIPES__MAX];
-       double PSCL_THROUGHPUT_CHROMA[DC__NUM_PIPES__MAX];
+       double PSCL_THROUGHPUT_LUMA[DC__NUM_DPP__MAX];
+       double PSCL_THROUGHPUT_CHROMA[DC__NUM_DPP__MAX];
        double DPPCLKUsingSingleDPPLuma;
        double DPPCLKUsingSingleDPPChroma;
-       double DPPCLKUsingSingleDPP[DC__NUM_PIPES__MAX];
+       double DPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
        double DISPCLKWithRamping;
        double DISPCLKWithoutRamping;
        double GlobalDPPCLK;
-       double MaxDispclk;
        double DISPCLKWithRampingRoundedToDFSGranularity;
        double DISPCLKWithoutRampingRoundedToDFSGranularity;
        double MaxDispclkRoundedToDFSGranularity;
        bool DCCEnabledAnyPlane;
        double ReturnBandwidthToDCN;
-       unsigned int SwathWidthY[DC__NUM_PIPES__MAX];
-       unsigned int SwathWidthSingleDPPY[DC__NUM_PIPES__MAX];
-       double BytePerPixelDETY[DC__NUM_PIPES__MAX];
-       double BytePerPixelDETC[DC__NUM_PIPES__MAX];
-       double ReadBandwidthPlaneLuma[DC__NUM_PIPES__MAX];
-       double ReadBandwidthPlaneChroma[DC__NUM_PIPES__MAX];
+       unsigned int SwathWidthY[DC__NUM_DPP__MAX];
+       unsigned int SwathWidthSingleDPPY[DC__NUM_DPP__MAX];
+       double BytePerPixelDETY[DC__NUM_DPP__MAX];
+       double BytePerPixelDETC[DC__NUM_DPP__MAX];
+       double ReadBandwidthPlaneLuma[DC__NUM_DPP__MAX];
+       double ReadBandwidthPlaneChroma[DC__NUM_DPP__MAX];
        unsigned int TotalActiveDPP;
        unsigned int TotalDCCActiveDPP;
        double UrgentRoundTripAndOutOfOrderLatency;
-       double DisplayPipeLineDeliveryTimeLuma[DC__NUM_PIPES__MAX];                     // WM
-       double DisplayPipeLineDeliveryTimeChroma[DC__NUM_PIPES__MAX];                     // WM
-       double LinesInDETY[DC__NUM_PIPES__MAX];                     // WM
-       double LinesInDETC[DC__NUM_PIPES__MAX];                     // WM
-       unsigned int LinesInDETYRoundedDownToSwath[DC__NUM_PIPES__MAX];                     // WM
-       unsigned int LinesInDETCRoundedDownToSwath[DC__NUM_PIPES__MAX];                     // WM
-       double FullDETBufferingTimeY[DC__NUM_PIPES__MAX];                     // WM
-       double FullDETBufferingTimeC[DC__NUM_PIPES__MAX];                     // WM
+       double DisplayPipeLineDeliveryTimeLuma[DC__NUM_DPP__MAX];                     // WM
+       double DisplayPipeLineDeliveryTimeChroma[DC__NUM_DPP__MAX];                     // WM
+       double LinesInDETY[DC__NUM_DPP__MAX];                     // WM
+       double LinesInDETC[DC__NUM_DPP__MAX];                     // WM
+       unsigned int LinesInDETYRoundedDownToSwath[DC__NUM_DPP__MAX];                     // WM
+       unsigned int LinesInDETCRoundedDownToSwath[DC__NUM_DPP__MAX];                     // WM
+       double FullDETBufferingTimeY[DC__NUM_DPP__MAX];                     // WM
+       double FullDETBufferingTimeC[DC__NUM_DPP__MAX];                     // WM
        double MinFullDETBufferingTime;
        double FrameTimeForMinFullDETBufferingTime;
        double AverageReadBandwidthGBytePerSecond;
@@ -145,55 +149,54 @@ struct vba_vars_st {
        double EffectiveDETPlusLBLinesChroma;
        double UrgentLatencySupportUsLuma;
        double UrgentLatencySupportUsChroma;
-       double UrgentLatencySupportUs[DC__NUM_PIPES__MAX];
+       double UrgentLatencySupportUs[DC__NUM_DPP__MAX];
        unsigned int DSCFormatFactor;
-       unsigned int BlockHeight256BytesY[DC__NUM_PIPES__MAX];
-       unsigned int BlockHeight256BytesC[DC__NUM_PIPES__MAX];
-       unsigned int BlockWidth256BytesY[DC__NUM_PIPES__MAX];
-       unsigned int BlockWidth256BytesC[DC__NUM_PIPES__MAX];
-       double VInitPreFillY[DC__NUM_PIPES__MAX];
-       double VInitPreFillC[DC__NUM_PIPES__MAX];
-       unsigned int MaxNumSwathY[DC__NUM_PIPES__MAX];
-       unsigned int MaxNumSwathC[DC__NUM_PIPES__MAX];
-       double PrefetchSourceLinesY[DC__NUM_PIPES__MAX];
-       double PrefetchSourceLinesC[DC__NUM_PIPES__MAX];
-       double PixelPTEBytesPerRow[DC__NUM_PIPES__MAX];
-       double MetaRowByte[DC__NUM_PIPES__MAX];
-       bool PTEBufferSizeNotExceeded; // not used
-       unsigned int dpte_row_height[DC__NUM_PIPES__MAX];
-       unsigned int dpte_row_height_chroma[DC__NUM_PIPES__MAX];
-       unsigned int meta_row_height[DC__NUM_PIPES__MAX];
-       unsigned int meta_row_height_chroma[DC__NUM_PIPES__MAX];
-
-       unsigned int MacroTileWidthY;
-       unsigned int MacroTileWidthC;
-       unsigned int MaxVStartupLines[DC__NUM_PIPES__MAX];
-       double WritebackDelay[DC__NUM_PIPES__MAX];
+       unsigned int BlockHeight256BytesY[DC__NUM_DPP__MAX];
+       unsigned int BlockHeight256BytesC[DC__NUM_DPP__MAX];
+       unsigned int BlockWidth256BytesY[DC__NUM_DPP__MAX];
+       unsigned int BlockWidth256BytesC[DC__NUM_DPP__MAX];
+       double VInitPreFillY[DC__NUM_DPP__MAX];
+       double VInitPreFillC[DC__NUM_DPP__MAX];
+       unsigned int MaxNumSwathY[DC__NUM_DPP__MAX];
+       unsigned int MaxNumSwathC[DC__NUM_DPP__MAX];
+       double PrefetchSourceLinesY[DC__NUM_DPP__MAX];
+       double PrefetchSourceLinesC[DC__NUM_DPP__MAX];
+       double PixelPTEBytesPerRow[DC__NUM_DPP__MAX];
+       double MetaRowByte[DC__NUM_DPP__MAX];
+       unsigned int dpte_row_height[DC__NUM_DPP__MAX];
+       unsigned int dpte_row_height_chroma[DC__NUM_DPP__MAX];
+       unsigned int meta_row_height[DC__NUM_DPP__MAX];
+       unsigned int meta_row_height_chroma[DC__NUM_DPP__MAX];
+
+       unsigned int MacroTileWidthY[DC__NUM_DPP__MAX];
+       unsigned int MacroTileWidthC[DC__NUM_DPP__MAX];
+       unsigned int MaxVStartupLines[DC__NUM_DPP__MAX];
+       double WritebackDelay[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
        bool PrefetchModeSupported;
-       bool AllowDRAMClockChangeDuringVBlank[DC__NUM_PIPES__MAX];
-       bool AllowDRAMSelfRefreshDuringVBlank[DC__NUM_PIPES__MAX];
-       double RequiredPrefetchPixDataBW[DC__NUM_PIPES__MAX];
+       bool AllowDRAMClockChangeDuringVBlank[DC__NUM_DPP__MAX];
+       bool AllowDRAMSelfRefreshDuringVBlank[DC__NUM_DPP__MAX];
+       double RequiredPrefetchPixDataBW[DC__NUM_DPP__MAX];
        double XFCRemoteSurfaceFlipDelay;
        double TInitXFill;
        double TslvChk;
        double SrcActiveDrainRate;
-       double Tno_bw[DC__NUM_PIPES__MAX];
+       double Tno_bw[DC__NUM_DPP__MAX];
        bool ImmediateFlipSupported;
 
-       double prefetch_vm_bw[DC__NUM_PIPES__MAX];
-       double prefetch_row_bw[DC__NUM_PIPES__MAX];
-       bool ImmediateFlipSupportedForPipe[DC__NUM_PIPES__MAX];
+       double prefetch_vm_bw[DC__NUM_DPP__MAX];
+       double prefetch_row_bw[DC__NUM_DPP__MAX];
+       bool ImmediateFlipSupportedForPipe[DC__NUM_DPP__MAX];
        unsigned int VStartupLines;
-       double DisplayPipeLineDeliveryTimeLumaPrefetch[DC__NUM_PIPES__MAX];
-       double DisplayPipeLineDeliveryTimeChromaPrefetch[DC__NUM_PIPES__MAX];
+       double DisplayPipeLineDeliveryTimeLumaPrefetch[DC__NUM_DPP__MAX];
+       double DisplayPipeLineDeliveryTimeChromaPrefetch[DC__NUM_DPP__MAX];
        unsigned int ActiveDPPs;
        unsigned int LBLatencyHidingSourceLinesY;
        unsigned int LBLatencyHidingSourceLinesC;
-       double ActiveDRAMClockChangeLatencyMargin[DC__NUM_PIPES__MAX];
+       double ActiveDRAMClockChangeLatencyMargin[DC__NUM_DPP__MAX];
        double MinActiveDRAMClockChangeMargin;
-       double XFCSlaveVUpdateOffset[DC__NUM_PIPES__MAX];
-       double XFCSlaveVupdateWidth[DC__NUM_PIPES__MAX];
-       double XFCSlaveVReadyOffset[DC__NUM_PIPES__MAX];
+       double XFCSlaveVUpdateOffset[DC__NUM_DPP__MAX];
+       double XFCSlaveVupdateWidth[DC__NUM_DPP__MAX];
+       double XFCSlaveVReadyOffset[DC__NUM_DPP__MAX];
        double InitFillLevel;
        double FinalFillMargin;
        double FinalFillLevel;
@@ -276,71 +279,71 @@ struct vba_vars_st {
        double DCFCLK;
 
        unsigned int NumberOfActivePlanes;
-       unsigned int ViewportWidth[DC__NUM_DPP];
-       unsigned int ViewportHeight[DC__NUM_DPP];
-       unsigned int ViewportYStartY[DC__NUM_DPP];
-       unsigned int ViewportYStartC[DC__NUM_DPP];
-       unsigned int PitchY[DC__NUM_DPP];
-       unsigned int PitchC[DC__NUM_DPP];
-       double HRatio[DC__NUM_DPP];
-       double VRatio[DC__NUM_DPP];
-       unsigned int htaps[DC__NUM_DPP];
-       unsigned int vtaps[DC__NUM_DPP];
-       unsigned int HTAPsChroma[DC__NUM_DPP];
-       unsigned int VTAPsChroma[DC__NUM_DPP];
-       unsigned int HTotal[DC__NUM_DPP];
-       unsigned int VTotal[DC__NUM_DPP];
-       unsigned int DPPPerPlane[DC__NUM_DPP];
-       double PixelClock[DC__NUM_DPP];
-       double PixelClockBackEnd[DC__NUM_DPP];
-       double DPPCLK[DC__NUM_DPP];
-       bool DCCEnable[DC__NUM_DPP];
-       unsigned int DCCMetaPitchY[DC__NUM_DPP];
-       enum scan_direction_class SourceScan[DC__NUM_DPP];
-       enum source_format_class SourcePixelFormat[DC__NUM_DPP];
-       bool WritebackEnable[DC__NUM_DPP];
-       double WritebackDestinationWidth[DC__NUM_DPP];
-       double WritebackDestinationHeight[DC__NUM_DPP];
-       double WritebackSourceHeight[DC__NUM_DPP];
-       enum source_format_class WritebackPixelFormat[DC__NUM_DPP];
-       unsigned int WritebackLumaHTaps[DC__NUM_DPP];
-       unsigned int WritebackLumaVTaps[DC__NUM_DPP];
-       unsigned int WritebackChromaHTaps[DC__NUM_DPP];
-       unsigned int WritebackChromaVTaps[DC__NUM_DPP];
-       double WritebackHRatio[DC__NUM_DPP];
-       double WritebackVRatio[DC__NUM_DPP];
-       unsigned int HActive[DC__NUM_DPP];
-       unsigned int VActive[DC__NUM_DPP];
-       bool Interlace[DC__NUM_DPP];
-       enum dm_swizzle_mode SurfaceTiling[DC__NUM_DPP];
-       unsigned int ScalerRecoutWidth[DC__NUM_DPP];
-       bool DynamicMetadataEnable[DC__NUM_DPP];
-       unsigned int DynamicMetadataLinesBeforeActiveRequired[DC__NUM_DPP];
-       unsigned int DynamicMetadataTransmittedBytes[DC__NUM_DPP];
-       double DCCRate[DC__NUM_DPP];
-       bool ODMCombineEnabled[DC__NUM_DPP];
-       double OutputBpp[DC__NUM_DPP];
-       unsigned int NumberOfDSCSlices[DC__NUM_DPP];
-       bool DSCEnabled[DC__NUM_DPP];
-       unsigned int DSCDelay[DC__NUM_DPP];
-       unsigned int DSCInputBitPerComponent[DC__NUM_DPP];
-       enum output_format_class OutputFormat[DC__NUM_DPP];
-       enum output_encoder_class Output[DC__NUM_DPP];
-       unsigned int BlendingAndTiming[DC__NUM_DPP];
+       unsigned int ViewportWidth[DC__NUM_DPP__MAX];
+       unsigned int ViewportHeight[DC__NUM_DPP__MAX];
+       unsigned int ViewportYStartY[DC__NUM_DPP__MAX];
+       unsigned int ViewportYStartC[DC__NUM_DPP__MAX];
+       unsigned int PitchY[DC__NUM_DPP__MAX];
+       unsigned int PitchC[DC__NUM_DPP__MAX];
+       double HRatio[DC__NUM_DPP__MAX];
+       double VRatio[DC__NUM_DPP__MAX];
+       unsigned int htaps[DC__NUM_DPP__MAX];
+       unsigned int vtaps[DC__NUM_DPP__MAX];
+       unsigned int HTAPsChroma[DC__NUM_DPP__MAX];
+       unsigned int VTAPsChroma[DC__NUM_DPP__MAX];
+       unsigned int HTotal[DC__NUM_DPP__MAX];
+       unsigned int VTotal[DC__NUM_DPP__MAX];
+       unsigned int DPPPerPlane[DC__NUM_DPP__MAX];
+       double PixelClock[DC__NUM_DPP__MAX];
+       double PixelClockBackEnd[DC__NUM_DPP__MAX];
+       double DPPCLK[DC__NUM_DPP__MAX];
+       bool DCCEnable[DC__NUM_DPP__MAX];
+       unsigned int DCCMetaPitchY[DC__NUM_DPP__MAX];
+       enum scan_direction_class SourceScan[DC__NUM_DPP__MAX];
+       enum source_format_class SourcePixelFormat[DC__NUM_DPP__MAX];
+       bool WritebackEnable[DC__NUM_DPP__MAX];
+       double WritebackDestinationWidth[DC__NUM_DPP__MAX];
+       double WritebackDestinationHeight[DC__NUM_DPP__MAX];
+       double WritebackSourceHeight[DC__NUM_DPP__MAX];
+       enum source_format_class WritebackPixelFormat[DC__NUM_DPP__MAX];
+       unsigned int WritebackLumaHTaps[DC__NUM_DPP__MAX];
+       unsigned int WritebackLumaVTaps[DC__NUM_DPP__MAX];
+       unsigned int WritebackChromaHTaps[DC__NUM_DPP__MAX];
+       unsigned int WritebackChromaVTaps[DC__NUM_DPP__MAX];
+       double WritebackHRatio[DC__NUM_DPP__MAX];
+       double WritebackVRatio[DC__NUM_DPP__MAX];
+       unsigned int HActive[DC__NUM_DPP__MAX];
+       unsigned int VActive[DC__NUM_DPP__MAX];
+       bool Interlace[DC__NUM_DPP__MAX];
+       enum dm_swizzle_mode SurfaceTiling[DC__NUM_DPP__MAX];
+       unsigned int ScalerRecoutWidth[DC__NUM_DPP__MAX];
+       bool DynamicMetadataEnable[DC__NUM_DPP__MAX];
+       unsigned int DynamicMetadataLinesBeforeActiveRequired[DC__NUM_DPP__MAX];
+       unsigned int DynamicMetadataTransmittedBytes[DC__NUM_DPP__MAX];
+       double DCCRate[DC__NUM_DPP__MAX];
+       bool ODMCombineEnabled[DC__NUM_DPP__MAX];
+       double OutputBpp[DC__NUM_DPP__MAX];
+       unsigned int NumberOfDSCSlices[DC__NUM_DPP__MAX];
+       bool DSCEnabled[DC__NUM_DPP__MAX];
+       unsigned int DSCDelay[DC__NUM_DPP__MAX];
+       unsigned int DSCInputBitPerComponent[DC__NUM_DPP__MAX];
+       enum output_format_class OutputFormat[DC__NUM_DPP__MAX];
+       enum output_encoder_class Output[DC__NUM_DPP__MAX];
+       unsigned int BlendingAndTiming[DC__NUM_DPP__MAX];
        bool SynchronizedVBlank;
-       unsigned int NumberOfCursors[DC__NUM_DPP];
-       unsigned int CursorWidth[DC__NUM_DPP][DC__NUM_CURSOR];
-       unsigned int CursorBPP[DC__NUM_DPP][DC__NUM_CURSOR];
-       bool XFCEnabled[DC__NUM_DPP];
-       bool ScalerEnabled[DC__NUM_DPP];
+       unsigned int NumberOfCursors[DC__NUM_DPP__MAX];
+       unsigned int CursorWidth[DC__NUM_DPP__MAX][DC__NUM_CURSOR];
+       unsigned int CursorBPP[DC__NUM_DPP__MAX][DC__NUM_CURSOR];
+       bool XFCEnabled[DC__NUM_DPP__MAX];
+       bool ScalerEnabled[DC__NUM_DPP__MAX];
 
        // Intermediates/Informational
        bool ImmediateFlipSupport;
-       unsigned int SwathHeightY[DC__NUM_DPP];
-       unsigned int SwathHeightC[DC__NUM_DPP];
-       unsigned int DETBufferSizeY[DC__NUM_DPP];
-       unsigned int DETBufferSizeC[DC__NUM_DPP];
-       unsigned int LBBitPerPixel[DC__NUM_DPP];
+       unsigned int SwathHeightY[DC__NUM_DPP__MAX];
+       unsigned int SwathHeightC[DC__NUM_DPP__MAX];
+       unsigned int DETBufferSizeY[DC__NUM_DPP__MAX];
+       unsigned int DETBufferSizeC[DC__NUM_DPP__MAX];
+       unsigned int LBBitPerPixel[DC__NUM_DPP__MAX];
        double LastPixelOfLineExtraWatermark;
        double TotalDataReadBandwidth;
        unsigned int TotalActiveWriteback;
@@ -349,9 +352,9 @@ struct vba_vars_st {
        double BandwidthAvailableForImmediateFlip;
        unsigned int PrefetchMode;
        bool IgnoreViewportPositioning;
-       double PrefetchBandwidth[DC__NUM_DPP];
-       bool ErrorResult[DC__NUM_DPP];
-       double PDEAndMetaPTEBytesFrame[DC__NUM_DPP];
+       double PrefetchBandwidth[DC__NUM_DPP__MAX];
+       bool ErrorResult[DC__NUM_DPP__MAX];
+       double PDEAndMetaPTEBytesFrame[DC__NUM_DPP__MAX];
 
        //
        // Calculated dml_ml->vba.Outputs
@@ -376,35 +379,200 @@ struct vba_vars_st {
        // used explicitly. They are fetched by tests and then possibly used. The
        // ultimate values to use are the ones specified by the parameters to DML
        double DISPCLK_calculated;
-       double DSCCLK_calculated[DC__NUM_DPP];
-       double DPPCLK_calculated[DC__NUM_DPP];
+       double DSCCLK_calculated[DC__NUM_DPP__MAX];
+       double DPPCLK_calculated[DC__NUM_DPP__MAX];
 
-       unsigned int VStartup[DC__NUM_DPP];
+       unsigned int VStartup[DC__NUM_DPP__MAX];
        unsigned int VStartupRequiredWhenNotEnoughTimeForDynamicMetadata;
 
        double ImmediateFlipBW;
        unsigned int TotImmediateFlipBytes;
        double TCalc;
-       double MinTTUVBlank[DC__NUM_DPP];
-       double VRatioPrefetchY[DC__NUM_DPP];
-       double VRatioPrefetchC[DC__NUM_DPP];
-       double DSTXAfterScaler[DC__NUM_DPP];
-       double DSTYAfterScaler[DC__NUM_DPP];
-
-       double DestinationLinesToRequestVMInVBlank[DC__NUM_DPP];
-       double DestinationLinesToRequestRowInVBlank[DC__NUM_DPP];
-       double DestinationLinesForPrefetch[DC__NUM_DPP];
-       double DestinationLinesToRequestRowInImmediateFlip[DC__NUM_DPP];
-       double DestinationLinesToRequestVMInImmediateFlip[DC__NUM_DPP];
-
-       double XFCTransferDelay[DC__NUM_DPP];
-       double XFCPrechargeDelay[DC__NUM_DPP];
-       double XFCRemoteSurfaceFlipLatency[DC__NUM_DPP];
-       double XFCPrefetchMargin[DC__NUM_DPP];
-
-       display_e2e_pipe_params_st cache_pipes[DC__NUM_DPP];
+       double MinTTUVBlank[DC__NUM_DPP__MAX];
+       double VRatioPrefetchY[DC__NUM_DPP__MAX];
+       double VRatioPrefetchC[DC__NUM_DPP__MAX];
+       double DSTXAfterScaler[DC__NUM_DPP__MAX];
+       double DSTYAfterScaler[DC__NUM_DPP__MAX];
+
+       double DestinationLinesToRequestVMInVBlank[DC__NUM_DPP__MAX];
+       double DestinationLinesToRequestRowInVBlank[DC__NUM_DPP__MAX];
+       double DestinationLinesForPrefetch[DC__NUM_DPP__MAX];
+       double DestinationLinesToRequestRowInImmediateFlip[DC__NUM_DPP__MAX];
+       double DestinationLinesToRequestVMInImmediateFlip[DC__NUM_DPP__MAX];
+
+       double XFCTransferDelay[DC__NUM_DPP__MAX];
+       double XFCPrechargeDelay[DC__NUM_DPP__MAX];
+       double XFCRemoteSurfaceFlipLatency[DC__NUM_DPP__MAX];
+       double XFCPrefetchMargin[DC__NUM_DPP__MAX];
+
+       display_e2e_pipe_params_st cache_pipes[DC__NUM_DPP__MAX];
        unsigned int cache_num_pipes;
-       unsigned int pipe_plane[DC__NUM_PIPES__MAX];
+       unsigned int pipe_plane[DC__NUM_DPP__MAX];
+
+       /* vba mode support */
+       /*inputs*/
+       bool SupportGFX7CompatibleTilingIn32bppAnd64bpp;
+       double MaxHSCLRatio;
+       double MaxVSCLRatio;
+       unsigned int  MaxNumWriteback;
+       bool WritebackLumaAndChromaScalingSupported;
+       bool Cursor64BppSupport;
+       double DCFCLKPerState[DC__VOLTAGE_STATES + 1];
+       double FabricClockPerState[DC__VOLTAGE_STATES + 1];
+       double SOCCLKPerState[DC__VOLTAGE_STATES + 1];
+       double PHYCLKPerState[DC__VOLTAGE_STATES + 1];
+       double MaxDppclk[DC__VOLTAGE_STATES + 1];
+       double MaxDSCCLK[DC__VOLTAGE_STATES + 1];
+       double DRAMSpeedPerState[DC__VOLTAGE_STATES + 1];
+       double MaxDispclk[DC__VOLTAGE_STATES + 1];
+
+       /*outputs*/
+       bool ScaleRatioAndTapsSupport;
+       bool SourceFormatPixelAndScanSupport;
+       unsigned int SwathWidthYSingleDPP[DC__NUM_DPP__MAX];
+       double BytePerPixelInDETY[DC__NUM_DPP__MAX];
+       double BytePerPixelInDETC[DC__NUM_DPP__MAX];
+       double TotalReadBandwidthConsumedGBytePerSecond;
+       double ReadBandwidth[DC__NUM_DPP__MAX];
+       double TotalWriteBandwidthConsumedGBytePerSecond;
+       double WriteBandwidth[DC__NUM_DPP__MAX];
+       double TotalBandwidthConsumedGBytePerSecond;
+       bool DCCEnabledInAnyPlane;
+       bool WritebackLatencySupport;
+       bool WritebackModeSupport;
+       bool Writeback10bpc420Supported;
+       bool BandwidthSupport[DC__VOLTAGE_STATES + 1];
+       unsigned int TotalNumberOfActiveWriteback;
+       double CriticalPoint;
+       double ReturnBWToDCNPerState;
+       double FabricAndDRAMBandwidthPerState[DC__VOLTAGE_STATES + 1];
+       double ReturnBWPerState[DC__VOLTAGE_STATES + 1];
+       double UrgentRoundTripAndOutOfOrderLatencyPerState[DC__VOLTAGE_STATES + 1];
+       bool ODMCombineEnablePerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       bool PTEBufferSizeNotExceededY[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       bool PTEBufferSizeNotExceededC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       bool PrefetchSupported[DC__VOLTAGE_STATES + 1];
+       bool VRatioInPrefetchSupported[DC__VOLTAGE_STATES + 1];
+       bool DISPCLK_DPPCLK_Support[DC__VOLTAGE_STATES + 1];
+       bool TotalAvailablePipesSupport[DC__VOLTAGE_STATES + 1];
+       bool UrgentLatencySupport[DC__VOLTAGE_STATES + 1];
+       bool ModeSupport[DC__VOLTAGE_STATES + 1];
+       bool DIOSupport[DC__VOLTAGE_STATES + 1];
+       bool NotEnoughDSCUnits[DC__VOLTAGE_STATES + 1];
+       bool DSCCLKRequiredMoreThanSupported[DC__VOLTAGE_STATES + 1];
+       bool ROBSupport[DC__VOLTAGE_STATES + 1];
+       bool PTEBufferSizeNotExceeded[DC__VOLTAGE_STATES + 1];
+       bool RequiresDSC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       bool IsErrorResult[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       bool ViewportSizeSupport[DC__VOLTAGE_STATES + 1];
+       bool prefetch_vm_bw_valid;
+       bool prefetch_row_bw_valid;
+       bool NumberOfOTGSupport;
+       bool NonsupportedDSCInputBPC;
+       bool WritebackScaleRatioAndTapsSupport;
+       bool CursorSupport;
+       bool PitchSupport;
+
+       double WritebackLineBufferLumaBufferSize;
+       double WritebackLineBufferChromaBufferSize;
+       double WritebackMinHSCLRatio;
+       double WritebackMinVSCLRatio;
+       double WritebackMaxHSCLRatio;
+       double WritebackMaxVSCLRatio;
+       double WritebackMaxHSCLTaps;
+       double WritebackMaxVSCLTaps;
+       unsigned int MaxNumDPP;
+       unsigned int MaxNumOTG;
+       double CursorBufferSize;
+       double CursorChunkSize;
+       unsigned int Mode;
+       double NoOfDPP[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double OutputLinkDPLanes[DC__NUM_DPP__MAX];
+       double SwathWidthYPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double SwathHeightYPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double SwathHeightCPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double UrgentLatencySupportUsPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double VRatioPreY[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double VRatioPreC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double RequiredPrefetchPixelDataBW[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double RequiredDPPCLK[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double RequiredDISPCLK[DC__VOLTAGE_STATES + 1];
+       double TotalNumberOfActiveDPP[DC__VOLTAGE_STATES + 1];
+       double TotalNumberOfDCCActiveDPP[DC__VOLTAGE_STATES + 1];
+       double PrefetchBW[DC__NUM_DPP__MAX];
+       double PDEAndMetaPTEBytesPerFrame[DC__NUM_DPP__MAX];
+       double MetaRowBytes[DC__NUM_DPP__MAX];
+       double DPTEBytesPerRow[DC__NUM_DPP__MAX];
+       double PrefetchLinesY[DC__NUM_DPP__MAX];
+       double PrefetchLinesC[DC__NUM_DPP__MAX];
+       unsigned int MaxNumSwY[DC__NUM_DPP__MAX];
+       unsigned int MaxNumSwC[DC__NUM_DPP__MAX];
+       double PrefillY[DC__NUM_DPP__MAX];
+       double PrefillC[DC__NUM_DPP__MAX];
+       double LineTimesForPrefetch[DC__NUM_DPP__MAX];
+       double LinesForMetaPTE[DC__NUM_DPP__MAX];
+       double LinesForMetaAndDPTERow[DC__NUM_DPP__MAX];
+       double MinDPPCLKUsingSingleDPP[DC__NUM_DPP__MAX];
+       double RequiresFEC[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       unsigned int OutputBppPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       double DSCDelayPerState[DC__VOLTAGE_STATES + 1][DC__NUM_DPP__MAX];
+       unsigned int Read256BlockHeightY[DC__NUM_DPP__MAX];
+       unsigned int Read256BlockWidthY[DC__NUM_DPP__MAX];
+       unsigned int Read256BlockHeightC[DC__NUM_DPP__MAX];
+       unsigned int Read256BlockWidthC[DC__NUM_DPP__MAX];
+       unsigned int ImmediateFlipBytes[DC__NUM_DPP__MAX];
+       double MaxSwathHeightY[DC__NUM_DPP__MAX];
+       double MaxSwathHeightC[DC__NUM_DPP__MAX];
+       double MinSwathHeightY[DC__NUM_DPP__MAX];
+       double MinSwathHeightC[DC__NUM_DPP__MAX];
+       double PSCL_FACTOR[DC__NUM_DPP__MAX];
+       double PSCL_FACTOR_CHROMA[DC__NUM_DPP__MAX];
+       double MaximumVStartup[DC__NUM_DPP__MAX];
+       double AlignedDCCMetaPitch[DC__NUM_DPP__MAX];
+       double AlignedYPitch[DC__NUM_DPP__MAX];
+       double AlignedCPitch[DC__NUM_DPP__MAX];
+       double MaximumSwathWidth[DC__NUM_DPP__MAX];
+       double final_flip_bw[DC__NUM_DPP__MAX];
+       double ImmediateFlipSupportedForState[DC__VOLTAGE_STATES + 1];
+
+       double WritebackLumaVExtra;
+       double WritebackChromaVExtra;
+       double WritebackRequiredDISPCLK;
+       double MaximumSwathWidthSupport;
+       double MaximumSwathWidthInDETBuffer;
+       double MaximumSwathWidthInLineBuffer;
+       double MaxDispclkRoundedDownToDFSGranularity;
+       double MaxDppclkRoundedDownToDFSGranularity;
+       double PlaneRequiredDISPCLKWithoutODMCombine;
+       double PlaneRequiredDISPCLK;
+       double TotalNumberOfActiveOTG;
+       double FECOverhead;
+       double EffectiveFECOverhead;
+       unsigned int Outbpp;
+       unsigned int OutbppDSC;
+       double TotalDSCUnitsRequired;
+       double bpp;
+       unsigned int slices;
+       double SwathWidthGranularityY;
+       double RoundedUpMaxSwathSizeBytesY;
+       double SwathWidthGranularityC;
+       double RoundedUpMaxSwathSizeBytesC;
+       double LinesInDETLuma;
+       double LinesInDETChroma;
+       double EffectiveDETLBLinesLuma;
+       double EffectiveDETLBLinesChroma;
+       double ProjectedDCFCLKDeepSleep;
+       double PDEAndMetaPTEBytesPerFrameY;
+       double PDEAndMetaPTEBytesPerFrameC;
+       unsigned int MetaRowBytesY;
+       unsigned int MetaRowBytesC;
+       unsigned int DPTEBytesPerRowC;
+       unsigned int DPTEBytesPerRowY;
+       double ExtraLatency;
+       double TimeCalc;
+       double TWait;
+       double MaximumReadBandwidthWithPrefetch;
+       double total_dcn_read_bw_with_flip;
 };
 
 #endif /* _DML2_DISPLAY_MODE_VBA_H_ */
index 9cbd415e508d301b8b092e88e86cae9ec8292cb5..2af6d150cc46359c6bc378b0930ce23c40bc2540 100644 (file)
@@ -35,6 +35,18 @@ double dml_max(double a, double b)
 {
        return (double) dcn_bw_max2(a, b);
 }
+double dml_max3(double a, double b, double c)
+{
+       return dml_max(dml_max(a, b), c);
+}
+double dml_max4(double a, double b, double c, double d)
+{
+       return dml_max(dml_max(a, b), dml_max(c, d));
+}
+double dml_max5(double a, double b, double c, double d, double e)
+{
+       return dml_max(dml_max4(a, b, c, d), e);
+}
 
 double dml_ceil(double a, double granularity)
 {
index 19271e79abcc8b2eacdeb9f22d2658357811fd68..ba01bbb007fc076723a70a1c3eb06ef318b14a4a 100644 (file)
@@ -36,6 +36,9 @@
 
 double dml_min(double a, double b);
 double dml_max(double a, double b);
+double dml_max3(double a, double b, double c);
+double dml_max4(double a, double b, double c, double d);
+double dml_max5(double a, double b, double c, double d, double e);
 bool dml_util_is_420(enum source_format_class sorce_format);
 double dml_ceil_ex(double x, double granularity);
 double dml_floor_ex(double x, double granularity);