[PATCH libdrm] vbltest: add option to use high pipe

Hoegeun Kwon hoegeun.kwon at samsung.com
Mon Jan 16 09:44:20 UTC 2023


Add option to use high pipe.

Signed-off-by: Hoegeun Kwon <hoegeun.kwon at samsung.com>
---
 tests/vbltest/vbltest.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/tests/vbltest/vbltest.c b/tests/vbltest/vbltest.c
index 1c2b519eec4a..1be77b81c560 100644
--- a/tests/vbltest/vbltest.c
+++ b/tests/vbltest/vbltest.c
@@ -45,10 +45,13 @@
 
 extern char *optarg;
 extern int optind, opterr, optopt;
-static char optstr[] = "D:M:s";
+static char optstr[] = "D:M:p:s";
 
 int secondary = 0;
 
+#define DRM_VBLANK_HIGH_CRTC_SHIFT 1
+static int high_pipe = 0;
+
 struct vbl_info {
 	unsigned int vbl_count;
 	struct timeval start;
@@ -65,6 +68,8 @@ static void vblank_handler(int fd, unsigned int frame, unsigned int sec,
 	vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
 	if (secondary)
 		vbl.request.type |= DRM_VBLANK_SECONDARY;
+	if (high_pipe)
+		vbl.request.type |= high_pipe << DRM_VBLANK_HIGH_CRTC_SHIFT;
 	vbl.request.sequence = 1;
 	vbl.request.signal = (unsigned long)data;
 
@@ -90,6 +95,7 @@ static void usage(char *name)
 	fprintf(stderr, "  -D DEVICE  open the given device\n");
 	fprintf(stderr, "  -M MODULE  open the given module\n");
 	fprintf(stderr, "  -s         use secondary pipe\n");
+	fprintf(stderr, "  -p NUM     use high pipe\n");
 	exit(0);
 }
 
@@ -113,12 +119,18 @@ int main(int argc, char **argv)
 		case 's':
 			secondary = 1;
 			break;
+		case 'p':
+			high_pipe = atoi(optarg);
+			break;
 		default:
 			usage(argv[0]);
 			break;
 		}
 	}
 
+	if (secondary && high_pipe)
+		return 1;
+
 	fd = util_open(device, module);
 	if (fd < 0)
 		return 1;
@@ -127,6 +139,8 @@ int main(int argc, char **argv)
 	vbl.request.type = DRM_VBLANK_RELATIVE;
 	if (secondary)
 		vbl.request.type |= DRM_VBLANK_SECONDARY;
+	if (high_pipe)
+		vbl.request.type |= high_pipe << DRM_VBLANK_HIGH_CRTC_SHIFT;
 	vbl.request.sequence = 0;
 	ret = drmWaitVBlank(fd, &vbl);
 	if (ret != 0) {
@@ -143,6 +157,8 @@ int main(int argc, char **argv)
 	vbl.request.type = DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT;
 	if (secondary)
 		vbl.request.type |= DRM_VBLANK_SECONDARY;
+	if (high_pipe)
+		vbl.request.type |= high_pipe << DRM_VBLANK_HIGH_CRTC_SHIFT;
 	vbl.request.sequence = 1;
 	vbl.request.signal = (unsigned long)&handler_info;
 	ret = drmWaitVBlank(fd, &vbl);
-- 
2.17.1



More information about the dri-devel mailing list