mirror of https://gitee.com/openkylin/linux.git
scsi: ufs-qcom: Fix ufs RST_n spec violation
According to the spec (JESD220E chapter 7.2), while powering off/on the ufs device, RST_n signal should be between VSS(Ground) and VCCQ/VCCQ2. Link: https://lore.kernel.org/r/1610103385-45755-3-git-send-email-ziqichen@codeaurora.org Acked-by: Avri Altman <avri.altman@wdc.com> Signed-off-by: Ziqi Chen <ziqichen@codeaurora.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
528db9e563
commit
b61d041413
|
@ -568,6 +568,17 @@ static int ufs_qcom_link_startup_notify(struct ufs_hba *hba,
|
||||||
return err;
|
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)
|
static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
|
||||||
{
|
{
|
||||||
struct ufs_qcom_host *host = ufshcd_get_variant(hba);
|
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);
|
ufs_qcom_disable_lane_clks(host);
|
||||||
phy_power_off(phy);
|
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)) {
|
} else if (!ufs_qcom_is_link_active(hba)) {
|
||||||
ufs_qcom_disable_lane_clks(host);
|
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
|
* The UFS device shall detect reset pulses of 1us, sleep for 10us to
|
||||||
* be on the safe side.
|
* be on the safe side.
|
||||||
*/
|
*/
|
||||||
gpiod_set_value_cansleep(host->device_reset, 1);
|
ufs_qcom_device_reset_ctrl(hba, true);
|
||||||
usleep_range(10, 15);
|
usleep_range(10, 15);
|
||||||
|
|
||||||
gpiod_set_value_cansleep(host->device_reset, 0);
|
ufs_qcom_device_reset_ctrl(hba, false);
|
||||||
usleep_range(10, 15);
|
usleep_range(10, 15);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue