"plane1",
"plane2",
"pf",
+ "pipe",
+ "TV",
+ "DP-B",
+ "DP-C",
+ "DP-D"
};
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;
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
*/
igt_pipe_crc_get_crcs(pipe_crc, 1, &crcs);
free(crcs);
+
+ return true;
}
void igt_pipe_crc_stop(igt_pipe_crc_t *pipe_crc)
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,
};
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);
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);