{
        struct vba_vars_st *v = &mode_lib->vba;
        int MinPrefetchMode, MaxPrefetchMode;
-       int i;
+       int i, start_state;
        unsigned int j, k, m;
        bool   EnoughWritebackUnits = true;
        bool   WritebackModeSupport = true;
 
        /*MODE SUPPORT, VOLTAGE STATE AND SOC CONFIGURATION*/
 
+       if (mode_lib->validate_max_state)
+               start_state = v->soc.num_states - 1;
+       else
+               start_state = 0;
+
        CalculateMinAndMaxPrefetchMode(
                mode_lib->vba.AllowDRAMSelfRefreshOrDRAMClockChangeInVblank,
                &MinPrefetchMode, &MaxPrefetchMode);
                        v->SingleDPPViewportSizeSupportPerPlane,
                        &v->ViewportSizeSupport[0][0]);
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                for (j = 0; j < 2; j++) {
                        v->MaxDispclkRoundedDownToDFSGranularity = RoundToDFSGranularityDown(v->MaxDispclk[i], v->DISPCLKDPPCLKVCOSpeed);
                        v->MaxDppclkRoundedDownToDFSGranularity = RoundToDFSGranularityDown(v->MaxDppclk[i], v->DISPCLKDPPCLKVCOSpeed);
 
        /*Total Available Pipes Support Check*/
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                for (j = 0; j < 2; j++) {
                        if (v->TotalNumberOfActiveDPP[i][j] <= v->MaxNumDPP) {
                                v->TotalAvailablePipesSupport[i][j] = true;
                }
        }
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
                        v->RequiresDSC[i][k] = false;
                        v->RequiresFEC[i][k] = false;
                        }
                }
        }
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                v->DIOSupport[i] = true;
                for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
                        if (!v->skip_dio_check[k] && v->BlendingAndTiming[k] == k && (v->Output[k] == dm_dp || v->Output[k] == dm_edp || v->Output[k] == dm_hdmi)
                }
        }
 
-       for (i = 0; i < v->soc.num_states; ++i) {
+       for (i = start_state; i < v->soc.num_states; ++i) {
                v->ODMCombine4To1SupportCheckOK[i] = true;
                for (k = 0; k < v->NumberOfActivePlanes; ++k) {
                        if (v->BlendingAndTiming[k] == k && v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1
 
        /* Skip dscclk validation: as long as dispclk is supported, dscclk is also implicitly supported */
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                v->NotEnoughDSCUnits[i] = false;
                v->TotalDSCUnitsRequired = 0.0;
                for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
        }
        /*DSC Delay per state*/
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
                        if (v->OutputBppPerState[i][k] == BPP_INVALID) {
                                v->BPP = 0.0;
                v->cursor_bw[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
        }
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                for (j = 0; j < 2; j++) {
                        for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
                                v->swath_width_luma_ub_this_state[k] = v->swath_width_luma_ub_all_states[i][j][k];
 
        /*PTE Buffer Size Check*/
 
-       for (i = 0; i < v->soc.num_states; i++) {
+       for (i = start_state; i < v->soc.num_states; i++) {
                for (j = 0; j < 2; j++) {
                        v->PTEBufferSizeNotExceeded[i][j] = true;
                        for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
        }
        /*Mode Support, Voltage State and SOC Configuration*/
 
-       for (i = v->soc.num_states - 1; i >= 0; i--) {
+       for (i = v->soc.num_states - 1; i >= start_state; i--) {
                for (j = 0; j < 2; j++) {
                        if (v->ScaleRatioAndTapsSupport == 1 && v->SourceFormatPixelAndScanSupport == 1 && v->ViewportSizeSupport[i][j] == 1
                                        && v->DIOSupport[i] == 1 && v->ODMCombine4To1SupportCheckOK[i] == 1
        }
        {
                unsigned int MaximumMPCCombine = 0;
-               for (i = v->soc.num_states; i >= 0; i--) {
+               for (i = v->soc.num_states; i >= start_state; i--) {
                        if (i == v->soc.num_states || v->ModeSupport[i][0] == true || v->ModeSupport[i][1] == true) {
                                v->VoltageLevel = i;
                                v->ModeIsSupported = v->ModeSupport[i][0] == true || v->ModeSupport[i][1] == true;