diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2020-04-30 05:18:49 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2020-04-30 05:18:49 +0000 |
commit | 4abff6af50df0cd920dd396376635656017eaead (patch) | |
tree | 21bce9b87a6ccb7e00654d375beffcea9b93eb06 /sys/dev | |
parent | aa0e383256cf43b2d3583c5d03ff27804627000c (diff) |
drm/amd/display: Not doing optimize bandwidth if flip pending.
From Yongqiang Sun
de32c6ad7a4fcb986e0e4f39d7497948b734b8c7 in linux 4.19.y/4.19.119
9941b8129030c9202aaf39114477a0e58c0d6ffc in mainline linux
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/pci/drm/amd/display/dc/core/amdgpu_dc.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/dev/pci/drm/amd/display/dc/core/amdgpu_dc.c b/sys/dev/pci/drm/amd/display/dc/core/amdgpu_dc.c index 2b2efe443c3..b64ad9e1f0c 100644 --- a/sys/dev/pci/drm/amd/display/dc/core/amdgpu_dc.c +++ b/sys/dev/pci/drm/amd/display/dc/core/amdgpu_dc.c @@ -996,6 +996,26 @@ bool dc_commit_state(struct dc *dc, struct dc_state *context) return (result == DC_OK); } +static bool is_flip_pending_in_pipes(struct dc *dc, struct dc_state *context) +{ + int i; + struct pipe_ctx *pipe; + + for (i = 0; i < MAX_PIPES; i++) { + pipe = &context->res_ctx.pipe_ctx[i]; + + if (!pipe->plane_state) + continue; + + /* Must set to false to start with, due to OR in update function */ + pipe->plane_state->status.is_flip_pending = false; + dc->hwss.update_pending_status(pipe); + if (pipe->plane_state->status.is_flip_pending) + return true; + } + return false; +} + bool dc_post_update_surfaces_to_stream(struct dc *dc) { int i; @@ -1003,6 +1023,9 @@ bool dc_post_update_surfaces_to_stream(struct dc *dc) post_surface_trace(dc); + if (is_flip_pending_in_pipes(dc, context)) + return true; + for (i = 0; i < dc->res_pool->pipe_count; i++) if (context->res_ctx.pipe_ctx[i].stream == NULL || context->res_ctx.pipe_ctx[i].plane_state == NULL) { |