From patchwork Fri Jan 17 21:16:56 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesse Barnes X-Patchwork-Id: 3507531 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 26BF6C02DC for ; Fri, 17 Jan 2014 21:24:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4766E2017D for ; Fri, 17 Jan 2014 21:24:01 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 6BBDD2017B for ; Fri, 17 Jan 2014 21:24:00 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A0FD9FC64E; Fri, 17 Jan 2014 13:23:57 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org X-Greylist: delayed 398 seconds by postgrey-1.32 at gabe; Fri, 17 Jan 2014 13:23:52 PST Received: from oproxy1-pub.mail.unifiedlayer.com (oproxy1-pub.mail.unifiedlayer.com [66.147.249.253]) by gabe.freedesktop.org (Postfix) with SMTP id 4F875FBEBF for ; Fri, 17 Jan 2014 13:23:52 -0800 (PST) Received: (qmail 14018 invoked by uid 0); 17 Jan 2014 21:17:12 -0000 Received: from unknown (HELO box514.bluehost.com) (74.220.219.114) by oproxy20.mail.unifiedlayer.com with SMTP; 17 Jan 2014 21:17:12 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuousgeek.org; s=default; h=Message-Id:Date:Subject:To:From; bh=gLpgZ2JUr/86isQ++SuBzomMPpcD1CiWkCx+DbeNAvY=; b=fvUwTAuT92OTL2wpcVOQp3sev4UYEn92uojAGXm4bmkPB08fTawlPrYwdQMNbwCOUjUaB+B49v8pony8RcCN1W+3qxZRIjDtPpiJ6BtQfz0sZzjBGiuSFXX2Xy+V01Gf; Received: from [67.161.37.189] (port=48332 helo=localhost.localdomain) by box514.bluehost.com with esmtpsa (UNKNOWN:CAMELLIA256-SHA:256) (Exim 4.80) (envelope-from ) id 1W4Gmu-0001QH-7H for intel-gfx@lists.freedesktop.org; Fri, 17 Jan 2014 14:17:12 -0700 From: Jesse Barnes To: intel-gfx@lists.freedesktop.org Date: Fri, 17 Jan 2014 13:16:56 -0800 Message-Id: <1389993418-2133-1-git-send-email-jbarnes@virtuousgeek.org> X-Mailer: git-send-email 1.8.3.2 X-Identified-User: {10642:box514.bluehost.com:virtuous:virtuousgeek.org} {sentby:smtp auth 67.161.37.189 authed with jbarnes@virtuousgeek.org} Subject: [Intel-gfx] [PATCH 1/3] drm/i915: get basic encoder state before reading CRTC state X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces@lists.freedesktop.org Errors-To: intel-gfx-bounces@lists.freedesktop.org X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_BL_SPAMCOP_NET, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham 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 In DDI configs, we need to get the encoder to CRTC mapping early on so we can read out and calculate the clock state correctly, as it depends on the port. Signed-off-by: Jesse Barnes --- drivers/gpu/drm/i915/intel_display.c | 59 +++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 74137d5..92f46ad 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -9476,6 +9476,22 @@ check_crtc_state(struct drm_device *dev) "crtc's computed enabled state doesn't match tracked enabled state " "(expected %i, found %i)\n", enabled, crtc->base.enabled); + + list_for_each_entry(encoder, &dev->mode_config.encoder_list, + base.head) { + /* Get encoder->crtc mapping */ + struct intel_crtc *tmp_crtc; + enum pipe pipe; + if (encoder->get_hw_state(encoder, &pipe)) { + tmp_crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); + if (tmp_crtc == crtc) { + encoder->base.crtc = &tmp_crtc->base; + encoder->get_config(encoder, + &pipe_config); + } + } + } + active = dev_priv->display.get_pipe_config(crtc, &pipe_config); @@ -11109,9 +11125,26 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) int i; list_for_each_entry(crtc, &dev->mode_config.crtc_list, - base.head) { + base.head) memset(&crtc->config, 0, sizeof(crtc->config)); + list_for_each_entry(encoder, &dev->mode_config.encoder_list, + base.head) { + pipe = 0; + + if (encoder->get_hw_state(encoder, &pipe)) { + crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); + encoder->base.crtc = &crtc->base; + drm_mode_debug_printmodeline(&crtc->config.adjusted_mode); + } else { + encoder->base.crtc = NULL; + } + + encoder->connectors_active = false; + } + + list_for_each_entry(crtc, &dev->mode_config.crtc_list, + base.head) { crtc->active = dev_priv->display.get_pipe_config(crtc, &crtc->config); @@ -11145,22 +11178,18 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev) list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) { - pipe = 0; - - if (encoder->get_hw_state(encoder, &pipe)) { - crtc = to_intel_crtc(dev_priv->pipe_to_crtc_mapping[pipe]); - encoder->base.crtc = &crtc->base; + if (encoder->base.crtc) { + crtc = to_intel_crtc(encoder->base.crtc); encoder->get_config(encoder, &crtc->config); - } else { - encoder->base.crtc = NULL; - } - encoder->connectors_active = false; - DRM_DEBUG_KMS("[ENCODER:%d:%s] hw state readout: %s, pipe %c\n", - encoder->base.base.id, - drm_get_encoder_name(&encoder->base), - encoder->base.crtc ? "enabled" : "disabled", - pipe_name(pipe)); + DRM_DEBUG_KMS("[ENCODER:%d:%s] hw state readout: %s, pipe %c, dp: %s\n", + encoder->base.base.id, + drm_get_encoder_name(&encoder->base), + encoder->base.crtc ? "enabled" : "disabled", + pipe_name(crtc->pipe), + crtc->config.has_dp_encoder ? "yes" : "no"); + drm_mode_debug_printmodeline(&crtc->config.adjusted_mode); + } } list_for_each_entry(connector, &dev->mode_config.connector_list,