tests/debugfs_pipe_crc: fall back to PIPE source
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 16 Oct 2013 20:49:24 +0000 (22:49 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 17 Oct 2013 11:35:51 +0000 (13:35 +0200)
With PLANE1 and PIPE CRC sources the test will work on all currently
shipping (and planed fwiw) platforms.

Also add all the other new sources for non-ivb/hsw chips.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
lib/igt_debugfs.c
lib/igt_debugfs.h
tests/debugfs_pipe_crc.c

index 371f583..f903454 100644 (file)
@@ -207,6 +207,11 @@ static const char *pipe_crc_sources[] = {
         "plane1",
         "plane2",
         "pf",
+       "pipe",
+       "TV",
+       "DP-B",
+       "DP-C",
+       "DP-D"
 };
 
 static const char *pipe_crc_source_name(enum intel_pipe_crc_source source)
@@ -214,7 +219,7 @@ static const char *pipe_crc_source_name(enum intel_pipe_crc_source source)
         return pipe_crc_sources[source];
 }
 
-void igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc)
+bool igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc)
 {
        char buf[64];
        igt_crc_t *crcs = NULL;
@@ -223,7 +228,10 @@ void igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc)
 
        sprintf(buf, "pipe %c %s", pipe_name(pipe_crc->pipe),
                pipe_crc_source_name(pipe_crc->source));
+       errno = 0;
        write(pipe_crc->ctl_fd, buf, strlen(buf));
+       if (errno != 0)
+               return false;
 
        /*
         * For some no yet identified reason, the first CRC is bonkers. So
@@ -231,6 +239,8 @@ void igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc)
         */
        igt_pipe_crc_get_crcs(pipe_crc, 1, &crcs);
        free(crcs);
+
+       return true;
 }
 
 void igt_pipe_crc_stop(igt_pipe_crc_t *pipe_crc)
index 7c280e7..f2873e0 100644 (file)
@@ -50,6 +50,11 @@ enum intel_pipe_crc_source {
         INTEL_PIPE_CRC_SOURCE_PLANE1,
         INTEL_PIPE_CRC_SOURCE_PLANE2,
         INTEL_PIPE_CRC_SOURCE_PF,
+        INTEL_PIPE_CRC_SOURCE_PIPE,
+        INTEL_PIPE_CRC_SOURCE_TV,
+        INTEL_PIPE_CRC_SOURCE_DP_B,
+        INTEL_PIPE_CRC_SOURCE_DP_C,
+        INTEL_PIPE_CRC_SOURCE_DP_D,
         INTEL_PIPE_CRC_SOURCE_MAX,
 };
 
@@ -69,7 +74,7 @@ igt_pipe_crc_new(igt_debugfs_t *debugfs, int drm_fd, enum pipe pipe,
                 enum intel_pipe_crc_source source);
 void igt_pipe_crc_reset(void);
 void igt_pipe_crc_free(igt_pipe_crc_t *pipe_crc);
-void igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc);
+bool igt_pipe_crc_start(igt_pipe_crc_t *pipe_crc);
 void igt_pipe_crc_stop(igt_pipe_crc_t *pipe_crc);
 void igt_pipe_crc_get_crcs(igt_pipe_crc_t *pipe_crc, int n_crcs,
                           igt_crc_t **out_crcs);
index 9884fd7..f9ebac9 100644 (file)
@@ -172,7 +172,13 @@ static void test_read_crc(data_t *data)
 
        connector_set_mode(data, connector, &connector->config.default_mode);
 
-       igt_pipe_crc_start(pipe_crc);
+       if (!igt_pipe_crc_start(pipe_crc)) {
+               igt_pipe_crc_free(pipe_crc);
+               pipe_crc = igt_pipe_crc_new(&data->debugfs, data->drm_fd,
+                                           connector->config.pipe,
+                                           INTEL_PIPE_CRC_SOURCE_PIPE);
+               igt_assert(igt_pipe_crc_start(pipe_crc));
+       }
 
        /* wait for 3 vblanks and the corresponding 3 CRCs */
        igt_pipe_crc_get_crcs(pipe_crc, 3, &crcs);