summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/dc/dce100
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dce100')
-rw-r--r--drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c78
1 files changed, 16 insertions, 62 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
index b2b03633eb4f..c9dad4e2a7c8 100644
--- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
@@ -654,35 +654,20 @@ static void destruct(struct dce110_resource_pool *pool)
static enum dc_status build_mapped_resource(
const struct dc *dc,
struct validate_context *context,
- struct validate_context *old_context)
+ struct dc_stream_state *stream)
{
enum dc_status status = DC_OK;
- uint8_t i, j;
+ struct pipe_ctx *pipe_ctx = resource_get_head_pipe_for_stream(&context->res_ctx, stream);
- for (i = 0; i < context->stream_count; i++) {
- struct dc_stream_state *stream = context->streams[i];
+ if (!pipe_ctx)
+ return DC_ERROR_UNEXPECTED;
- if (old_context && resource_is_stream_unchanged(old_context, stream))
- continue;
-
- for (j = 0; j < MAX_PIPES; j++) {
- struct pipe_ctx *pipe_ctx =
- &context->res_ctx.pipe_ctx[j];
-
- if (context->res_ctx.pipe_ctx[j].stream != stream)
- continue;
-
- status = dce110_resource_build_pipe_hw_param(pipe_ctx);
+ status = dce110_resource_build_pipe_hw_param(pipe_ctx);
- if (status != DC_OK)
- return status;
+ if (status != DC_OK)
+ return status;
- resource_build_info_frame(pipe_ctx);
-
- /* do not need to validate non root pipes */
- break;
- }
- }
+ resource_build_info_frame(pipe_ctx);
return DC_OK;
}
@@ -719,48 +704,17 @@ static bool dce100_validate_surface_sets(
return true;
}
-enum dc_status dce100_validate_with_context(
+enum dc_status dce100_validate_global(
struct dc *dc,
const struct dc_validation_set set[],
int set_count,
- struct validate_context *context,
- struct validate_context *old_context)
+ struct validate_context *old_context,
+ struct validate_context *context)
{
- struct dc_context *dc_ctx = dc->ctx;
- enum dc_status result = DC_ERROR_UNEXPECTED;
- int i;
-
if (!dce100_validate_surface_sets(set, set_count))
return DC_FAIL_SURFACE_VALIDATE;
- for (i = 0; i < set_count; i++) {
- context->streams[i] = set[i].stream;
- dc_stream_retain(context->streams[i]);
- context->stream_count++;
- }
-
- result = resource_map_pool_resources(dc, context, old_context);
-
- if (result == DC_OK)
- result = resource_map_clock_resources(dc, context, old_context);
-
- if (!resource_validate_attach_surfaces(set, set_count,
- old_context, context, dc->res_pool)) {
- DC_ERROR("Failed to attach surface to stream!\n");
- return DC_FAIL_ATTACH_SURFACES;
- }
-
- if (result == DC_OK)
- result = build_mapped_resource(dc, context, old_context);
-
- if (result == DC_OK)
- result = resource_build_scaling_params_for_context(dc, context);
-
- if (result == DC_OK)
- if (!dce100_validate_bandwidth(dc, context))
- result = DC_FAIL_BANDWIDTH_VALIDATE;
-
- return result;
+ return DC_OK;
}
enum dc_status dce100_validate_guaranteed(
@@ -774,13 +728,13 @@ enum dc_status dce100_validate_guaranteed(
dc_stream_retain(context->streams[0]);
context->stream_count++;
- result = resource_map_pool_resources(dc, context, NULL);
+ result = resource_map_pool_resources(dc, context, dc_stream);
if (result == DC_OK)
- result = resource_map_clock_resources(dc, context, NULL);
+ result = resource_map_clock_resources(dc, context, dc_stream);
if (result == DC_OK)
- result = build_mapped_resource(dc, context, NULL);
+ result = build_mapped_resource(dc, context, dc_stream);
if (result == DC_OK) {
validate_guaranteed_copy_streams(
@@ -816,10 +770,10 @@ enum dc_status dce100_validate_plane(const struct dc_plane_state *plane_state)
static const struct resource_funcs dce100_res_pool_funcs = {
.destroy = dce100_destroy_resource_pool,
.link_enc_create = dce100_link_encoder_create,
- .validate_with_context = dce100_validate_with_context,
.validate_guaranteed = dce100_validate_guaranteed,
.validate_bandwidth = dce100_validate_bandwidth,
.validate_plane = dce100_validate_plane,
+ .validate_global = dce100_validate_global
};
static bool construct(