mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
drm/amd/display: Refactor dc_validation_set array into single root struct
[Why] dc_validate_with_context() took a C array of per-stream elements plus a separate count. This flat array cannot be extended to carry global objects without widening the signature further. [How] Rename the per-stream element to dc_validation_stream, and make dc_validation_set a root struct holding streams[MAX_STREAMS] and stream_count. Update dc_validate_with_context() to take a single const dc_validation_set * and propagate the new shape through all DC-layer callers and helpers. Remove the never-implemented dce112_validate_with_context declaration and the orphaned dce100 forward-declare. No behavior change. Reviewed-by: Dominik Kaszewski <dominik.kaszewski@amd.com> Signed-off-by: Wenjing Liu <wenjing.liu@amd.com> Signed-off-by: Wayne Lin <wayne.lin@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a7e804e427
commit
2ab5a13778
|
|
@ -2479,7 +2479,7 @@ enum dc_status dc_commit_streams(struct dc *dc, struct dc_commit_streams_params
|
|||
unsigned int i, j;
|
||||
struct dc_state *context;
|
||||
enum dc_status res = DC_OK;
|
||||
struct dc_validation_set set[MAX_STREAMS] = {0};
|
||||
struct dc_validation_set set = {0};
|
||||
struct pipe_ctx *pipe;
|
||||
bool handle_exit_odm2to1 = false;
|
||||
|
||||
|
|
@ -2512,14 +2512,15 @@ enum dc_status dc_commit_streams(struct dc *dc, struct dc_commit_streams_params
|
|||
|
||||
dc_stream_log(dc, stream);
|
||||
|
||||
set[i].stream = stream;
|
||||
set.streams[i].stream = stream;
|
||||
|
||||
if (status) {
|
||||
set[i].plane_count = (uint8_t)status->plane_count;
|
||||
set.streams[i].plane_count = (uint8_t)status->plane_count;
|
||||
for (j = 0; j < (unsigned int)status->plane_count; j++)
|
||||
set[i].plane_states[j] = status->plane_states[j];
|
||||
set.streams[i].plane_states[j] = status->plane_states[j];
|
||||
}
|
||||
}
|
||||
set.stream_count = (uint8_t)params->stream_count;
|
||||
|
||||
/* ODM Combine 2:1 power optimization is only applied for single stream
|
||||
* scenario, it uses extra pipes than needed to reduce power consumption
|
||||
|
|
@ -2543,7 +2544,7 @@ enum dc_status dc_commit_streams(struct dc *dc, struct dc_commit_streams_params
|
|||
|
||||
context->power_source = params->power_source;
|
||||
|
||||
res = dc_validate_with_context(dc, set, params->stream_count, context, DC_VALIDATE_MODE_AND_PROGRAMMING);
|
||||
res = dc_validate_with_context(dc, &set, context, DC_VALIDATE_MODE_AND_PROGRAMMING);
|
||||
|
||||
/*
|
||||
* Only update link encoder to stream assignment after bandwidth validation passed.
|
||||
|
|
|
|||
|
|
@ -4325,8 +4325,7 @@ bool dc_resource_is_dsc_encoding_supported(const struct dc *dc)
|
|||
|
||||
static bool planes_changed_for_existing_stream(struct dc_state *context,
|
||||
struct dc_stream_state *stream,
|
||||
const struct dc_validation_set set[],
|
||||
unsigned int set_count)
|
||||
const struct dc_validation_set *set)
|
||||
{
|
||||
unsigned int i, j;
|
||||
struct dc_stream_status *stream_status = NULL;
|
||||
|
|
@ -4343,18 +4342,18 @@ static bool planes_changed_for_existing_stream(struct dc_state *context,
|
|||
return false;
|
||||
}
|
||||
|
||||
for (i = 0; i < set_count; i++)
|
||||
if (set[i].stream == stream)
|
||||
for (i = 0; i < set->stream_count; i++)
|
||||
if (set->streams[i].stream == stream)
|
||||
break;
|
||||
|
||||
if (i == set_count)
|
||||
if (i == set->stream_count)
|
||||
ASSERT(0);
|
||||
|
||||
if (set[i].plane_count != stream_status->plane_count)
|
||||
if (set->streams[i].plane_count != stream_status->plane_count)
|
||||
return true;
|
||||
|
||||
for (j = 0; j < set[i].plane_count; j++)
|
||||
if (set[i].plane_states[j] != stream_status->plane_states[j])
|
||||
for (j = 0; j < set->streams[i].plane_count; j++)
|
||||
if (set->streams[i].plane_states[j] != stream_status->plane_states[j])
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -4363,23 +4362,22 @@ static bool planes_changed_for_existing_stream(struct dc_state *context,
|
|||
static bool add_all_planes_for_stream(
|
||||
const struct dc *dc,
|
||||
struct dc_stream_state *stream,
|
||||
const struct dc_validation_set set[],
|
||||
unsigned int set_count,
|
||||
const struct dc_validation_set *set,
|
||||
struct dc_state *state)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
for (i = 0; i < set_count; i++)
|
||||
if (set[i].stream == stream)
|
||||
for (i = 0; i < set->stream_count; i++)
|
||||
if (set->streams[i].stream == stream)
|
||||
break;
|
||||
|
||||
if (i == set_count) {
|
||||
if (i == set->stream_count) {
|
||||
dm_error("Stream %p not found in set!\n", stream);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (j = 0; j < set[i].plane_count; j++)
|
||||
if (!dc_state_add_plane(dc, stream, set[i].plane_states[j], state))
|
||||
for (j = 0; j < set->streams[i].plane_count; j++)
|
||||
if (!dc_state_add_plane(dc, stream, set->streams[i].plane_states[j], state))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -4389,8 +4387,7 @@ static bool add_all_planes_for_stream(
|
|||
* dc_validate_with_context - Validate and update the potential new stream in the context object
|
||||
*
|
||||
* @dc: Used to get the current state status
|
||||
* @set: An array of dc_validation_set with all the current streams reference
|
||||
* @set_count: Total of streams
|
||||
* @set: Root validation object holding all streams and their planes
|
||||
* @context: New context
|
||||
* @validate_mode: identify the validation mode
|
||||
*
|
||||
|
|
@ -4404,8 +4401,7 @@ static bool add_all_planes_for_stream(
|
|||
* In case of success, return DC_OK (1), otherwise, return a DC error.
|
||||
*/
|
||||
enum dc_status dc_validate_with_context(struct dc *dc,
|
||||
const struct dc_validation_set set[],
|
||||
unsigned int set_count,
|
||||
const struct dc_validation_set *set,
|
||||
struct dc_state *context,
|
||||
enum dc_validate_mode validate_mode)
|
||||
{
|
||||
|
|
@ -4426,8 +4422,8 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
for (i = 0; i < old_stream_count; i++) {
|
||||
struct dc_stream_state *stream = context->streams[i];
|
||||
|
||||
for (j = 0; j < set_count; j++) {
|
||||
if (stream == set[j].stream) {
|
||||
for (j = 0; j < set->stream_count; j++) {
|
||||
if (stream == set->streams[j].stream) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -4440,8 +4436,8 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
}
|
||||
|
||||
/* Second, build a list of new streams */
|
||||
for (i = 0; i < set_count; i++) {
|
||||
struct dc_stream_state *stream = set[i].stream;
|
||||
for (i = 0; i < set->stream_count; i++) {
|
||||
struct dc_stream_state *stream = set->streams[i].stream;
|
||||
|
||||
for (j = 0; j < old_stream_count; j++) {
|
||||
if (stream == context->streams[j]) {
|
||||
|
|
@ -4459,10 +4455,10 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
/* Build a list of unchanged streams which is necessary for handling
|
||||
* planes change such as added, removed, and updated.
|
||||
*/
|
||||
for (i = 0; i < set_count; i++) {
|
||||
for (i = 0; i < set->stream_count; i++) {
|
||||
/* Check if stream is part of the delete list */
|
||||
for (j = 0; j < del_streams_count; j++) {
|
||||
if (set[i].stream == del_streams[j]) {
|
||||
if (set->streams[i].stream == del_streams[j]) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -4471,7 +4467,7 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
if (!found) {
|
||||
/* Check if stream is part of the add list */
|
||||
for (j = 0; j < add_streams_count; j++) {
|
||||
if (set[i].stream == add_streams[j]) {
|
||||
if (set->streams[i].stream == add_streams[j]) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -4479,7 +4475,7 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
}
|
||||
|
||||
if (!found)
|
||||
unchanged_streams[unchanged_streams_count++] = set[i].stream;
|
||||
unchanged_streams[unchanged_streams_count++] = set->streams[i].stream;
|
||||
|
||||
found = false;
|
||||
}
|
||||
|
|
@ -4488,8 +4484,7 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
for (i = 0; i < unchanged_streams_count; i++) {
|
||||
if (planes_changed_for_existing_stream(context,
|
||||
unchanged_streams[i],
|
||||
set,
|
||||
set_count)) {
|
||||
set)) {
|
||||
|
||||
if (!dc_state_rem_all_planes_for_stream(dc,
|
||||
unchanged_streams[i],
|
||||
|
|
@ -4557,7 +4552,7 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
if (res != DC_OK)
|
||||
goto fail;
|
||||
|
||||
if (!add_all_planes_for_stream(dc, add_streams[i], set, set_count, context)) {
|
||||
if (!add_all_planes_for_stream(dc, add_streams[i], set, context)) {
|
||||
res = DC_FAIL_ATTACH_SURFACES;
|
||||
goto fail;
|
||||
}
|
||||
|
|
@ -4567,9 +4562,8 @@ enum dc_status dc_validate_with_context(struct dc *dc,
|
|||
for (i = 0; i < unchanged_streams_count; i++) {
|
||||
if (planes_changed_for_existing_stream(context,
|
||||
unchanged_streams[i],
|
||||
set,
|
||||
set_count)) {
|
||||
if (!add_all_planes_for_stream(dc, unchanged_streams[i], set, set_count, context)) {
|
||||
set)) {
|
||||
if (!add_all_planes_for_stream(dc, unchanged_streams[i], set, context)) {
|
||||
res = DC_FAIL_ATTACH_SURFACES;
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2182,9 +2182,9 @@ void dc_post_update_surfaces_to_stream(
|
|||
void dc_get_default_tiling_info(const struct dc *dc, struct dc_tiling_info *tiling_info);
|
||||
|
||||
/**
|
||||
* struct dc_validation_set - Struct to store surface/stream associations for validation
|
||||
* struct dc_validation_stream - Per-stream surface/stream association for validation
|
||||
*/
|
||||
struct dc_validation_set {
|
||||
struct dc_validation_stream {
|
||||
/**
|
||||
* @stream: Stream state properties
|
||||
*/
|
||||
|
|
@ -2201,6 +2201,21 @@ struct dc_validation_set {
|
|||
uint8_t plane_count;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dc_validation_set - Root validation input grouping all streams for a commit
|
||||
*/
|
||||
struct dc_validation_set {
|
||||
/**
|
||||
* @streams: Per-stream entries (stream + its planes)
|
||||
*/
|
||||
struct dc_validation_stream streams[MAX_STREAMS];
|
||||
|
||||
/**
|
||||
* @stream_count: Number of active entries in @streams
|
||||
*/
|
||||
uint8_t stream_count;
|
||||
};
|
||||
|
||||
bool dc_validate_boot_timing(const struct dc *dc,
|
||||
const struct dc_sink *sink,
|
||||
struct dc_crtc_timing *crtc_timing);
|
||||
|
|
@ -2208,8 +2223,7 @@ bool dc_validate_boot_timing(const struct dc *dc,
|
|||
enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *plane_state);
|
||||
|
||||
enum dc_status dc_validate_with_context(struct dc *dc,
|
||||
const struct dc_validation_set set[],
|
||||
unsigned int set_count,
|
||||
const struct dc_validation_set *set,
|
||||
struct dc_state *context,
|
||||
enum dc_validate_mode validate_mode);
|
||||
|
||||
|
|
|
|||
|
|
@ -577,8 +577,7 @@ struct pipe_ctx *resource_find_free_secondary_pipe_legacy(
|
|||
const struct pipe_ctx *primary_pipe);
|
||||
|
||||
bool resource_validate_attach_surfaces(
|
||||
const struct dc_validation_set set[],
|
||||
int set_count,
|
||||
const struct dc_validation_set *set,
|
||||
const struct dc_state *old_context,
|
||||
struct dc_state *context,
|
||||
const struct resource_pool *pool);
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
|
||||
struct dc;
|
||||
struct resource_pool;
|
||||
struct dc_validation_set;
|
||||
|
||||
struct resource_pool *dce100_create_resource_pool(
|
||||
uint8_t num_virtual_links,
|
||||
|
|
|
|||
|
|
@ -35,13 +35,6 @@ struct resource_pool *dce112_create_resource_pool(
|
|||
uint8_t num_virtual_links,
|
||||
struct dc *dc);
|
||||
|
||||
enum dc_status dce112_validate_with_context(
|
||||
struct dc *dc,
|
||||
const struct dc_validation_set set[],
|
||||
int set_count,
|
||||
struct dc_state *context,
|
||||
struct dc_state *old_context);
|
||||
|
||||
enum dc_status dce112_validate_bandwidth(
|
||||
struct dc *dc,
|
||||
struct dc_state *context,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user