1*4882a593SmuzhiyunFrom b19a3ce2e942bd534760a4316e4a26a5dc113f67 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Fri, 2 Apr 2021 11:23:36 +0800
4*4882a593SmuzhiyunSubject: [PATCH 05/79] backend-drm: Bind Nth primary plane to Nth CRTC
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunThe vop2 allows primary planes to bind with random CRTC, but we need to
7*4882a593Smuzhiyunuse the same pair as the driver registered.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
10*4882a593Smuzhiyun---
11*4882a593Smuzhiyun libweston/backend-drm/drm.c | 18 +++++++++++++++++-
12*4882a593Smuzhiyun 1 file changed, 17 insertions(+), 1 deletion(-)
13*4882a593Smuzhiyun
14*4882a593Smuzhiyundiff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c
15*4882a593Smuzhiyunindex 4278770..e557d41 100644
16*4882a593Smuzhiyun--- a/libweston/backend-drm/drm.c
17*4882a593Smuzhiyun+++ b/libweston/backend-drm/drm.c
18*4882a593Smuzhiyun@@ -842,10 +842,26 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output,
19*4882a593Smuzhiyun 			      enum wdrm_plane_type type)
20*4882a593Smuzhiyun {
21*4882a593Smuzhiyun 	struct drm_plane *plane;
22*4882a593Smuzhiyun+	int num_primary;
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun-	wl_list_for_each(plane, &b->plane_list, link) {
25*4882a593Smuzhiyun+	num_primary = 0;
26*4882a593Smuzhiyun+	wl_list_for_each_reverse(plane, &b->plane_list, link) {
27*4882a593Smuzhiyun 		struct drm_output *tmp;
28*4882a593Smuzhiyun 		bool found_elsewhere = false;
29*4882a593Smuzhiyun+		bool is_primary = plane->type == WDRM_PLANE_TYPE_PRIMARY;
30*4882a593Smuzhiyun+
31*4882a593Smuzhiyun+		if (is_primary)
32*4882a593Smuzhiyun+			num_primary ++;
33*4882a593Smuzhiyun+
34*4882a593Smuzhiyun+		/**
35*4882a593Smuzhiyun+		 * HACK: Assuming Nth primary plane (or cursor) is the primary
36*4882a593Smuzhiyun+		 * plane for the Nth crtc.
37*4882a593Smuzhiyun+		 * See:
38*4882a593Smuzhiyun+		 * https://lore.kernel.org/dri-devel/20200807090706.GA2352366@phenom.ffwll.local/
39*4882a593Smuzhiyun+		 */
40*4882a593Smuzhiyun+		if (type == WDRM_PLANE_TYPE_PRIMARY &&
41*4882a593Smuzhiyun+		    num_primary - 1 != output->crtc->pipe)
42*4882a593Smuzhiyun+			continue;
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun 		if (plane->type != type)
45*4882a593Smuzhiyun 			continue;
46*4882a593Smuzhiyun--
47*4882a593Smuzhiyun2.20.1
48*4882a593Smuzhiyun
49