diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2531-drm-amd-display-Fixed-extend-to-second-screen-mode-h.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2531-drm-amd-display-Fixed-extend-to-second-screen-mode-h.patch | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2531-drm-amd-display-Fixed-extend-to-second-screen-mode-h.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2531-drm-amd-display-Fixed-extend-to-second-screen-mode-h.patch new file mode 100644 index 00000000..703015a3 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2531-drm-amd-display-Fixed-extend-to-second-screen-mode-h.patch @@ -0,0 +1,161 @@ +From f16af8fce7d6e33aaef5904a8899fbc61f93ba36 Mon Sep 17 00:00:00 2001 +From: Yongqiang Sun <yongqiang.sun@amd.com> +Date: Thu, 28 Sep 2017 17:18:27 -0400 +Subject: [PATCH 2531/4131] drm/amd/display: Fixed extend to second screen mode + hang + + 1. Fixed acquire free split pipe bug. + 2. Change return value for dc_add_stream_to_ctx + from bool to enum. + 4. Remove redundant apply_ctx_for_surface calling + 5. Unlock pipe after back end programming. + +Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 +- + drivers/gpu/drm/amd/display/dc/core/dc.c | 48 ++++++++++++----------- + drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 9 ++--- + drivers/gpu/drm/amd/display/dc/dc.h | 2 +- + 4 files changed, 32 insertions(+), 31 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 5d9bf19..a64321b 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -4723,10 +4723,10 @@ static int dm_update_crtcs_state(struct dc *dc, + DRM_DEBUG_DRIVER("Enabling DRM crtc: %d\n", + crtc->base.id); + +- if (!dc_add_stream_to_ctx( ++ if (dc_add_stream_to_ctx( + dc, + dm_state->context, +- new_acrtc_state->stream)) { ++ new_acrtc_state->stream) != DC_OK) { + ret = -EINVAL; + goto fail; + } +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index dfe7406..bd41c1b 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -766,34 +766,27 @@ static bool dc_commit_state_no_check(struct dc *dc, struct dc_state *context) + for (i = 0; i < context->stream_count; i++) { + const struct dc_sink *sink = context->streams[i]->sink; + +- for (j = 0; j < context->stream_status[i].plane_count; j++) { +- dc->hwss.apply_ctx_for_surface( +- dc, context->streams[i], +- context->stream_status[i].plane_count, +- context); ++ dc->hwss.apply_ctx_for_surface( ++ dc, context->streams[i], ++ context->stream_status[i].plane_count, ++ context); + +- /* +- * enable stereo +- * TODO rework dc_enable_stereo call to work with validation sets? +- */ +- for (k = 0; k < MAX_PIPES; k++) { +- pipe = &context->res_ctx.pipe_ctx[k]; +- +- for (l = 0 ; pipe && l < context->stream_count; l++) { +- if (context->streams[l] && +- context->streams[l] == pipe->stream && +- dc->hwss.setup_stereo) +- dc->hwss.setup_stereo(pipe, dc); +- } ++ /* ++ * enable stereo ++ * TODO rework dc_enable_stereo call to work with validation sets? ++ */ ++ for (k = 0; k < MAX_PIPES; k++) { ++ pipe = &context->res_ctx.pipe_ctx[k]; ++ ++ for (l = 0 ; pipe && l < context->stream_count; l++) { ++ if (context->streams[l] && ++ context->streams[l] == pipe->stream && ++ dc->hwss.setup_stereo) ++ dc->hwss.setup_stereo(pipe, dc); + } + } + +- for (j = 0; j < MAX_PIPES; j++) { +- pipe = &context->res_ctx.pipe_ctx[j]; + +- if (!pipe->top_pipe && pipe->stream == context->streams[i]) +- dc->hwss.pipe_control_lock(dc, pipe, false); +- } + + CONN_MSG_MODE(sink->link, "{%dx%d, %dx%d@%dKhz}", + context->streams[i]->timing.h_addressable, +@@ -815,6 +808,15 @@ static bool dc_commit_state_no_check(struct dc *dc, struct dc_state *context) + + dc_enable_stereo(dc, context, dc_streams, context->stream_count); + ++ for (i = 0; i < context->stream_count; i++) { ++ for (j = 0; j < MAX_PIPES; j++) { ++ pipe = &context->res_ctx.pipe_ctx[j]; ++ ++ if (!pipe->top_pipe && pipe->stream == context->streams[i]) ++ dc->hwss.pipe_control_lock(dc, pipe, false); ++ } ++ } ++ + dc_release_state(dc->current_state); + + dc->current_state = context; +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +index c31dccd..c60f530 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +@@ -1446,7 +1446,7 @@ bool resource_is_stream_unchanged( + return false; + } + +-bool dc_add_stream_to_ctx( ++enum dc_status dc_add_stream_to_ctx( + struct dc *dc, + struct dc_state *new_ctx, + struct dc_stream_state *stream) +@@ -1467,7 +1467,7 @@ bool dc_add_stream_to_ctx( + if (res != DC_OK) + DC_ERROR("Adding stream %p to context failed with err %d!\n", stream, res); + +- return res == DC_OK; ++ return res; + } + + bool dc_remove_stream_from_ctx( +@@ -1640,10 +1640,9 @@ enum dc_status resource_map_pool_resources( + /* acquire new resources */ + pipe_idx = acquire_first_free_pipe(&context->res_ctx, pool, stream); + +-#if defined(CONFIG_DRM_AMD_DC_DCN1_0) + if (pipe_idx < 0) +- acquire_first_split_pipe(&context->res_ctx, pool, stream); +-#endif ++ pipe_idx = acquire_first_split_pipe(&context->res_ctx, pool, stream); ++ + if (pipe_idx < 0) + return DC_NO_CONTROLLER_RESOURCE; + +diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h +index dfc9d2b..732276f 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc.h ++++ b/drivers/gpu/drm/amd/display/dc/dc.h +@@ -643,7 +643,7 @@ bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream, + uint32_t *h_position, + uint32_t *v_position); + +-bool dc_add_stream_to_ctx( ++enum dc_status dc_add_stream_to_ctx( + struct dc *dc, + struct dc_state *new_ctx, + struct dc_stream_state *stream); +-- +2.7.4 + |