xref: /OK3568_Linux_fs/buildroot/package/weston/0052-backend-drm-Allow-pageflip-error.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom f9a6415f671d94e4983b33a6b592d77889e5ac6b Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Fri, 13 Aug 2021 10:10:01 +0800
4*4882a593SmuzhiyunSubject: [PATCH 52/93] backend-drm: Allow pageflip error
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunAllow to recover from pageflip error:
7*4882a593Smuzhiyun[02:08:14.089] queueing pageflip failed: Operation not permitted
8*4882a593Smuzhiyun[02:08:14.090] Couldn't apply state for output eDP-1
9*4882a593Smuzhiyun[02:08:14.090] repaint-flush failed: No such file or directory
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
12*4882a593Smuzhiyun---
13*4882a593Smuzhiyun libweston/backend-drm/kms.c | 8 ++++++--
14*4882a593Smuzhiyun 1 file changed, 6 insertions(+), 2 deletions(-)
15*4882a593Smuzhiyun
16*4882a593Smuzhiyundiff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c
17*4882a593Smuzhiyunindex 52f0c68..690ada0 100644
18*4882a593Smuzhiyun--- a/libweston/backend-drm/kms.c
19*4882a593Smuzhiyun+++ b/libweston/backend-drm/kms.c
20*4882a593Smuzhiyun@@ -1382,6 +1382,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state)
21*4882a593Smuzhiyun 	struct drm_backend *b = device->backend;
22*4882a593Smuzhiyun 	struct drm_output_state *output_state, *tmp;
23*4882a593Smuzhiyun 	struct drm_crtc *crtc;
24*4882a593Smuzhiyun+	int has_error = 0;
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun 	if (device->atomic_modeset)
27*4882a593Smuzhiyun 		return drm_pending_state_apply_atomic(pending_state,
28*4882a593Smuzhiyun@@ -1424,6 +1425,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state)
29*4882a593Smuzhiyun 				drm_output_fini_egl(output);
30*4882a593Smuzhiyun 				drm_output_init_egl(output, b);
31*4882a593Smuzhiyun 			}
32*4882a593Smuzhiyun+			has_error = 1;
33*4882a593Smuzhiyun 		}
34*4882a593Smuzhiyun 	}
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun@@ -1431,7 +1433,7 @@ drm_pending_state_apply(struct drm_pending_state *pending_state)
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun 	drm_pending_state_free(pending_state);
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun-	return 0;
41*4882a593Smuzhiyun+	return has_error ? -EACCES : 0;
42*4882a593Smuzhiyun }
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun /**
45*4882a593Smuzhiyun@@ -1447,6 +1449,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state)
46*4882a593Smuzhiyun 	struct drm_device *device = pending_state->device;
47*4882a593Smuzhiyun 	struct drm_output_state *output_state, *tmp;
48*4882a593Smuzhiyun 	struct drm_crtc *crtc;
49*4882a593Smuzhiyun+	int has_error = 0;
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun 	if (device->atomic_modeset)
52*4882a593Smuzhiyun 		return drm_pending_state_apply_atomic(pending_state,
53*4882a593Smuzhiyun@@ -1475,6 +1478,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state)
54*4882a593Smuzhiyun 		if (ret != 0) {
55*4882a593Smuzhiyun 			weston_log("Couldn't apply state for output %s\n",
56*4882a593Smuzhiyun 				   output_state->output->base.name);
57*4882a593Smuzhiyun+			has_error = 1;
58*4882a593Smuzhiyun 		}
59*4882a593Smuzhiyun 	}
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun@@ -1482,7 +1486,7 @@ drm_pending_state_apply_sync(struct drm_pending_state *pending_state)
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun 	drm_pending_state_free(pending_state);
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun-	return 0;
66*4882a593Smuzhiyun+	return has_error ? -EACCES : 0;
67*4882a593Smuzhiyun }
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun void
70*4882a593Smuzhiyun--
71*4882a593Smuzhiyun2.20.1
72*4882a593Smuzhiyun
73