diff options
-rw-r--r-- | lib/igt_debugfs.c | 12 | ||||
-rw-r--r-- | lib/igt_debugfs.h | 7 | ||||
-rw-r--r-- | tests/debugfs_pipe_crc.c | 8 |
3 files changed, 24 insertions, 3 deletions
diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c index 371f5839a..f903454b9 100644 --- a/lib/igt_debugfs.c +++ b/lib/igt_debugfs.c @@ -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) diff --git a/lib/igt_debugfs.h b/lib/igt_debugfs.h index 7c280e74f..f2873e024 100644 --- a/lib/igt_debugfs.h +++ b/lib/igt_debugfs.h @@ -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); diff --git a/tests/debugfs_pipe_crc.c b/tests/debugfs_pipe_crc.c index 9884fd72f..f9ebac917 100644 --- a/tests/debugfs_pipe_crc.c +++ b/tests/debugfs_pipe_crc.c @@ -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); |