pipe_ctx->plane_res.scl_data.recout.x += pipe_ctx->plane_res.scl_data.recout.width;
        }
 
-       if (pipe_ctx->plane_res.scl_data.viewport.height < MIN_VIEWPORT_SIZE ||
-                       pipe_ctx->plane_res.scl_data.viewport.width < MIN_VIEWPORT_SIZE)
-               res = false;
+       if (!pipe_ctx->stream->ctx->dc->config.enable_windowed_mpo_odm) {
+               if (pipe_ctx->plane_res.scl_data.viewport.height < MIN_VIEWPORT_SIZE ||
+                               pipe_ctx->plane_res.scl_data.viewport.width < MIN_VIEWPORT_SIZE)
+                       res = false;
+       } else {
+               /* Clamp minimum viewport size */
+               if (pipe_ctx->plane_res.scl_data.viewport.height < MIN_VIEWPORT_SIZE)
+                       pipe_ctx->plane_res.scl_data.viewport.height = MIN_VIEWPORT_SIZE;
+               if (pipe_ctx->plane_res.scl_data.viewport.width < MIN_VIEWPORT_SIZE)
+                       pipe_ctx->plane_res.scl_data.viewport.width = MIN_VIEWPORT_SIZE;
+       }
 
        DC_LOG_SCALER("%s pipe %d:\nViewport: height:%d width:%d x:%d y:%d  Recout: height:%d width:%d x:%d y:%d  HACTIVE:%d VACTIVE:%d\n"
                        "src_rect: height:%d width:%d x:%d y:%d  dst_rect: height:%d width:%d x:%d y:%d  clip_rect: height:%d width:%d x:%d y:%d\n",
 
        if (vlevel == context->bw_ctx.dml.soc.num_states)
                goto validate_fail;
 
-       for (i = 0, pipe_idx = 0; i < dc->res_pool->pipe_count; i++) {
-               struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
-               struct pipe_ctx *mpo_pipe = pipe->bottom_pipe;
+       if (!dc->config.enable_windowed_mpo_odm) {
+               for (i = 0, pipe_idx = 0; i < dc->res_pool->pipe_count; i++) {
+                       struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
+                       struct pipe_ctx *mpo_pipe = pipe->bottom_pipe;
 
-               if (!pipe->stream)
-                       continue;
+                       if (!pipe->stream)
+                               continue;
 
-               /* We only support full screen mpo with ODM */
-               if (vba->ODMCombineEnabled[vba->pipe_plane[pipe_idx]] != dm_odm_combine_mode_disabled
-                               && pipe->plane_state && mpo_pipe
-                               && memcmp(&mpo_pipe->plane_res.scl_data.recout,
-                                               &pipe->plane_res.scl_data.recout,
-                                               sizeof(struct rect)) != 0) {
-                       ASSERT(mpo_pipe->plane_state != pipe->plane_state);
-                       goto validate_fail;
+                       /* We only support full screen mpo with ODM */
+                       if (vba->ODMCombineEnabled[vba->pipe_plane[pipe_idx]] != dm_odm_combine_mode_disabled
+                                       && pipe->plane_state && mpo_pipe
+                                       && memcmp(&mpo_pipe->plane_res.scl_data.recout,
+                                                       &pipe->plane_res.scl_data.recout,
+                                                       sizeof(struct rect)) != 0) {
+                               ASSERT(mpo_pipe->plane_state != pipe->plane_state);
+                               goto validate_fail;
+                       }
+                       pipe_idx++;
                }
-               pipe_idx++;
        }
 
        /* merge pipes if necessary */