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 <ziqic...@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

Reply via email to