Skip to content

Commit

Permalink
drm/amd/display: Backup and restore plane configuration only on update
Browse files Browse the repository at this point in the history
[WHY&HOW]
When backing up and restoring plane states for minimal transition
cases, only configuration should be backed up and restored. Information
only relevant to the object/allocation (like refcount) should be
excluded. Also move this interface to dc_plane.h.

Reviewed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Dillon Varone <Dillon.Varone@amd.com>
Signed-off-by: Ray Wu <ray.wu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Dillon Varone authored and Alex Deucher committed May 13, 2025
1 parent 0a5c060 commit 3705217
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
8 changes: 3 additions & 5 deletions drivers/gpu/drm/amd/display/dc/core/dc.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "resource.h"
#include "dc_state.h"
#include "dc_state_priv.h"
#include "dc_plane.h"
#include "dc_plane_priv.h"
#include "dc_stream_priv.h"

Expand Down Expand Up @@ -3320,7 +3321,7 @@ static void backup_planes_and_stream_state(
return;

for (i = 0; i < status->plane_count; i++) {
scratch->plane_states[i] = *status->plane_states[i];
dc_plane_copy_config(&scratch->plane_states[i], status->plane_states[i]);
}
scratch->stream_state = *stream;
}
Expand All @@ -3336,10 +3337,7 @@ static void restore_planes_and_stream_state(
return;

for (i = 0; i < status->plane_count; i++) {
/* refcount will always be valid, restore everything else */
struct kref refcount = status->plane_states[i]->refcount;
*status->plane_states[i] = scratch->plane_states[i];
status->plane_states[i]->refcount = refcount;
dc_plane_copy_config(status->plane_states[i], &scratch->plane_states[i]);
}
*stream = scratch->stream_state;
}
Expand Down
14 changes: 14 additions & 0 deletions drivers/gpu/drm/amd/display/dc/core/dc_surface.c
Original file line number Diff line number Diff line change
Expand Up @@ -294,3 +294,17 @@ void dc_plane_force_dcc_and_tiling_disable(struct dc_plane_state *plane_state,
dc->hwss.clear_surface_dcc_and_tiling(pipe_ctx, plane_state, clear_tiling);
}
}

void dc_plane_copy_config(struct dc_plane_state *dst, const struct dc_plane_state *src)
{
struct kref temp_refcount;

/* backup persistent info */
memcpy(&temp_refcount, &dst->refcount, sizeof(struct kref));

/* copy all configuration information */
memcpy(dst, src, sizeof(struct dc_plane_state));

/* restore persistent info */
memcpy(&dst->refcount, &temp_refcount, sizeof(struct kref));
}
3 changes: 3 additions & 0 deletions drivers/gpu/drm/amd/display/dc/dc_plane.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,7 @@ void dc_plane_state_release(struct dc_plane_state *plane_state);
void dc_plane_force_dcc_and_tiling_disable(struct dc_plane_state *plane_state,
bool clear_tiling);


void dc_plane_copy_config(struct dc_plane_state *dst, const struct dc_plane_state *src);

#endif /* _DC_PLANE_H_ */

0 comments on commit 3705217

Please sign in to comment.