summaryrefslogtreecommitdiffstats
path: root/meta-agl-bsp/meta-ti/recipes-arago/weston/weston/0001-weston1.9.0-Enabling-DRM-backend-with-multiple-displ.patch
blob: 3efceb5db731fdeb113a4cbb8c6f550ea83cd510 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
From 15d9f155fdb3abffc348e81b1560702801994715 Mon Sep 17 00:00:00 2001
From: Karthik Ramanan <a0393906@ti.com>
Date: Mon, 11 Jan 2016 11:51:30 -0500
Subject: [PATCH 1/2] weston1.9.0: Enabling DRM backend with multiple displays

There are three main issues that this patch tries to address

 1. Black screen when running weston
 2. Support for multiple displays
 3. Handling missing VBlanks

There is an issue with missing VBlanks for LCD and
HDMI connectors which leads to display not getting refreshed.
This patch can be considered as a workaround.

Signed-off-by: Karthik Ramanan <a0393906@ti.com>
---
 src/compositor-drm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 6777bf8..15ddba8 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -686,7 +686,7 @@ drm_output_repaint(struct weston_output *output_base,
 			.request.sequence = 1,
 		};
 
-		if ((!s->current && !s->next) ||
+		if ((!s->current && !s->next) &&
 		    !drm_sprite_crtc_supported(output, s->possible_crtcs))
 			continue;
 
@@ -847,6 +847,7 @@ page_flip_handler(int fd, unsigned int frame,
 {
 	struct drm_output *output = (struct drm_output *) data;
 	struct timespec ts;
+	uint32_t bail;
 	uint32_t flags = PRESENTATION_FEEDBACK_KIND_VSYNC |
 			 PRESENTATION_FEEDBACK_KIND_HW_COMPLETION |
 			 PRESENTATION_FEEDBACK_KIND_HW_CLOCK;
@@ -864,9 +865,14 @@ page_flip_handler(int fd, unsigned int frame,
 
 	output->page_flip_pending = 0;
 
+	if(output->vblank_pending) {
+		weston_log("VBlank is pending for connector = %d, frame = %d\n", output->connector_id, frame);
+		bail = 1;
+	}
+
 	if (output->destroy_pending)
 		drm_output_destroy(&output->base);
-	else if (!output->vblank_pending) {
+	else if (!output->vblank_pending || bail ) {
 		ts.tv_sec = sec;
 		ts.tv_nsec = usec * 1000;
 		weston_output_finish_frame(&output->base, &ts, flags);
-- 
1.9.1