Skip to content

Commit c85c2c8

Browse files
Alvin Leealexdeucher
authored andcommitted
drm/amd/display: Take full update path if number of planes changed
[Description] - A full update is required if the number of planes for a given stream changes - The new fast update path only checked for stream and plane updates, but there could be a plane addition or removal without one of the stream and plane updates triggering a full update - Add an explicit check for number of planes changing for a full update Reviewed-by: Samson Tam <[email protected]> Acked-by: Rodrigo Siqueira <[email protected]> Signed-off-by: Alvin Lee <[email protected]> Tested-by: Daniel Wheeler <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent d5b5d6c commit c85c2c8

File tree

1 file changed

+14
-5
lines changed
  • drivers/gpu/drm/amd/display/dc/core

1 file changed

+14
-5
lines changed

drivers/gpu/drm/amd/display/dc/core/dc.c

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4286,10 +4286,12 @@ static bool fast_updates_exist(struct dc_fast_update *fast_update, int surface_c
42864286

42874287
static bool full_update_required(struct dc_surface_update *srf_updates,
42884288
int surface_count,
4289-
struct dc_stream_update *stream_update)
4289+
struct dc_stream_update *stream_update,
4290+
struct dc_stream_state *stream)
42904291
{
42914292

42924293
int i;
4294+
struct dc_stream_status *stream_status;
42934295

42944296
for (i = 0; i < surface_count; i++) {
42954297
if (srf_updates &&
@@ -4333,16 +4335,23 @@ static bool full_update_required(struct dc_surface_update *srf_updates,
43334335
stream_update->crtc_timing_adjust))
43344336
return true;
43354337

4338+
if (stream) {
4339+
stream_status = dc_stream_get_status(stream);
4340+
if (stream_status == NULL || stream_status->plane_count != surface_count)
4341+
return true;
4342+
}
4343+
43364344
return false;
43374345
}
43384346

43394347
static bool fast_update_only(struct dc_fast_update *fast_update,
43404348
struct dc_surface_update *srf_updates,
43414349
int surface_count,
4342-
struct dc_stream_update *stream_update)
4350+
struct dc_stream_update *stream_update,
4351+
struct dc_stream_state *stream)
43434352
{
43444353
return fast_updates_exist(fast_update, surface_count)
4345-
&& !full_update_required(srf_updates, surface_count, stream_update);
4354+
&& !full_update_required(srf_updates, surface_count, stream_update, stream);
43464355
}
43474356

43484357
bool dc_update_planes_and_stream(struct dc *dc,
@@ -4414,7 +4423,7 @@ bool dc_update_planes_and_stream(struct dc *dc,
44144423
}
44154424

44164425
update_seamless_boot_flags(dc, context, surface_count, stream);
4417-
if (fast_update_only(fast_update, srf_updates, surface_count, stream_update) &&
4426+
if (fast_update_only(fast_update, srf_updates, surface_count, stream_update, stream) &&
44184427
!dc->debug.enable_legacy_fast_update) {
44194428
commit_planes_for_stream_fast(dc,
44204429
srf_updates,
@@ -4560,7 +4569,7 @@ void dc_commit_updates_for_stream(struct dc *dc,
45604569
TRACE_DC_PIPE_STATE(pipe_ctx, i, MAX_PIPES);
45614570

45624571
update_seamless_boot_flags(dc, context, surface_count, stream);
4563-
if (fast_update_only(fast_update, srf_updates, surface_count, stream_update) &&
4572+
if (fast_update_only(fast_update, srf_updates, surface_count, stream_update, stream) &&
45644573
!dc->debug.enable_legacy_fast_update) {
45654574
commit_planes_for_stream_fast(dc,
45664575
srf_updates,

0 commit comments

Comments
 (0)