summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2013-02-27 05:35:13 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2013-06-27 10:01:16 +0200
commit53c45e6b9e16e1eff18a0eee7cab4de326f042f9 (patch)
tree0af930c22726d3a3b392e4c70ccf98755cc218fd /tests
parent19cf8cedfd089727b6327e898736b8db5fc5a7db (diff)
modetest: Compute CRTC pipe number as needed
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/modetest/modetest.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index cfcb9895..a1a683fc 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -640,7 +640,6 @@ struct connector_arg {
drmModeModeInfo *mode;
drmModeEncoder *encoder;
int crtc;
- int pipe;
unsigned int fb_id[2], current_fb_id;
struct timeval start;
@@ -703,15 +702,6 @@ static void connector_find_mode(struct device *dev, struct connector_arg *c)
if (c->crtc == -1)
c->crtc = c->encoder->crtc_id;
-
- /* and figure out which crtc index it is: */
- for (i = 0; i < dev->resources->res->count_crtcs; i++) {
- if (c->crtc == (int)dev->resources->res->crtcs[i]) {
- c->pipe = i;
- break;
- }
- }
-
}
/* -----------------------------------------------------------------------------
@@ -829,15 +819,30 @@ set_plane(struct device *dev, struct connector_arg *c, struct plane_arg *p)
struct kms_bo *plane_bo;
uint32_t plane_flags = 0;
int crtc_x, crtc_y, crtc_w, crtc_h;
+ unsigned int pipe;
unsigned int i;
- /* find an unused plane which can be connected to our crtc */
+ /* Find an unused plane which can be connected to our CRTC. Find the
+ * CRTC index first, then iterate over available planes.
+ */
+ for (i = 0; i < (unsigned int)dev->resources->res->count_crtcs; i++) {
+ if (c->crtc == (int)dev->resources->res->crtcs[i]) {
+ pipe = i;
+ break;
+ }
+ }
+
+ if (pipe == (unsigned int)dev->resources->res->count_crtcs) {
+ fprintf(stderr, "CRTC %u not found\n", c->crtc);
+ return -1;
+ }
+
for (i = 0; i < dev->resources->plane_res->count_planes && !plane_id; i++) {
ovr = dev->resources->planes[i].plane;
if (!ovr)
continue;
- if ((ovr->possible_crtcs & (1 << c->pipe)) && !ovr->crtc_id)
+ if ((ovr->possible_crtcs & (1 << pipe)) && !ovr->crtc_id)
plane_id = ovr->plane_id;
}