Linux-PHY Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Nitin Rawat <quic_nitirawa@quicinc.com>
To: vkoul@kernel.org, kishon@kernel.org,
	manivannan.sadhasivam@linaro.org,
	James.Bottomley@HansenPartnership.com,
	martin.petersen@oracle.com, bvanassche@acm.org,
	andersson@kernel.org, neil.armstrong@linaro.org,
	konrad.dybcio@oss.qualcomm.com
Cc: quic_rdwivedi@quicinc.com, quic_cang@quicinc.com,
	linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	Nitin Rawat <quic_nitirawa@quicinc.com>
Subject: [PATCH V4 04/11] phy: qcom-qmp-ufs: Refactor UFS PHY reset
Date: Sat,  3 May 2025 21:54:33 +0530	[thread overview]
Message-ID: <20250503162440.2954-5-quic_nitirawa@quicinc.com> (raw)
In-Reply-To: <20250503162440.2954-1-quic_nitirawa@quicinc.com>

Refactor the UFS PHY reset handling to parse the reset logic only once
during initialization, instead of every resume.

As part of this change, move the UFS PHY reset parsing logic from
qmp_phy_power_on to the new qmp_ufs_phy_init function.

Co-developed-by: Ram Kumar Dwivedi <quic_rdwivedi@quicinc.com>
Signed-off-by: Ram Kumar Dwivedi <quic_rdwivedi@quicinc.com>
Signed-off-by: Nitin Rawat <quic_nitirawa@quicinc.com>
---
 drivers/phy/qualcomm/phy-qcom-qmp-ufs.c | 59 +++++++++++++------------
 1 file changed, 31 insertions(+), 28 deletions(-)

diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
index 636dc3dc3ea8..43d2d714f28b 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp-ufs.c
@@ -1799,38 +1799,11 @@ static int qmp_ufs_com_exit(struct qmp_ufs *qmp)
 static int qmp_ufs_power_on(struct phy *phy)
 {
 	struct qmp_ufs *qmp = phy_get_drvdata(phy);
-	const struct qmp_phy_cfg *cfg = qmp->cfg;
 	int ret;
 	dev_vdbg(qmp->dev, "Initializing QMP phy\n");

-	if (cfg->no_pcs_sw_reset) {
-		/*
-		 * Get UFS reset, which is delayed until now to avoid a
-		 * circular dependency where UFS needs its PHY, but the PHY
-		 * needs this UFS reset.
-		 */
-		if (!qmp->ufs_reset) {
-			qmp->ufs_reset =
-				devm_reset_control_get_exclusive(qmp->dev,
-								 "ufsphy");
-
-			if (IS_ERR(qmp->ufs_reset)) {
-				ret = PTR_ERR(qmp->ufs_reset);
-				dev_err(qmp->dev,
-					"failed to get UFS reset: %d\n",
-					ret);
-
-				qmp->ufs_reset = NULL;
-				return ret;
-			}
-		}
-	}
-
 	ret = qmp_ufs_com_init(qmp);
-	if (ret)
-		return ret;
-
-	return 0;
+	return ret;
 }

 static int qmp_ufs_phy_calibrate(struct phy *phy)
@@ -1924,7 +1897,37 @@ static int qmp_ufs_set_mode(struct phy *phy, enum phy_mode mode, int submode)
 	return 0;
 }

