Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4486300ybx; Mon, 4 Nov 2019 14:13:33 -0800 (PST) X-Google-Smtp-Source: APXvYqz+vrvz8yR+UqUNylrJ8bOF9hgfIlKInM5RN1u/d92tehpZy3vKolDHTrxhVpwGYvArWb74 X-Received: by 2002:a50:8e43:: with SMTP id 3mr7640226edx.217.1572905613663; Mon, 04 Nov 2019 14:13:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572905613; cv=none; d=google.com; s=arc-20160816; b=0U21WDjd89bXdDHcoW9jqJ0fJYksbx8/dRS+u++GKvIpI2ROanTD/qC35VG3L/LhG3 pIll0Tzc98sHawghfHGnOcaKPI6ugK22gjRTkhcOiEupIkJ/eax3pXGTwIJ+5ipcnc8f LzybiMS5eDSd65xokALKow+Q6z2/cfS3xkx7oa8zY2SXuhjxPnCWNDPkJHzi51LSEYy8 mpDIVWL6F3Up7p2DokBZLuB6gh3sZa7B0H5sUczLCqFLsSmFByiWfxrUyW8Fz3tVTERK jYE3hCWmFauk3kQatIdU0J3cyoTF648KrEzEcTi4teyIEuToKad8aZIPiiHUPBGdQTZR 3ZUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=rytqy+l0R9LxvFmFzSzsvJfEI59bopy+MjnkNgbPRPM=; b=lVDnLEGc3PIaM95xJwO/XI8ttCGS8MkN8o6uSWS5uc1ANmzYO7vC25xfKKkpWB7CZt Dbd021WmLhXnsq7E830SRtXVxNWrpJou013HlCKEJVxtUCeJ+Wb85sm/HuxY+4Ax3CKm 7DNIUvufy/xlbOSUBidJ5Hp8nH/t6nLSU/b3JHWJqyrlc4sNGh0ZgAaQu7+IRqhM/ort bIh5sIPXZxMLFPqxvlPfwIgJAynWSPxRnbUoaH4J52vs+cWhFvaDScvkno1OBkUAY2bx 8skbBiawoDdkQHJXGwFoqhvBUU4nMFEoppQRPj5D7fY0vuXCtPF3Dds7bUyyv16zj1Ko pX5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oI3TFQCz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a3si5132324eju.377.2019.11.04.14.13.10; Mon, 04 Nov 2019 14:13:33 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oI3TFQCz; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390195AbfKDWKk (ORCPT + 99 others); Mon, 4 Nov 2019 17:10:40 -0500 Received: from mail.kernel.org ([198.145.29.99]:43828 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390188AbfKDWKh (ORCPT ); Mon, 4 Nov 2019 17:10:37 -0500 Received: from localhost (6.204-14-84.ripe.coltfrance.com [84.14.204.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B5BB920650; Mon, 4 Nov 2019 22:10:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572905436; bh=K2pzYJ8HddRm03R078tzZkhn6KGzSIfNgPYAnIJfaKw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oI3TFQCzo5qVeRRxrh7sHCiRi2xYHzg6hwCxjoHuIt2v0NQYx4Jw8olSEOhS7en5f suVHKgLsf73rKQ9/wXgpakHSFcVpcKpZjN+hT3pmme/7vnl/IF8hl54267gUmblSF+ HFr7ndnRFdaR+s5gbCbOVC12Bf/BhLPKH46afpoM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andrija , =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Imre Deak , Rodrigo Vivi Subject: [PATCH 5.3 138/163] drm/i915: Fix PCH reference clock for FDI on HSW/BDW Date: Mon, 4 Nov 2019 22:45:28 +0100 Message-Id: <20191104212150.343939389@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104212140.046021995@linuxfoundation.org> References: <20191104212140.046021995@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ville Syrjälä commit 59cd826fb5e7889515bf5771e295e0624c348571 upstream. The change to skip the PCH reference initialization during fastboot did end up breaking FDI. To fix that let's try to do the PCH reference init whenever we're disabling a DPLL that was using said reference previously. Cc: stable@vger.kernel.org Tested-by: Andrija Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112084 Fixes: b16c7ed95caf ("drm/i915: Do not touch the PCH SSC reference if a PLL is using it") Signed-off-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20191022185643.1483-1-ville.syrjala@linux.intel.com Reviewed-by: Imre Deak (cherry picked from commit dd5279c71405533d4ddbb9453effc60f0f5bf211) Signed-off-by: Rodrigo Vivi Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/i915/display/intel_display.c | 11 ++++++----- drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 15 +++++++++++++++ drivers/gpu/drm/i915/i915_drv.h | 2 ++ 3 files changed, 23 insertions(+), 5 deletions(-) --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -9186,7 +9186,6 @@ static bool wrpll_uses_pch_ssc(struct dr static void lpt_init_pch_refclk(struct drm_i915_private *dev_priv) { struct intel_encoder *encoder; - bool pch_ssc_in_use = false; bool has_fdi = false; for_each_intel_encoder(&dev_priv->drm, encoder) { @@ -9214,22 +9213,24 @@ static void lpt_init_pch_refclk(struct d * clock hierarchy. That would also allow us to do * clock bending finally. */ + dev_priv->pch_ssc_use = 0; + if (spll_uses_pch_ssc(dev_priv)) { DRM_DEBUG_KMS("SPLL using PCH SSC\n"); - pch_ssc_in_use = true; + dev_priv->pch_ssc_use |= BIT(DPLL_ID_SPLL); } if (wrpll_uses_pch_ssc(dev_priv, DPLL_ID_WRPLL1)) { DRM_DEBUG_KMS("WRPLL1 using PCH SSC\n"); - pch_ssc_in_use = true; + dev_priv->pch_ssc_use |= BIT(DPLL_ID_WRPLL1); } if (wrpll_uses_pch_ssc(dev_priv, DPLL_ID_WRPLL2)) { DRM_DEBUG_KMS("WRPLL2 using PCH SSC\n"); - pch_ssc_in_use = true; + dev_priv->pch_ssc_use |= BIT(DPLL_ID_WRPLL2); } - if (pch_ssc_in_use) + if (dev_priv->pch_ssc_use) return; if (has_fdi) { --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c @@ -498,16 +498,31 @@ static void hsw_ddi_wrpll_disable(struct val = I915_READ(WRPLL_CTL(id)); I915_WRITE(WRPLL_CTL(id), val & ~WRPLL_PLL_ENABLE); POSTING_READ(WRPLL_CTL(id)); + + /* + * Try to set up the PCH reference clock once all DPLLs + * that depend on it have been shut down. + */ + if (dev_priv->pch_ssc_use & BIT(id)) + intel_init_pch_refclk(dev_priv); } static void hsw_ddi_spll_disable(struct drm_i915_private *dev_priv, struct intel_shared_dpll *pll) { + enum intel_dpll_id id = pll->info->id; u32 val; val = I915_READ(SPLL_CTL); I915_WRITE(SPLL_CTL, val & ~SPLL_PLL_ENABLE); POSTING_READ(SPLL_CTL); + + /* + * Try to set up the PCH reference clock once all DPLLs + * that depend on it have been shut down. + */ + if (dev_priv->pch_ssc_use & BIT(id)) + intel_init_pch_refclk(dev_priv); } static bool hsw_ddi_wrpll_get_hw_state(struct drm_i915_private *dev_priv, --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1881,6 +1881,8 @@ struct drm_i915_private { struct work_struct idle_work; } gem; + u8 pch_ssc_use; + /* For i945gm vblank irq vs. C3 workaround */ struct { struct work_struct work;