HYL_OK3568_LINUX/buildroot/package/weston/0052-backend-drm-Allow-pageflip-error.patch
2025-05-10 21:49:39 +08:00

73 lines
2.2 KiB
Diff

From f9a6415f671d94e4983b33a6b592d77889e5ac6b Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Fri, 13 Aug 2021 10:10:01 +0800
Subject: [PATCH 52/93] backend-drm: Allow pageflip error
Allow to recover from pageflip error:
[02:08:14.089] queueing pageflip failed: Operation not permitted
[02:08:14.090] Couldn't apply state for output eDP-1
[02:08:14.090] repaint-flush failed: No such file or directory
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
libweston/backend-drm/kms.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c
index 52f0c68..690ada0 100644
--- a/libweston/backend-drm/kms.c
+++ b/libweston/backend-drm/kms.c
@@ -1382,6 +1382,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state)
struct drm_backend *b = device->backend;
struct drm_output_state *output_state, *tmp;
struct drm_crtc *crtc;
+ int has_error = 0;
if (device->atomic_modeset)
return drm_pending_state_apply_atomic(pending_state,
@@ -1424,6 +1425,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state)
drm_output_fini_egl(output);
drm_output_init_egl(output, b);
}
+ has_error = 1;
}
}
@@ -1431,7 +1433,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state)
drm_pending_state_free(pending_state);
- return 0;
+ return has_error ? -EACCES : 0;
}
/**
@@ -1447,6 +1449,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state)
struct drm_device *device = pending_state->device;
struct drm_output_state *output_state, *tmp;
struct drm_crtc *crtc;
+ int has_error = 0;
if (device->atomic_modeset)
return drm_pending_state_apply_atomic(pending_state,
@@ -1475,6 +1478,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state)
if (ret != 0) {
weston_log("Couldn't apply state for output %s\n",
output_state->output->base.name);
+ has_error = 1;
}
}
@@ -1482,7 +1486,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state)
drm_pending_state_free(pending_state);
- return 0;
+ return has_error ? -EACCES : 0;
}
void
--
2.20.1