summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsg <jsg@openbsd.org>2020-04-30 05:18:48 +0000
committerjsg <jsg@openbsd.org>2020-04-30 05:18:48 +0000
commit69c4b8fe1a5cff549bbe62bb1920e6fb3a3baf44 (patch)
tree6700fee22842fc45b83486c2df4ff53a77fe11d1
parentvmd(8): correctly terminate vm processes after sending vm (diff)
downloadwireguard-openbsd-69c4b8fe1a5cff549bbe62bb1920e6fb3a3baf44.tar.xz
wireguard-openbsd-69c4b8fe1a5cff549bbe62bb1920e6fb3a3baf44.zip
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
-rw-r--r--sys/dev/pci/drm/amd/display/dc/core/amdgpu_dc.c23
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) {