diff options
author | Corbin McElhanney <corbin.mcelhanney@amd.com> | 2017-05-23 15:26:57 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-26 18:07:34 -0400 |
commit | c7dbdf1535a34741a8805d04a9ae75a887d8b581 (patch) | |
tree | 1da4ce8046b5ac11fa38dc76d842e8d09aa1dfe6 /drivers | |
parent | 29eba8e88f3665b5099d0c4ef7180b631846aa0b (diff) | |
download | linux-c7dbdf1535a34741a8805d04a9ae75a887d8b581.tar.bz2 |
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc.c | 58 |
1 files 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 f5349970b594..c33e31c9e3e1 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 = |