linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation
@ 2021-01-08 10:56 Ziqi Chen
  2021-01-08 10:56 ` [PATCH v6 1/2] scsi: ufs: Fix ufs clk " Ziqi Chen
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Ziqi Chen @ 2021-01-08 10:56 UTC (permalink / raw)
  To: asutoshd, nguyenb, cang, hongwus, rnayak, vinholikatti, jejb,
	martin.petersen, linux-scsi, kernel-team, saravanak, salyzyn,
	ziqichen, kwmad.kim, stanley.chu

This series is made based on 5.11-scsi-staging branch.

As per specs, e.g, JESD220E chapter 7.2, while powering off/on the ufs device, RST_N signal and REF_CLK signal should be between VSS(Ground) and VCCQ/VCCQ2.
The sequence after fixing as below:

Power down:
1. Assert RST_N low
2. Turn-off REF_CLK
3. Turn-off VCC
4. Turn-off VCCQ/VCCQ2.

power on:
1. Turn-on VCC
2. Turn-on VCCQ/VCCQ2
3. Turn-On REF_CLK
4. Deassert RST_N high.

The 1st change let ref-clk to be disabled before VCC & VCCQ turning off while to be enabled after VCC & VCCQ turning on.
The 2nd change is used to pull down RST_n during UFS power off.

Change since v5:
- Made a new wrapper func ufs_qcom_device_reset_ctrl(struct ufs_hba *hba, bool asserted) to control device reset line.

Change since v4:
- Split the original change "scsi: ufs: Fix ufs power down/on specs violation" into two changes, one fixs clk specs violation and the other one fixs RST_n specs violation.
- The 2nd change is just only for QCOM platform.

Change since v3:
- Rename vops callback func toggle_device_reset(sturct ufs_hba *hba, bool down) to device_reset(sturct ufs_hba *hba, bool assert).
- Move the dealy after pulling donw RST_n back into vops. 

Change since v2:
- Correct commit message.

Change since v1:
- Rename vops callback func device_reset(sturct ufs_hba *hba) to toggle_device_reset(sturct ufs_hba *hba, bool down) to fix this specs violation for all SoC vendors platform. 

Ziqi Chen (2):
  scsi: ufs: Fix ufs clk specs violation
  scsi: ufs-qcom: Fix ufs RST_n specs violation

 drivers/scsi/ufs/ufs-qcom.c | 18 ++++++++++++++++--
 drivers/scsi/ufs/ufshcd.c   | 20 ++++++++++----------
 2 files changed, 26 insertions(+), 12 deletions(-)

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v6 1/2] scsi: ufs: Fix ufs clk specs violation
  2021-01-08 10:56 [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation Ziqi Chen
@ 2021-01-08 10:56 ` Ziqi Chen
  2021-01-12  9:17   ` Avri Altman
  2021-01-08 10:56 ` [PATCH v6 2/2] scsi: ufs-qcom: Fix ufs RST_n " Ziqi Chen
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Ziqi Chen @ 2021-01-08 10:56 UTC (permalink / raw)
  To: asutoshd, nguyenb, cang, hongwus, rnayak, vinholikatti, jejb,
	martin.petersen, linux-scsi, kernel-team, saravanak, salyzyn,
	ziqichen, kwmad.kim, stanley.chu
  Cc: Alim Akhtar, Avri Altman, James E.J. Bottomley, Bean Huo, open list

As per specs, e.g, JESD220E chapter 7.2, while powering
off/on the ufs device, REF_CLK signal should be between
VSS(Ground) and VCCQ/VCCQ2.

Reviewed-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Ziqi Chen <ziqichen@codeaurora.org>
---
 drivers/scsi/ufs/ufshcd.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index e221add..3f807f7 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -8686,8 +8686,6 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	if (ret)
 		goto set_dev_active;
 
-	ufshcd_vreg_set_lpm(hba);
-
 disable_clks:
 	/*
 	 * Call vendor specific suspend callback. As these callbacks may access
@@ -8711,6 +8709,8 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 					hba->clk_gating.state);
 	}
 
+	ufshcd_vreg_set_lpm(hba);
+
 	/* Put the host controller in low power mode if possible */
 	ufshcd_hba_vreg_set_lpm(hba);
 	goto out;
@@ -8778,18 +8778,18 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	old_link_state = hba->uic_link_state;
 
 	ufshcd_hba_vreg_set_hpm(hba);
+	ret = ufshcd_vreg_set_hpm(hba);
+	if (ret)
+		goto out;
+
 	/* Make sure clocks are enabled before accessing controller */
 	ret = ufshcd_setup_clocks(hba, true);
 	if (ret)
-		goto out;
+		goto disable_vreg;
 
 	/* enable the host irq as host controller would be active soon */
 	ufshcd_enable_irq(hba);
 
-	ret = ufshcd_vreg_set_hpm(hba);
-	if (ret)
-		goto disable_irq_and_vops_clks;
-
 	/*
 	 * Call vendor specific resume callback. As these callbacks may access
 	 * vendor specific host controller register space call them when the
@@ -8797,7 +8797,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 */
 	ret = ufshcd_vops_resume(hba, pm_op);
 	if (ret)
