diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0471-drm-amd-display-Allow-update-stream-without-surface.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0471-drm-amd-display-Allow-update-stream-without-surface.patch | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0471-drm-amd-display-Allow-update-stream-without-surface.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0471-drm-amd-display-Allow-update-stream-without-surface.patch new file mode 100644 index 00000000..18340d41 --- /dev/null +++ b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0471-drm-amd-display-Allow-update-stream-without-surface.patch @@ -0,0 +1,97 @@ +From 97b414e2cacefa8c86ed4620c85ba04668985a78 Mon Sep 17 00:00:00 2001 +From: Corbin McElhanney <corbin.mcelhanney@amd.com> +Date: Tue, 23 May 2017 15:26:57 -0400 +Subject: [PATCH 0471/4131] drm/amd/display: Allow update stream without + surface + +Passing NULL as surfaceUpdates to dc_update_surfaces_and_stream now +updates just the stream. Code that is dependent on srf_updates was moved +below the NULL check. + +Signed-off-by: Corbin McElhanney <corbin.mcelhanney@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc.c | 58 +++++++++++++++++--------------- + 1 file changed, 31 insertions(+), 27 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index f534997..c33e31c 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -1223,33 +1223,7 @@ void dc_update_surfaces_and_stream(struct dc *dc, + if (!stream_status) + return; /* Cannot commit surface to stream that is not committed */ + +- update_type = dc_check_update_surfaces_for_stream( +- dc, srf_updates, surface_count, stream_update, stream_status); +- +- if (update_type >= update_surface_trace_level) +- update_surface_trace(dc, srf_updates, surface_count); +- +- if (update_type >= UPDATE_TYPE_FULL) { +- const struct dc_surface *new_surfaces[MAX_SURFACES] = { 0 }; +- +- for (i = 0; i < surface_count; i++) +- new_surfaces[i] = srf_updates[i].surface; +- +- /* initialize scratch memory for building context */ +- context = dm_alloc(sizeof(*context)); +- dc_resource_validate_ctx_copy_construct( +- core_dc->current_context, context); +- +- /* add surface to context */ +- if (!resource_attach_surfaces_to_context( +- new_surfaces, surface_count, dc_stream, +- context, core_dc->res_pool)) { +- BREAK_TO_DEBUGGER(); +- goto fail; +- } +- } else { +- context = core_dc->current_context; +- } ++ context = core_dc->current_context; + + /* update current stream with the new updates */ + if (stream_update) { +@@ -1277,6 +1251,36 @@ void dc_update_surfaces_and_stream(struct dc *dc, + } + } + ++ /* only proceed if we need to make a surface update */ ++ if (!srf_updates) ++ return; ++ ++ update_type = dc_check_update_surfaces_for_stream( ++ dc, srf_updates, surface_count, stream_update, stream_status); ++ ++ if (update_type >= update_surface_trace_level) ++ update_surface_trace(dc, srf_updates, surface_count); ++ ++ if (update_type >= UPDATE_TYPE_FULL) { ++ const struct dc_surface *new_surfaces[MAX_SURFACES] = { 0 }; ++ ++ for (i = 0; i < surface_count; i++) ++ new_surfaces[i] = srf_updates[i].surface; ++ ++ /* initialize scratch memory for building context */ ++ context = dm_alloc(sizeof(*context)); ++ dc_resource_validate_ctx_copy_construct( ++ core_dc->current_context, context); ++ ++ /* add surface to context */ ++ if (!resource_attach_surfaces_to_context( ++ new_surfaces, surface_count, dc_stream, ++ context, core_dc->res_pool)) { ++ BREAK_TO_DEBUGGER(); ++ goto fail; ++ } ++ } ++ + /* save update parameters into surface */ + for (i = 0; i < surface_count; i++) { + struct core_surface *surface = +-- +2.7.4 + |