From patchwork Fri Jun 14 21:34:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 2725171 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 8E1EC9F8E4 for ; Fri, 14 Jun 2013 22:00:20 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7D63E2025F for ; Fri, 14 Jun 2013 22:00:19 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 6F8BF20270 for ; Fri, 14 Jun 2013 22:00:18 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 83A98E6109 for ; Fri, 14 Jun 2013 15:00:18 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [95.142.166.194]) by gabe.freedesktop.org (Postfix) with ESMTP id 5E666E5CCF for ; Fri, 14 Jun 2013 14:35:22 -0700 (PDT) Received: from avalon.ideasonboard.com (unknown [91.177.128.27]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 5E95335A4F; Fri, 14 Jun 2013 23:35:11 +0200 (CEST) From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Subject: [PATCH v6 21/23] modetest: Try all possible encoders for a connector Date: Fri, 14 Jun 2013 23:34:55 +0200 Message-Id: <1371245697-29504-22-git-send-email-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 1.8.1.5 In-Reply-To: <1371245697-29504-1-git-send-email-laurent.pinchart@ideasonboard.com> References: <1371245697-29504-1-git-send-email-laurent.pinchart@ideasonboard.com> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When building the pipeline, instead of using only the encoders attached to a connector, take all possible encoders into account to locate a CRTC. Signed-off-by: Laurent Pinchart --- tests/modetest/modetest.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 450c86d..e49838b 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -635,6 +635,19 @@ error: return NULL; } +static int get_crtc_index(struct device *dev, uint32_t id) +{ + int i; + + for (i = 0; i < dev->resources->res->count_crtcs; ++i) { + drmModeCrtc *crtc = dev->resources->crtcs[i].crtc; + if (crtc && crtc->crtc_id == id) + return i; + } + + return -1; +} + static drmModeConnector *get_connector_by_id(struct device *dev, uint32_t id) { drmModeConnector *connector; @@ -728,26 +741,28 @@ static struct crtc *pipe_find_crtc(struct device *dev, struct pipe_arg *pipe) int j; for (i = 0; i < pipe->num_cons; ++i) { + uint32_t crtcs_for_connector = 0; drmModeConnector *connector; drmModeEncoder *encoder; + int idx; connector = get_connector_by_id(dev, pipe->con_ids[i]); if (!connector) return NULL; - encoder = get_encoder_by_id(dev, connector->encoder_id); - if (!encoder) - return NULL; + for (j = 0; j < connector->count_encoders; ++j) { + encoder = get_encoder_by_id(dev, connector->encoders[j]); + if (!encoder) + continue; - possible_crtcs &= encoder->possible_crtcs; + crtcs_for_connector |= encoder->possible_crtcs; - for (j = 0; j < dev->resources->res->count_crtcs; ++j) { - drmModeCrtc *crtc = dev->resources->crtcs[j].crtc; - if (crtc && crtc->crtc_id == encoder->crtc_id) { - active_crtcs |= 1 << j; - break; - } + idx = get_crtc_index(dev, encoder->crtc_id); + if (idx >= 0) + active_crtcs |= 1 << idx; } + + possible_crtcs &= crtcs_for_connector; } if (!possible_crtcs)