Skip to content

Commit

Permalink
drm/amd/display: Include surface of unaffected streams
Browse files Browse the repository at this point in the history
[ Upstream commit f6ae69f ]

The commit stream function does not include surfaces of unaffected
streams, which may lead to some blank screens during mode change in some
edge cases. This commit adds surfaces of unaffected streams followed by
kernel-doc for documenting some of the fields that participate in this
change.

v2: squash in kerneldoc warning fix (Alex)

Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Co-developed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Stable-dep-of: 59de751 ("drm/amd/display: add ODM case when looking for first split pipe")
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
rodrigosiqueira authored and gregkh committed Aug 3, 2023
1 parent d5b3e4c commit a5397c8
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
12 changes: 11 additions & 1 deletion drivers/gpu/drm/amd/display/dc/core/dc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1930,9 +1930,10 @@ enum dc_status dc_commit_streams(struct dc *dc,
struct dc_stream_state *streams[],
uint8_t stream_count)
{
int i;
int i, j;
struct dc_state *context;
enum dc_status res = DC_OK;
struct dc_validation_set set[MAX_STREAMS] = {0};

if (!streams_changed(dc, streams, stream_count))
return res;
Expand All @@ -1941,8 +1942,17 @@ enum dc_status dc_commit_streams(struct dc *dc,

for (i = 0; i < stream_count; i++) {
struct dc_stream_state *stream = streams[i];
struct dc_stream_status *status = dc_stream_get_status(stream);

dc_stream_log(dc, stream);

set[i].stream = stream;

if (status) {
set[i].plane_count = status->plane_count;
for (j = 0; j < status->plane_count; j++)
set[i].plane_states[j] = status->plane_states[j];
}
}

context = dc_create_state(dc);
Expand Down
15 changes: 13 additions & 2 deletions drivers/gpu/drm/amd/display/dc/dc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1274,12 +1274,23 @@ void dc_post_update_surfaces_to_stream(

#include "dc_stream.h"

/*
* Structure to store surface/stream associations for validation
/**
* struct dc_validation_set - Struct to store surface/stream associations for validation
*/
struct dc_validation_set {
/**
* @stream: Stream state properties
*/
struct dc_stream_state *stream;

/**
* @plane_state: Surface state
*/
struct dc_plane_state *plane_states[MAX_SURFACES];

/**
* @plane_count: Total of active planes
*/
uint8_t plane_count;
};

Expand Down
4 changes: 4 additions & 0 deletions drivers/gpu/drm/amd/display/dc/dc_stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ struct timing_sync_info {
struct dc_stream_status {
int primary_otg_inst;
int stream_enc_inst;

/**
* @plane_count: Total of planes attached to a single stream
*/
int plane_count;
int audio_inst;
struct timing_sync_info timing_sync_info;
Expand Down

0 comments on commit a5397c8

Please sign in to comment.