vbltest: add option to use high pipe 88/286888/3 accepted/tizen_base_dev accepted/tizen/base/20230201.083441 accepted/tizen/base/dev/20230602.080916
authorHoegeun Kwon <hoegeun.kwon@samsung.com>
Mon, 16 Jan 2023 08:18:04 +0000 (17:18 +0900)
committerHoegeun Kwon <hoegeun.kwon@samsung.com>
Mon, 16 Jan 2023 09:03:03 +0000 (18:03 +0900)
Add option to use high pipe.

Change-Id: I028f305a5dac877bd4ec925ed11295ec4d319c1a
Signed-off-by: Hoegeun Kwon <hoegeun.kwon@samsung.com>
tests/vbltest/vbltest.c

index 1c2b519..1be77b8 100644 (file)
 
 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);