drm/amd/display: move odm power optimization decision after subvp optimization
authorWenjing Liu <wenjing.liu@amd.com>
Thu, 24 Aug 2023 23:50:16 +0000 (19:50 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 11 Sep 2023 21:18:30 +0000 (17:18 -0400)
[why]
ODM power optimization excludes subvp power optimization but subvp
optimization can override ODM power optimization even if subvp optimization
configuration is not found. This happens with 4k144hz + 1 5k desktop plane.
We could have applied ODM power optimization however this is overridden by
subvp but subvp ends up deciding not apply its optimization.

[how]
Move ODM power optimization decision after subvp so it will try ODM power
optimization after subvp optimization is not possible.

Reviewed-by: Dillon Varone <dillon.varone@amd.com>
Acked-by: Stylon Wang <stylon.wang@amd.com>
Signed-off-by: Wenjing Liu <wenjing.liu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c

index 92e2d1df5b3299cb0d9392c5704a68b7388175a0..1f53883d8f563c88d9fbb27d6163025f2f2fb32c 100644 (file)
@@ -1441,10 +1441,6 @@ static void dcn32_full_validate_bw_helper(struct dc *dc,
                vba->VoltageLevel = *vlevel;
        }
 
-       if (should_allow_odm_power_optimization(dc, context, vba, split, merge))
-               try_odm_power_optimization_and_revalidate(
-                               dc, context, pipes, split, merge, vlevel, *pipe_cnt);
-
        /* Conditions for setting up phantom pipes for SubVP:
         * 1. Not force disable SubVP
         * 2. Full update (i.e. !fast_validate)
@@ -1563,6 +1559,11 @@ static void dcn32_full_validate_bw_helper(struct dc *dc,
                        assign_subvp_index(dc, context);
                }
        }
+
+       if (should_allow_odm_power_optimization(dc, context, vba, split, merge))
+               try_odm_power_optimization_and_revalidate(
+                               dc, context, pipes, split, merge, vlevel, *pipe_cnt);
+
 }
 
 static bool is_dtbclk_required(struct dc *dc, struct dc_state *context)