mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
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: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Raymond Yang <rayyang@amd.com> Reviewed-by: Martin Leung <Martin.Leung@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
cf3a262759
commit
96b5e3e1f8
|
|
@ -2075,6 +2075,20 @@ static int acquire_resource_from_hw_enabled_state(
|
|||
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(
|
||||
const struct dc *dc,
|
||||
struct dc_state *context,
|
||||
|
|
@ -2085,22 +2099,20 @@ enum dc_status resource_map_pool_resources(
|
|||
struct dc_context *dc_ctx = dc->ctx;
|
||||
struct pipe_ctx *pipe_ctx = NULL;
|
||||
int pipe_idx = -1;
|
||||
struct dc_bios *dcb = dc->ctx->dc_bios;
|
||||
|
||||
calculate_phy_pix_clks(stream);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
mark_seamless_boot_stream(dc, stream);
|
||||
|
||||
if (stream->apply_seamless_boot_optimization)
|
||||
if (stream->apply_seamless_boot_optimization) {
|
||||
pipe_idx = acquire_resource_from_hw_enabled_state(
|
||||
&context->res_ctx,
|
||||
pool,
|
||||
stream);
|
||||
if (pipe_idx < 0)
|
||||
/* hw resource was assigned to other stream */
|
||||
stream->apply_seamless_boot_optimization = false;
|
||||
}
|
||||
|
||||
if (pipe_idx < 0)
|
||||
/* acquire new resources */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user