From patchwork Wed Jan 18 08:18:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Timo Aaltonen X-Patchwork-Id: 716542 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3v3KcB3mg5z9snk; Wed, 18 Jan 2017 19:18:34 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1cTlRv-00042x-GC; Wed, 18 Jan 2017 08:18:31 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1cTlRi-00040i-5P for kernel-team@lists.ubuntu.com; Wed, 18 Jan 2017 08:18:18 +0000 Received: from mobile-user-c1d2e7-114.dhcp.inet.fi ([193.210.231.114] helo=deckard.tyrell) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1cTlRh-0003Xk-P0 for kernel-team@lists.ubuntu.com; Wed, 18 Jan 2017 08:18:17 +0000 From: Timo Aaltonen To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/2] UBUNTU: SAUCE: i915_bpo: Validate mode against max. link data rate for DP MST Date: Wed, 18 Jan 2017 10:18:15 +0200 Message-Id: <1484727495-21891-3-git-send-email-tjaalton@ubuntu.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1484727495-21891-1-git-send-email-tjaalton@ubuntu.com> References: <1484727495-21891-1-git-send-email-tjaalton@ubuntu.com> MIME-Version: 1.0 X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: kernel-team-bounces@lists.ubuntu.com From: Timo Aaltonen BugLink: http://bugs.launchpad.net/bugs/1657353 Not validating the mode rate against max. link rate results in not pruning invalid modes. For e.g, a HBR2 5.4 Gbps 2-lane configuration does not support 4k@60Hz. But, we do not reject this mode. So, make use of the helpers in intel_dp to validate mode data rate against max. link data rate of a configuration. v3: Renamed local variables again for consistency (Manasi) v2: Renamed mode data rate local variable to be more explanatory. Signed-off-by: Dhinakaran Pandiyan Link: http://patchwork.freedesktop.org/patch/msgid/1479243546-17189-1-git-send-email-dhinakaran.pandiyan@intel.com Signed-off-by: Ville Syrjälä (backported from drm-intel-next commit 22a2c8e0457f5d66db0819a49beb8c119d8f7a97) Signed-off-by: Timo Aaltonen --- ubuntu/i915/intel_dp.c | 4 ++-- ubuntu/i915/intel_dp_mst.c | 12 +++++++++++- ubuntu/i915/intel_drv.h | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ubuntu/i915/intel_dp.c b/ubuntu/i915/intel_dp.c index 53772f2..92320f6 100644 --- a/ubuntu/i915/intel_dp.c +++ b/ubuntu/i915/intel_dp.c @@ -166,14 +166,14 @@ static u8 intel_dp_max_lane_count(struct intel_dp *intel_dp) return min(source_max, sink_max); } -static int +int intel_dp_link_required(int pixel_clock, int bpp) { /* pixel_clock is in kHz, divide bpp by 8 for bit to Byte conversion */ return DIV_ROUND_UP(pixel_clock * bpp, 8); } -static int +int intel_dp_max_data_rate(int max_link_clock, int max_lanes) { /* max_link_clock is the link symbol clock (LS_Clk) in kHz and not the diff --git a/ubuntu/i915/intel_dp_mst.c b/ubuntu/i915/intel_dp_mst.c index 6e03468..9d41990 100644 --- a/ubuntu/i915/intel_dp_mst.c +++ b/ubuntu/i915/intel_dp_mst.c @@ -345,7 +345,17 @@ static enum drm_mode_status intel_dp_mst_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) { + struct intel_connector *intel_connector = to_intel_connector(connector); + struct intel_dp *intel_dp = intel_connector->mst_port; int max_dotclk = to_i915(connector->dev)->max_dotclk_freq; + int bpp = 24; /* MST uses fixed bpp */ + int max_rate, mode_rate, max_lanes, max_link_clock; + + max_link_clock = intel_dp_max_link_rate(intel_dp); + max_lanes = drm_dp_max_lane_count(intel_dp->dpcd); + + max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes); + mode_rate = intel_dp_link_required(mode->clock, bpp); /* TODO - validate mode against available PBN for link */ if (mode->clock < 10000) @@ -354,7 +364,7 @@ intel_dp_mst_mode_valid(struct drm_connector *connector, if (mode->flags & DRM_MODE_FLAG_DBLCLK) return MODE_H_ILLEGAL; - if (mode->clock > max_dotclk) + if (mode_rate > max_rate || mode->clock > max_dotclk) return MODE_CLOCK_HIGH; return MODE_OK; diff --git a/ubuntu/i915/intel_drv.h b/ubuntu/i915/intel_drv.h index 8c5a158..687eb82 100644 --- a/ubuntu/i915/intel_drv.h +++ b/ubuntu/i915/intel_drv.h @@ -1338,6 +1338,9 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp); bool intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE]); +int intel_dp_link_required(int pixel_clock, int bpp); +int intel_dp_max_data_rate(int max_link_clock, int max_lanes); + /* intel_dp_mst.c */ int intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_id); void intel_dp_mst_encoder_cleanup(struct intel_digital_port *intel_dig_port);