Signed-off-by: Andrew F. Davis <[email protected]> --- ...ct-plane-based-on-current-attached-C.patch | 69 ++++++++++++++++ ...05-weston-drm-fix-dual-display-issue.patch | 79 ------------------- .../wayland/weston_7.0.0.bbappend | 2 +- 3 files changed, 70 insertions(+), 80 deletions(-) create mode 100644 meta-arago-distro/recipes-graphics/wayland/weston/0001-backend-drm-Select-plane-based-on-current-attached-C.patch delete mode 100644 meta-arago-distro/recipes-graphics/wayland/weston/0005-weston-drm-fix-dual-display-issue.patch
diff --git a/meta-arago-distro/recipes-graphics/wayland/weston/0001-backend-drm-Select-plane-based-on-current-attached-C.patch b/meta-arago-distro/recipes-graphics/wayland/weston/0001-backend-drm-Select-plane-based-on-current-attached-C.patch new file mode 100644 index 00000000..ef445797 --- /dev/null +++ b/meta-arago-distro/recipes-graphics/wayland/weston/0001-backend-drm-Select-plane-based-on-current-attached-C.patch @@ -0,0 +1,69 @@ +From 943323d177ef33494d9d063aeb7f0e9785d9b3c1 Mon Sep 17 00:00:00 2001 +From: "Andrew F. Davis" <[email protected]> +Date: Fri, 6 Mar 2020 13:06:55 -0500 +Subject: [PATCH] backend-drm: Select plane based on current attached CRTC + +When doing plane selection for an output CRTC check if the plane +already has a CRTC attached and if so prefer that plane only for +the corresponding CRTC. + +This prevents changing a CRTC's primary plane when it is active +which is not allowed by the DRM framework. + +Based-on-patch-by: Eric Ruei <[email protected]> +Signed-off-by: Andrew F. Davis <[email protected]> +--- + libweston/backend-drm/drm-internal.h | 1 + + libweston/backend-drm/drm.c | 10 ++++++++++ + 2 files changed, 11 insertions(+) + +diff --git a/libweston/backend-drm/drm-internal.h b/libweston/backend-drm/drm-internal.h +index 6f5a9880..65b7486d 100644 +--- a/libweston/backend-drm/drm-internal.h ++++ b/libweston/backend-drm/drm-internal.h +@@ -398,6 +398,7 @@ struct drm_plane { + + uint32_t possible_crtcs; + uint32_t plane_id; ++ uint32_t crtc_id; + uint32_t count_formats; + + struct drm_property_info props[WDRM_PLANE__COUNT]; +diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c +index 041a15a5..544b1aff 100644 +--- a/libweston/backend-drm/drm.c ++++ b/libweston/backend-drm/drm.c +@@ -819,6 +819,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane, + if (kplane) { + plane->possible_crtcs = kplane->possible_crtcs; + plane->plane_id = kplane->plane_id; ++ plane->crtc_id = kplane->crtc_id; + + props = drmModeObjectGetProperties(b->drm.fd, kplane->plane_id, + DRM_MODE_OBJECT_PLANE); +@@ -843,6 +844,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane, + else { + plane->possible_crtcs = (1 << output->pipe); + plane->plane_id = 0; ++ plane->crtc_id = 0; + plane->count_formats = 1; + plane->formats[0].format = format; + plane->type = type; +@@ -950,6 +952,14 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output, + if (found_elsewhere) + continue; + ++ /* If a plane already has a CRTC selected and it is not our ++ * output's CRTC, then do not select this plane. We cannot ++ * switch away a plane from a CTRC when active. */ ++ if ((type == WDRM_PLANE_TYPE_PRIMARY) && ++ (plane->crtc_id != 0) && ++ (plane->crtc_id != output->crtc_id)) ++ continue; ++ + plane->possible_crtcs = (1 << output->pipe); + return plane; + } +-- +2.17.1 + diff --git a/meta-arago-distro/recipes-graphics/wayland/weston/0005-weston-drm-fix-dual-display-issue.patch b/meta-arago-distro/recipes-graphics/wayland/weston/0005-weston-drm-fix-dual-display-issue.patch deleted file mode 100644 index 9b06b81b..00000000 --- a/meta-arago-distro/recipes-graphics/wayland/weston/0005-weston-drm-fix-dual-display-issue.patch +++ /dev/null @@ -1,79 +0,0 @@ -From db6f5ce008d9b8a4cc7db71659ce1d21d3d7f97f Mon Sep 17 00:00:00 2001 -From: Eric Ruei <[email protected]> -Date: Tue, 26 Mar 2019 13:32:31 -0400 -Subject: [PATCH 3/3] weston: drm: fix dual display issue - -This patch fixes the dual display issue by enhancing the primary plane -search algorithm to keep the plane which is connected to the crtc of -the output because the direct switching of active planes is not allowed. - -Upstream status: Pending - -Signed-off-by: Eric Ruei <[email protected]> ---- - libweston/compositor-drm.c | 17 ++++++++++++++++- - 1 file changed, 16 insertions(+), 1 deletion(-) - -diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c -index 3891176..fa694c3 100644 ---- a/libweston/compositor-drm.c -+++ b/libweston/compositor-drm.c -@@ -428,6 +428,7 @@ struct drm_plane { - - uint32_t possible_crtcs; - uint32_t plane_id; -+ uint32_t crtc_id; - uint32_t count_formats; - - struct drm_property_info props[WDRM_PLANE__COUNT]; -@@ -4073,6 +4074,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane, - if (kplane) { - plane->possible_crtcs = kplane->possible_crtcs; - plane->plane_id = kplane->plane_id; -+ plane->crtc_id = kplane->crtc_id; - - props = drmModeObjectGetProperties(b->drm.fd, kplane->plane_id, - DRM_MODE_OBJECT_PLANE); -@@ -4097,6 +4099,7 @@ drm_plane_create(struct drm_backend *b, const drmModePlane *kplane, - else { - plane->possible_crtcs = (1 << output->pipe); - plane->plane_id = 0; -+ plane->crtc_id = 0; - plane->count_formats = 1; - plane->formats[0].format = format; - plane->type = type; -@@ -4157,6 +4160,7 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output, - enum wdrm_plane_type type) - { - struct drm_plane *plane; -+ struct drm_plane *plane2 = NULL; /* secondary plane */ - - if (!b->universal_planes) { - uint32_t format; -@@ -4204,11 +4208,22 @@ drm_output_find_special_plane(struct drm_backend *b, struct drm_output *output, - if (found_elsewhere) - continue; - -+ /* The output should keep the primary plane connected to its -+ * crtc since the direct switching of active plane is not -+ * allowed. */ -+ if ((type == WDRM_PLANE_TYPE_PRIMARY) && -+ (plane->crtc_id != output->crtc_id)) { -+ if (plane->crtc_id == 0) { -+ plane->possible_crtcs = (1 << output->pipe); -+ plane2 = plane; -+ } -+ continue; -+ } - plane->possible_crtcs = (1 << output->pipe); - return plane; - } - -- return NULL; -+ return plane2; - } - - /** --- -1.9.1 - diff --git a/meta-arago-distro/recipes-graphics/wayland/weston_7.0.0.bbappend b/meta-arago-distro/recipes-graphics/wayland/weston_7.0.0.bbappend index 92e5570a..7a937f08 100644 --- a/meta-arago-distro/recipes-graphics/wayland/weston_7.0.0.bbappend +++ b/meta-arago-distro/recipes-graphics/wayland/weston_7.0.0.bbappend @@ -7,10 +7,10 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" RDEPENDS_${PN} += "weston-conf" # file://0002-weston-Allow-visual_id-to-be-0.patch -# file://0005-weston-drm-fix-dual-display-issue.patch SRC_URI += " \ file://0003-weston-Fix-virtual-keyboard-display-issue-for-QT5-ap.patch \ file://0004-weston-Fix-touch-screen-crash-issue.patch \ + file://0001-backend-drm-Select-plane-based-on-current-attached-C.patch \ " INHIBIT_PACKAGE_STRIP = "1" -- 2.17.1 _______________________________________________ meta-arago mailing list [email protected] http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago
