Commit 96b5e3e1 authored by Raymond Yang's avatar Raymond Yang Committed by Alex Deucher

drm/amd/display: fix seamless boot stream adding algorithm

[Why]
Seamless boot stream has hw resource assigned, already.  'add' is
actually rebuild the assignment.

[How]
Swap seamless boot stream to pipe 0 (if needed) to ensure pipe_ctx
matches
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarRaymond Yang <rayyang@amd.com>
Reviewed-by: default avatarMartin Leung <Martin.Leung@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent cf3a2627
...@@ -2075,6 +2075,20 @@ static int acquire_resource_from_hw_enabled_state( ...@@ -2075,6 +2075,20 @@ static int acquire_resource_from_hw_enabled_state(
return -1; return -1;
} }
static void mark_seamless_boot_stream(
const struct dc *dc,
struct dc_stream_state *stream)
{
struct dc_bios *dcb = dc->ctx->dc_bios;
/* TODO: Check Linux */
if (dc->config.allow_seamless_boot_optimization &&
!dcb->funcs->is_accelerated_mode(dcb)) {
if (dc_validate_seamless_boot_timing(dc, stream->sink, &stream->timing))
stream->apply_seamless_boot_optimization = true;
}
}
enum dc_status resource_map_pool_resources( enum dc_status resource_map_pool_resources(
const struct dc *dc, const struct dc *dc,
struct dc_state *context, struct dc_state *context,
...@@ -2085,22 +2099,20 @@ enum dc_status resource_map_pool_resources( ...@@ -2085,22 +2099,20 @@ enum dc_status resource_map_pool_resources(
struct dc_context *dc_ctx = dc->ctx; struct dc_context *dc_ctx = dc->ctx;
struct pipe_ctx *pipe_ctx = NULL; struct pipe_ctx *pipe_ctx = NULL;
int pipe_idx = -1; int pipe_idx = -1;
struct dc_bios *dcb = dc->ctx->dc_bios;
calculate_phy_pix_clks(stream); calculate_phy_pix_clks(stream);
/* TODO: Check Linux */ mark_seamless_boot_stream(dc, stream);
if (dc->config.allow_seamless_boot_optimization &&
!dcb->funcs->is_accelerated_mode(dcb)) {
if (dc_validate_seamless_boot_timing(dc, stream->sink, &stream->timing))
stream->apply_seamless_boot_optimization = true;
}
if (stream->apply_seamless_boot_optimization) if (stream->apply_seamless_boot_optimization) {
pipe_idx = acquire_resource_from_hw_enabled_state( pipe_idx = acquire_resource_from_hw_enabled_state(
&context->res_ctx, &context->res_ctx,
pool, pool,
stream); stream);
if (pipe_idx < 0)
/* hw resource was assigned to other stream */
stream->apply_seamless_boot_optimization = false;
}
if (pipe_idx < 0) if (pipe_idx < 0)
/* acquire new resources */ /* acquire new resources */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment