From patchwork Mon Sep 1 07:02:51 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Airlie X-Patchwork-Id: 4817091 Return-Path: X-Original-To: patchwork-intel-gfx@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 642FE9F314 for ; Mon, 1 Sep 2014 07:02:56 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7822F20172 for ; Mon, 1 Sep 2014 07:02:55 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 6B41D20155 for ; Mon, 1 Sep 2014 07:02:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BDB8D89E59; Mon, 1 Sep 2014 00:02:53 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-lb0-f182.google.com (mail-lb0-f182.google.com [209.85.217.182]) by gabe.freedesktop.org (Postfix) with ESMTP id 693CE89E59 for ; Mon, 1 Sep 2014 00:02:52 -0700 (PDT) Received: by mail-lb0-f182.google.com with SMTP id u10so5466956lbd.27 for ; Mon, 01 Sep 2014 00:02:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=AXDvyGhrICCRdeUZL3UQ5tDntkVX15WEUscatP/gzMQ=; b=ZAUIBYtjGMg83aDo5FOXoGl27E3Tz7fAzR1V9Vpj3QXIdIGAhGSaKUAx9GOTtd/ZfA 3d28ZQhyWcG+wBvxz/AZ8Zy5IKSpZ2xvdIL3iSakf+0+mDIe4lU8cY5UBRKkbJWXwC9Z zmsVpv0jilHAnVhvxrp2dk5TvvCcV6SoX57ynpKwrHLsHkhnxVsUpdWwTAzo/G2Rfzt+ ybl/68+S7g3GcZfp1W19KHkYDEDRodSKEUlNmTYY7oR4mPiyTv9GXRDsMrcHE4qiIXYs 4A3vh7TD5r5bNIU+hYAxOA/Pje+JqtFKXrJBJbLctxh71iWV+GOxotD7hTdKkCCyG1N3 xL6w== MIME-Version: 1.0 X-Received: by 10.112.130.41 with SMTP id ob9mr4314386lbb.12.1409554971261; Mon, 01 Sep 2014 00:02:51 -0700 (PDT) Received: by 10.112.34.18 with HTTP; Mon, 1 Sep 2014 00:02:51 -0700 (PDT) In-Reply-To: <1409486735.4991.19.camel@marge.simpson.net> References: <1409382202.5141.36.camel@marge.simpson.net> <1409486735.4991.19.camel@marge.simpson.net> Date: Mon, 1 Sep 2014 17:02:51 +1000 Message-ID: From: Dave Airlie To: Mike Galbraith Cc: Daniel Vetter , intel-gfx , LKML , Dave Airlie Subject: Re: [Intel-gfx] [drm/i915/3.17] panic in i915_digport_work_func X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-5.7 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, 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 > drm/i915: add DP 1.2 MST support (v0.7) > > This adds DP 1.2 MST support on Haswell systems. > I've attached a patch that might fix this, please test and let me know. Dave. Reviewed-by: Daniel Vetter Acked-by: Imre Deak From d407c946fbf5c48f30160591f5bd71fbe158aeb4 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 1 Sep 2014 16:58:12 +1000 Subject: [PATCH] drm/i915: handle G45/GM45 pulse detection connected state. In the HPD pulse handler we check for long pulses if the port is actually connected, however we do that for IBX, but we use the pulse handling code on GM45 systems as well, so we need to use a diffent check. This patch refactors the digital port connected check out of the g4x detection path and reuses it in the hpd pulse path. Should fix: Message-ID: <1409382202.5141.36.camel@marge.simpson.net> Reported-by: Mike Galbraith Signed-off-by: Dave Airlie --- drivers/gpu/drm/i915/intel_dp.c | 55 +++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 67cfed6..81d7681 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -3661,24 +3661,12 @@ ironlake_dp_detect(struct intel_dp *intel_dp) return intel_dp_detect_dpcd(intel_dp); } -static enum drm_connector_status -g4x_dp_detect(struct intel_dp *intel_dp) +static int g4x_digital_port_connected(struct drm_device *dev, + struct intel_digital_port *intel_dig_port) { - struct drm_device *dev = intel_dp_to_dev(intel_dp); struct drm_i915_private *dev_priv = dev->dev_private; - struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); uint32_t bit; - /* Can't disconnect eDP, but you can close the lid... */ - if (is_edp(intel_dp)) { - enum drm_connector_status status; - - status = intel_panel_detect(dev); - if (status == connector_status_unknown) - status = connector_status_connected; - return status; - } - if (IS_VALLEYVIEW(dev)) { switch (intel_dig_port->port) { case PORT_B: @@ -3691,7 +3679,7 @@ g4x_dp_detect(struct intel_dp *intel_dp) bit = PORTD_HOTPLUG_LIVE_STATUS_VLV; break; default: - return connector_status_unknown; + return -EINVAL; } } else { switch (intel_dig_port->port) { @@ -3705,11 +3693,36 @@ g4x_dp_detect(struct intel_dp *intel_dp) bit = PORTD_HOTPLUG_LIVE_STATUS_G4X; break; default: - return connector_status_unknown; + return -EINVAL; } } if ((I915_READ(PORT_HOTPLUG_STAT) & bit) == 0) + return 0; + return 1; +} + +static enum drm_connector_status +g4x_dp_detect(struct intel_dp *intel_dp) +{ + struct drm_device *dev = intel_dp_to_dev(intel_dp); + struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); + int ret; + + /* Can't disconnect eDP, but you can close the lid... */ + if (is_edp(intel_dp)) { + enum drm_connector_status status; + + status = intel_panel_detect(dev); + if (status == connector_status_unknown) + status = connector_status_connected; + return status; + } + + ret = g4x_digital_port_connected(dev, intel_dig_port); + if (ret == -EINVAL) + return connector_status_unknown; + else if (ret == 0) return connector_status_disconnected; return intel_dp_detect_dpcd(intel_dp); @@ -4066,8 +4079,14 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd) intel_display_power_get(dev_priv, power_domain); if (long_hpd) { - if (!ibx_digital_port_connected(dev_priv, intel_dig_port)) - goto mst_fail; + + if (HAS_PCH_SPLIT(dev)) { + if (!ibx_digital_port_connected(dev_priv, intel_dig_port)) + goto mst_fail; + } else { + if (g4x_digital_port_connected(dev, intel_dig_port) != 1) + goto mst_fail; + } if (!intel_dp_get_dpcd(intel_dp)) { goto mst_fail; -- 1.9.3