+static int qmp_ufs_phy_init(struct phy *phy)
+{
+	struct qmp_ufs *qmp = phy_get_drvdata(phy);
+	const struct qmp_phy_cfg *cfg = qmp->cfg;
+	int ret;
+
+	if (!cfg->no_pcs_sw_reset)
+		return 0;
+
+	/*
+	 * Get UFS reset, which is delayed until now to avoid a
+	 * circular dependency where UFS needs its PHY, but the PHY
+	 * needs this UFS reset.
+	 */
+	if (!qmp->ufs_reset) {
+		qmp->ufs_reset =
+			devm_reset_control_get_exclusive(qmp->dev, "ufsphy");
+
+		if (IS_ERR(qmp->ufs_reset)) {
+			ret = PTR_ERR(qmp->ufs_reset);
+			dev_err(qmp->dev, "failed to get PHY reset: %d\n", ret);
+			qmp->ufs_reset = NULL;
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
 static const struct phy_ops qcom_qmp_ufs_phy_ops = {
+	.init		= qmp_ufs_phy_init,
 	.power_on	= qmp_ufs_power_on,
 	.power_off	= qmp_ufs_disable,
 	.calibrate	= qmp_ufs_phy_calibrate,
--
2.48.1


-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

  parent reply	other threads:[~2025-05-03 16:25 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-03 16:24 [PATCH V4 00/11] Refactor ufs phy powerup sequence Nitin Rawat
2025-05-03 16:24 ` [PATCH V4 01/11] scsi: ufs: qcom: add a new phy calibrate API call Nitin Rawat
2025-05-09 12:06   ` Konrad Dybcio
2025-05-03 16:24 ` [PATCH V4 02/11] phy: qcom-qmp-ufs: Rename qmp_ufs_enable and qmp_ufs_power_on Nitin Rawat
2025-05-03 16:24 ` [PATCH V4 03/11] phy: qcom-qmp-ufs: Refactor phy_power_on and phy_calibrate callbacks Nitin Rawat
2025-05-03 16:24 ` Nitin Rawat [this message]
2025-05-04 15:27   ` [PATCH V4 04/11] phy: qcom-qmp-ufs: Refactor UFS PHY reset Dmitry Baryshkov
2025-05-03 16:24 ` [PATCH V4 05/11] phy: qcom-qmp-ufs: Remove qmp_ufs_com_init() Nitin Rawat
2025-05-03 16:24 ` [PATCH V4 06/11] phy: qcom-qmp-ufs: Rename qmp_ufs_power_off Nitin Rawat
2025-05-04 15:37   ` Dmitry Baryshkov
2025-05-04 15:52     ` Nitin Rawat
2025-05-06 11:53       ` Dmitry Baryshkov
2025-05-07 15:05         ` Nitin Rawat
2025-05-04 15:57     ` Dmitry Baryshkov
2025-05-03 16:24 ` [PATCH V4 07/11] phy: qcom-qmp-ufs: Remove qmp_ufs_exit() and Inline qmp_ufs_com_exit() Nitin Rawat
2025-05-04 15:56   ` Dmitry Baryshkov
2025-05-03 16:24 ` [PATCH V4 08/11] phy: qcom-qmp-ufs: refactor qmp_ufs_power_off Nitin Rawat
2025-05-04 15:57   ` Dmitry Baryshkov
2025-05-03 16:24 ` [PATCH V4 09/11] scsi: ufs: qcom : Refactor phy_power_on/off calls Nitin Rawat
2025-05-09 11:35   ` Konrad Dybcio
2025-05-10 13:49     ` Nitin Rawat
2025-05-03 16:24 ` [PATCH V4 10/11] scsi: ufs: qcom : Introduce phy_power_on/off wrapper function Nitin Rawat
2025-05-09 11:37   ` Konrad Dybcio
2025-05-09 11:49     ` Nitin Rawat
2025-05-09 12:00       ` Konrad Dybcio
2025-05-13 13:12         ` Nitin Rawat
2025-05-03 16:24 ` [PATCH V4 11/11] scsi: ufs: qcom: Prevent calling phy_exit before phy_init Nitin Rawat
2025-05-09 11:38   ` Konrad Dybcio
2025-05-09 11:50     ` Nitin Rawat

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=20250503162440.2954-5-quic_nitirawa@quicinc.com \
    --to=quic_nitirawa@quicinc.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=andersson@kernel.org \
    --cc=bvanassche@acm.org \
    --cc=kishon@kernel.org \
    --cc=konrad.dybcio@oss.qualcomm.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=martin.petersen@oracle.com \
    --cc=neil.armstrong@linaro.org \
    --cc=quic_cang@quicinc.com \
    --cc=quic_rdwivedi@quicinc.com \
    --cc=vkoul@kernel.org \
    /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