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