-		goto disable_vreg;
+		goto disable_irq_and_vops_clks;
 
 	/* For DeepSleep, the only supported option is to have the link off */
 	WARN_ON(ufshcd_is_ufs_dev_deepsleep(hba) && !ufshcd_is_link_off(hba));
@@ -8864,8 +8864,6 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	ufshcd_link_state_transition(hba, old_link_state, 0);
 vendor_suspend:
 	ufshcd_vops_suspend(hba, pm_op);
-disable_vreg:
-	ufshcd_vreg_set_lpm(hba);
 disable_irq_and_vops_clks:
 	ufshcd_disable_irq(hba);
 	if (hba->clk_scaling.is_allowed)
@@ -8876,6 +8874,8 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 		trace_ufshcd_clk_gating(dev_name(hba->dev),
 					hba->clk_gating.state);
 	}
+disable_vreg:
+	ufshcd_vreg_set_lpm(hba);
 out:
 	hba->pm_op_in_progress = 0;
 	if (ret)
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v6 2/2] scsi: ufs-qcom: Fix ufs RST_n specs violation
  2021-01-08 10:56 [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation Ziqi Chen
  2021-01-08 10:56 ` [PATCH v6 1/2] scsi: ufs: Fix ufs clk " Ziqi Chen
@ 2021-01-08 10:56 ` Ziqi Chen
  2021-01-12  9:18   ` Avri Altman
  2021-01-13  5:32 ` [PATCH v6 0/2] Two changes to fix ufs power down/on " Martin K. Petersen
  2021-01-15  4:08 ` Martin K. Petersen
  3 siblings, 1 reply; 7+ messages in thread
From: Ziqi Chen @ 2021-01-08 10:56 UTC (permalink / raw)
  To: asutoshd, nguyenb, cang, hongwus, rnayak, vinholikatti, jejb,
	martin.petersen, linux-scsi, kernel-team, saravanak, salyzyn,
	ziqichen, kwmad.kim, stanley.chu
  Cc: Andy Gross, Bjorn Andersson, Alim Akhtar, Avri Altman,
	James E.J. Bottomley, open list:ARM/QUALCOMM SUPPORT, open list

As per specs, e.g, JESD220E chapter 7.2, while powering
off/on the ufs device, RST_n signal should be between
VSS(Ground) and VCCQ/VCCQ2.

Signed-off-by: Ziqi Chen <ziqichen@codeaurora.org>
---
 drivers/scsi/ufs/ufs-qcom.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index 2206b1e..f97d7b0 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -568,6 +568,17 @@ static int ufs_qcom_link_startup_notify(struct ufs_hba *hba,
 	return err;
 }
 
+static void ufs_qcom_device_reset_ctrl(struct ufs_hba *hba, bool asserted)
+{
+	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+
+	/* reset gpio is optional */
+	if (!host->device_reset)
+		return;
+
+	gpiod_set_value_cansleep(host->device_reset, asserted);
+}
+
 static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 {
 	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
@@ -582,6 +593,9 @@ static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 		ufs_qcom_disable_lane_clks(host);
 		phy_power_off(phy);
 
+		/* reset the connected UFS device during power down */
+		ufs_qcom_device_reset_ctrl(hba, true);
+
 	} else if (!ufs_qcom_is_link_active(hba)) {
 		ufs_qcom_disable_lane_clks(host);
 	}
@@ -1421,10 +1435,10 @@ static int ufs_qcom_device_reset(struct ufs_hba *hba)
 	 * The UFS device shall detect reset pulses of 1us, sleep for 10us to
 	 * be on the safe side.
 	 */
-	gpiod_set_value_cansleep(host->device_reset, 1);
+	ufs_qcom_device_reset_ctrl(hba, true);
 	usleep_range(10, 15);
 
-	gpiod_set_value_cansleep(host->device_reset, 0);
+	ufs_qcom_device_reset_ctrl(hba, false);
 	usleep_range(10, 15);
 
 	return 0;
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* RE: [PATCH v6 1/2] scsi: ufs: Fix ufs clk specs violation
  2021-01-08 10:56 ` [PATCH v6 1/2] scsi: ufs: Fix ufs clk " Ziqi Chen
@ 2021-01-12  9:17   ` Avri Altman
  0 siblings, 0 replies; 7+ messages in thread
From: Avri Altman @ 2021-01-12  9:17 UTC (permalink / raw)
  To: Ziqi Chen, asutoshd, nguyenb, cang, hongwus, rnayak,
	vinholikatti, jejb, martin.petersen, linux-scsi, kernel-team,
	saravanak, salyzyn, kwmad.kim, stanley.chu
  Cc: Alim Akhtar, James E.J. Bottomley, Bean Huo, open list

> 
> 
> As per specs, e.g, JESD220E chapter 7.2, while powering
> off/on the ufs device, REF_CLK signal should be between
> VSS(Ground) and VCCQ/VCCQ2.
> 
> Reviewed-by: Can Guo <cang@codeaurora.org>
> Signed-off-by: Ziqi Chen <ziqichen@codeaurora.org>
Aked-by: Avri Altman <avri.altman@wdc.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH v6 2/2] scsi: ufs-qcom: Fix ufs RST_n specs violation
  2021-01-08 10:56 ` [PATCH v6 2/2] scsi: ufs-qcom: Fix ufs RST_n " Ziqi Chen
@ 2021-01-12  9:18   ` Avri Altman
  0 siblings, 0 replies; 7+ messages in thread
From: Avri Altman @ 2021-01-12  9:18 UTC (permalink / raw)
  To: Ziqi Chen, asutoshd, nguyenb, cang, hongwus, rnayak,
	vinholikatti, jejb, martin.petersen, linux-scsi, kernel-team,
	saravanak, salyzyn, kwmad.kim, stanley.chu
  Cc: Andy Gross, Bjorn Andersson, Alim Akhtar, James E.J. Bottomley,
	open list:ARM/QUALCOMM SUPPORT, open list

> 
> 
> As per specs, e.g, JESD220E chapter 7.2, while powering
> off/on the ufs device, RST_n signal should be between
> VSS(Ground) and VCCQ/VCCQ2.
> 
> Signed-off-by: Ziqi Chen <ziqichen@codeaurora.org>
Aked-by: Avri Altman <avri.altman@wdc.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation
  2021-01-08 10:56 [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation Ziqi Chen
  2021-01-08 10:56 ` [PATCH v6 1/2] scsi: ufs: Fix ufs clk " Ziqi Chen
  2021-01-08 10:56 ` [PATCH v6 2/2] scsi: ufs-qcom: Fix ufs RST_n " Ziqi Chen
@ 2021-01-13  5:32 ` Martin K. Petersen
  2021-01-15  4:08 ` Martin K. Petersen
  3 siblings, 0 replies; 7+ messages in thread
From: Martin K. Petersen @ 2021-01-13  5:32 UTC (permalink / raw)
  To: Ziqi Chen
  Cc: asutoshd, nguyenb, cang, hongwus, rnayak, vinholikatti, jejb,
	martin.petersen, linux-scsi, kernel-team, saravanak, salyzyn,
	kwmad.kim, stanley.chu


Ziqi,

> As per specs, e.g, JESD220E chapter 7.2, while powering off/on the ufs
> device, RST_N signal and REF_CLK signal should be between VSS(Ground)
> and VCCQ/VCCQ2.

Applied to 5.12/scsi-staging, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation
  2021-01-08 10:56 [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation Ziqi Chen
                   ` (2 preceding siblings ...)
  2021-01-13  5:32 ` [PATCH v6 0/2] Two changes to fix ufs power down/on " Martin K. Petersen
@ 2021-01-15  4:08 ` Martin K. Petersen
  3 siblings, 0 replies; 7+ messages in thread
From: Martin K. Petersen @ 2021-01-15  4:08 UTC (permalink / raw)
  To: jejb, hongwus, rnayak, asutoshd, stanley.chu, Ziqi Chen,
	vinholikatti, linux-scsi, kwmad.kim, cang, salyzyn, kernel-team,
	saravanak, nguyenb
  Cc: Martin K . Petersen

On Fri, 8 Jan 2021 18:56:23 +0800, Ziqi Chen wrote:

> This series is made based on 5.11-scsi-staging branch.
> 
> As per specs, e.g, JESD220E chapter 7.2, while powering off/on the ufs device, RST_N signal and REF_CLK signal should be between VSS(Ground) and VCCQ/VCCQ2.
> The sequence after fixing as below:
> 
> Power down:
> 1. Assert RST_N low
> 2. Turn-off REF_CLK
> 3. Turn-off VCC
> 4. Turn-off VCCQ/VCCQ2.
> 
> [...]

Applied to 5.12/scsi-queue, thanks!

[1/2] scsi: ufs: Fix ufs clk specs violation
      https://git.kernel.org/mkp/scsi/c/528db9e563d1
[2/2] scsi: ufs-qcom: Fix ufs RST_n specs violation
      https://git.kernel.org/mkp/scsi/c/b61d04141368

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-01-15  4:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-08 10:56 [PATCH v6 0/2] Two changes to fix ufs power down/on specs violation Ziqi Chen
2021-01-08 10:56 ` [PATCH v6 1/2] scsi: ufs: Fix ufs clk " Ziqi Chen
2021-01-12  9:17   ` Avri Altman
2021-01-08 10:56 ` [PATCH v6 2/2] scsi: ufs-qcom: Fix ufs RST_n " Ziqi Chen
2021-01-12  9:18   ` Avri Altman
2021-01-13  5:32 ` [PATCH v6 0/2] Two changes to fix ufs power down/on " Martin K. Petersen
2021-01-15  4:08 ` Martin K. Petersen

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).