summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/dc/dml
diff options
context:
space:
mode:
authorWenjing Liu <wenjing.liu@amd.com>2023-08-23 20:26:35 +0300
committerAlex Deucher <alexander.deucher@amd.com>2023-09-12 00:17:10 +0300
commit77aac4c2801f44dd9124713832727dcca13ce75e (patch)
tree1fe8009a1c70268cd635676d465aed927419311a /drivers/gpu/drm/amd/display/dc/dml
parentc51d87202d1faef21e1eee37381b43c72bd231bc (diff)
downloadlinux-77aac4c2801f44dd9124713832727dcca13ce75e.tar.xz
drm/amd/display: only allow ODM power optimization if surface is within guaranteed viewport size
[why] Current dc update design has limitation to support transition from ODM combine to minimum transition to MPC combine state seamlessly at the capability boundary when MPO plane is resizing. This will require dc update high level refactor in order to remove the design limitation. The decision is to block such use case for existing products by limiting ODM power optimization support for only those surfaces within guaranteed viewport size. This will prevent us from transitioning to MPC combine state when ODM power optimization is enabled. 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>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dml')
-rw-r--r--drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
index 883e90be2257..2358c9100cff 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c
@@ -1267,6 +1267,8 @@ static bool should_allow_odm_power_optimization(struct dc *dc,
{
struct dc_stream_state *stream = context->streams[0];
struct pipe_slice_table slice_table;
+ struct dc_plane_state *plane;
+ struct rect guaranteed_viewport;
int i;
/*
@@ -1331,6 +1333,31 @@ static bool should_allow_odm_power_optimization(struct dc *dc,
for (i = 0; i < slice_table.odm_combine_count; i++)
if (slice_table.odm_combines[i].slice_count > 1)
return false;
+
+ /* up to here we know that a plane with viewport equal to stream
+ * src can be validated with single DPP pipe. Therefore any
+ * planes with smaller or equal viewport is guaranteed to work
+ * regardless of its position and scaling ratio. Also we know
+ * any plane without downscale ratio greater than 1 should also
+ * work. Up until DCN3x we still have software limitation that
+ * doesn't implement a smooth transition between ODM combine and
+ * MPC combine during plane resizing when we are crossing ODM
+ * capability boundary. So we are adding this guaranteed
+ * viewport condition to limit ODM power optimization support
+ * for only the planes within the guaranteed viewport size. Such
+ * planes can be supported with ODM power optimization without
+ * ever the need to transition to MPC combine in any scaling
+ * ratios and positions. Therefore we cover the software
+ * limitation of this transition sequence.
+ */
+ guaranteed_viewport = stream->src;
+ for (i = 0; i < context->stream_status[0].plane_count; i++) {
+ plane = context->stream_status[0].plane_states[i];
+
+ if ((plane->src_rect.height > plane->dst_rect.height && plane->src_rect.height > guaranteed_viewport.height) ||
+ (plane->src_rect.width > plane->dst_rect.width && plane->src_rect.width > guaranteed_viewport.width))
+ return false;
+ }
} else {
/*
* the new ODM power optimization feature reduces software