From patchwork Wed Oct 26 23:25:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Navare, Manasi" X-Patchwork-Id: 9398675 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2133A60236 for ; Wed, 26 Oct 2016 23:25:55 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DE3F129E38 for ; Wed, 26 Oct 2016 23:25:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D1CF329E3B; Wed, 26 Oct 2016 23:25:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 90FAE29E38 for ; Wed, 26 Oct 2016 23:25:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E8F3E6E964; Wed, 26 Oct 2016 23:25:53 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 500B66E961 for ; Wed, 26 Oct 2016 23:25:50 +0000 (UTC) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga105.jf.intel.com with ESMTP; 26 Oct 2016 16:25:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,551,1473145200"; d="scan'208";a="894421051" Received: from manasi-otcmedia.jf.intel.com ([10.7.199.175]) by orsmga003.jf.intel.com with ESMTP; 26 Oct 2016 16:25:49 -0700 From: Manasi Navare To: intel-gfx@lists.freedesktop.org Date: Wed, 26 Oct 2016 16:25:57 -0700 Message-Id: <1477524358-16563-6-git-send-email-manasi.d.navare@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1477524358-16563-1-git-send-email-manasi.d.navare@intel.com> References: <1477524358-16563-1-git-send-email-manasi.d.navare@intel.com> Subject: [Intel-gfx] [PATCH 6/7] drm/i915: Find fallback link rate/lane count X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP If link training fails, then we need to fallback to lower link rate first and if link training fails at RBR, then fallback to lower lane count. Signed-off-by: Manasi Navare --- drivers/gpu/drm/i915/intel_dp.c | 28 ++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_drv.h | 6 ++++++ 2 files changed, 34 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 39116c8..369b5ce 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -303,6 +303,34 @@ static int intel_dp_link_rate_index(struct intel_dp *intel_dp, return -1; } +void intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp, + int link_rate, uint8_t lane_count) +{ + int common_rates[DP_MAX_SUPPORTED_RATES] = {}; + int common_len; + int link_rate_index = -1; + + if (!intel_dp->link_train_failed) + return; + + common_len = intel_dp_common_rates(intel_dp, common_rates); + link_rate_index = intel_dp_link_rate_index(intel_dp, + common_rates, + link_rate); + if (link_rate_index > 0) { + intel_dp->fallback_link_rate_index = link_rate_index - 1; + intel_dp->fallback_link_rate = common_rates[intel_dp->fallback_link_rate_index]; + intel_dp->fallback_lane_count = intel_dp_max_lane_count(intel_dp); + } else if (lane_count > 1) { + intel_dp->fallback_link_rate_index = common_len -1; + intel_dp->fallback_link_rate = common_rates[intel_dp->fallback_link_rate_index]; + intel_dp->fallback_lane_count = lane_count - 1; + } else { + DRM_ERROR ("Link Training Unsuccessful\n"); + intel_dp->link_train_failed = false; + } +} + static enum drm_mode_status intel_dp_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index f6fe05a..c6789ee 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -890,6 +890,10 @@ struct intel_dp { uint32_t DP; int link_rate; uint8_t lane_count; + int fallback_link_rate; + uint8_t fallback_lane_count; + int fallback_link_rate_index; + bool link_train_failed; uint8_t sink_count; bool link_mst; bool has_audio; @@ -1402,6 +1406,8 @@ int intel_dp_set_link_status_property(struct drm_connector *connector, void intel_dp_set_link_params(struct intel_dp *intel_dp, int link_rate, uint8_t lane_count, bool link_mst); +void intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp, + int link_rate, uint8_t lane_count); void intel_dp_start_link_train(struct intel_dp *intel_dp); void intel_dp_stop_link_train(struct intel_dp *intel_dp); void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode);