linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Manu Gautam <mgautam@codeaurora.org>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org,
	Vivek Gautam <vivek.gautam@codeaurora.org>,
	Manu Gautam <mgautam@codeaurora.org>,
	Varadarajan Narayanan <varada@codeaurora.org>,
	Krzysztof Kozlowski <krzk@kernel.org>,
	Fengguang Wu <fengguang.wu@intel.com>,
	Wei Yongjun <weiyongjun1@huawei.com>,
	"open list:GENERIC PHY FRAMEWORK" <linux-kernel@vger.kernel.org>
Subject: [PATCH v3 01/16] phy: qcom-qmp: Fix phy pipe clock gating
Date: Tue, 21 Nov 2017 14:53:11 +0530	[thread overview]
Message-ID: <1511256206-1587-2-git-send-email-mgautam@codeaurora.org> (raw)
In-Reply-To: <1511256206-1587-1-git-send-email-mgautam@codeaurora.org>

From: Vivek Gautam <vivek.gautam@codeaurora.org>

Pipe clock comes out of the phy and is available as long as
the phy is turned on. Clock controller fails to gate this
clock after the phy is turned off and generates a warning.

/ # [   33.048561] gcc_usb3_phy_pipe_clk status stuck at 'on'
[   33.048585] ------------[ cut here ]------------
[   33.052621] WARNING: CPU: 1 PID: 18 at ../drivers/clk/qcom/clk-branch.c:97 clk_branch_wait+0xf0/0x108
[   33.057384] Modules linked in:
[   33.066497] CPU: 1 PID: 18 Comm: kworker/1:0 Tainted: G        W       4.12.0-rc7-00024-gfe926e34c36d-dirty #96
[   33.069451] Hardware name: Qualcomm Technologies, Inc. DB820c (DT)
...
[   33.278565] [<ffff00000849b27c>] clk_branch_wait+0xf0/0x108
[   33.286375] [<ffff00000849b2f4>] clk_branch2_disable+0x28/0x34
[   33.291761] [<ffff0000084868dc>] clk_core_disable+0x5c/0x88
[   33.297660] [<ffff000008487d68>] clk_core_disable_lock+0x20/0x34
[   33.303129] [<ffff000008487d98>] clk_disable+0x1c/0x24
[   33.309384] [<ffff0000083ccd78>] qcom_qmp_phy_poweroff+0x20/0x48
[   33.314328] [<ffff0000083c53f4>] phy_power_off+0x80/0xdc
[   33.320492] [<ffff00000875c950>] dwc3_core_exit+0x94/0xa0
[   33.325784] [<ffff00000875c9ac>] dwc3_suspend_common+0x50/0x60
[   33.331080] [<ffff00000875ca04>] dwc3_runtime_suspend+0x48/0x6c
[   33.336810] [<ffff0000085b82f4>] pm_generic_runtime_suspend+0x28/0x38
[   33.342627] [<ffff0000085bace0>] __rpm_callback+0x150/0x254
[   33.349222] [<ffff0000085bae08>] rpm_callback+0x24/0x78
[   33.354604] [<ffff0000085b9fd8>] rpm_suspend+0xe0/0x4e4
[   33.359813] [<ffff0000085bb784>] pm_runtime_work+0xdc/0xf0
[   33.365028] [<ffff0000080d7b30>] process_one_work+0x12c/0x28c
[   33.370576] [<ffff0000080d7ce8>] worker_thread+0x58/0x3b8
[   33.376393] [<ffff0000080dd4a8>] kthread+0x100/0x12c
[   33.381776] [<ffff0000080836c0>] ret_from_fork+0x10/0x50

Fix this by enabling pipe clock at the end of phy_init(), and disabling
it as the first thing in phy_exit().

Fixes: e78f3d15e115 ("phy: qcom-qmp: new qmp phy driver for qcom-chipsets")
Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
---
 drivers/phy/qualcomm/phy-qcom-qmp.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
index e17f035..76acaec 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
@@ -731,19 +731,10 @@ static int qcom_qmp_phy_poweron(struct phy *phy)
 
 	/* turn on regulator supplies */
 	ret = regulator_bulk_enable(num, qmp->vregs);
-	if (ret) {
+	if (ret)
 		dev_err(qmp->dev, "failed to enable regulators, err=%d\n", ret);
-		return ret;
-	}
-
-	ret = clk_prepare_enable(qphy->pipe_clk);
-	if (ret) {
-		dev_err(qmp->dev, "pipe_clk enable failed, err=%d\n", ret);
-		regulator_bulk_disable(num, qmp->vregs);
-		return ret;
-	}
 
-	return 0;
+	return ret;
 }
 
 static int qcom_qmp_phy_poweroff(struct phy *phy)
@@ -751,8 +742,6 @@ static int qcom_qmp_phy_poweroff(struct phy *phy)
 	struct qmp_phy *qphy = phy_get_drvdata(phy);
 	struct qcom_qmp *qmp = qphy->qmp;
 
-	clk_disable_unprepare(qphy->pipe_clk);
-
 	regulator_bulk_disable(qmp->cfg->num_vregs, qmp->vregs);
 
 	return 0;
@@ -915,7 +904,14 @@ static int qcom_qmp_phy_init(struct phy *phy)
 		goto err_pcs_ready;
 	}
 
-	return ret;
+	/* phy is initialized; we can turn on the pipe clock now */
+	ret = clk_prepare_enable(qphy->pipe_clk);
+	if (ret) {
+		dev_err(qmp->dev, "pipe_clk enable failed, err=%d\n", ret);
+		goto err_pcs_ready;
+	}
+
+	return 0;
 
 err_pcs_ready:
 	if (cfg->has_lane_rst)
@@ -936,6 +932,8 @@ static int qcom_qmp_phy_exit(struct phy *phy)
 	const struct qmp_phy_cfg *cfg = qmp->cfg;
 	int i = cfg->num_clks;
 
+	clk_disable_unprepare(qphy->pipe_clk);
+
 	/* PHY reset */
 	qphy_setbits(qphy->pcs, cfg->regs[QPHY_SW_RESET], SW_RESET);
 
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

  reply	other threads:[~2017-11-21  9:23 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-21  9:23 [PATCH v3 00/16] Support for Qualcomm QUSBv2 and QMPv3 USB PHYs Manu Gautam
2017-11-21  9:23 ` Manu Gautam [this message]
2017-11-21  9:23 ` [PATCH v3 02/16] phy: qcom-qmp: Adapt to clk_bulk_* APIs Manu Gautam
2017-12-20  2:37   ` Vivek Gautam
     [not found]     ` <CAFp+6iEgiv0KJo+ikR_jyakc2dGjetiArJSvC4d5JFO0ZnO7-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-12-20  5:03       ` Manu Gautam
2017-11-21  9:23 ` [PATCH v3 03/16] phy: qcom-qmp: Power-on PHY before initialization Manu Gautam
2017-11-22 18:03   ` Stephen Boyd
2017-11-23  3:59     ` Manu Gautam
2017-11-21  9:23 ` [PATCH v3 04/16] phy: qcom-qusb2: " Manu Gautam
2017-11-21  9:23 ` [PATCH v3 05/16] phy: qcom-qmp: Fix PHY block reset sequence Manu Gautam
2017-11-21  9:23 ` [PATCH v3 06/16] phy: qcom-qmp: Move SERDES/PCS START after PHY reset Manu Gautam
2017-11-21  9:23 ` [PATCH v3 07/16] phy: qcom-qusb2: Add support for different register layouts Manu Gautam
2017-12-05 10:23   ` Vivek Gautam
     [not found]     ` <3c0dca03-bf9e-8747-8c31-546172f88d6f-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-12-12  8:51       ` Manu Gautam
2017-11-21  9:23 ` [PATCH v3 08/16] dt-bindings: phy-qcom-qusb2: Update binding for QUSB2 V2 version Manu Gautam
2017-11-21  9:23 ` [PATCH v3 09/16] phy: qcom-qusb2: Add support " Manu Gautam
2017-11-21  9:23 ` [PATCH v3 10/16] phy: qcom-qmp: Move register offsets to header file Manu Gautam
2017-11-22 17:26   ` Stephen Boyd
2017-11-23  4:02     ` Manu Gautam
2017-11-21  9:23 ` [PATCH v3 11/16] phy: qcom-qmp: Add register offsets for QMP V3 PHY Manu Gautam
2017-11-21  9:23 ` [PATCH v3 12/16] dt-bindings: phy-qcom-qmp: Update bindings for QMP V3 USB PHY Manu Gautam
2017-11-21  9:23 ` [PATCH v3 13/16] phy: qcom-qmp: Add support for QMP V3 USB3 PHY Manu Gautam
2017-11-21  9:23 ` [PATCH v3 14/16] phy: Add notify_speed callback Manu Gautam
2017-12-12 11:43   ` Kishon Vijay Abraham I
2017-12-12 15:24     ` Manu Gautam
2017-12-20  5:49       ` Kishon Vijay Abraham I
2017-12-20  6:29         ` Manu Gautam
2017-12-20  7:17           ` Kishon Vijay Abraham I
2017-12-20  8:41             ` Manu Gautam
2017-12-28 11:04               ` Kishon Vijay Abraham I
2017-12-29  4:24                 ` Manu Gautam
2017-12-29  6:28                   ` Kishon Vijay Abraham I
2018-01-02  5:42                     ` Manu Gautam
2017-11-21  9:23 ` [PATCH v3 15/16] phy: qcom-qusb2: Add support for runtime PM Manu Gautam
2017-11-21  9:23 ` [PATCH v3 16/16] phy: qcom-qmp: " Manu Gautam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1511256206-1587-2-git-send-email-mgautam@codeaurora.org \
    --to=mgautam@codeaurora.org \
    --cc=fengguang.wu@intel.com \
    --cc=kishon@ti.com \
    --cc=krzk@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=varada@codeaurora.org \
    --cc=vivek.gautam@codeaurora.org \
    --cc=weiyongjun1@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).