diff options
author | Wenjing Liu <wenjing.liu@amd.com> | 2023-08-23 20:26:35 +0300 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2023-09-12 00:17:10 +0300 |
commit | 77aac4c2801f44dd9124713832727dcca13ce75e (patch) | |
tree | 1fe8009a1c70268cd635676d465aed927419311a /drivers/gpu/drm/amd/display/dc/dml | |
parent | c51d87202d1faef21e1eee37381b43c72bd231bc (diff) | |
download | linux-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.c | 27 |
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 |