mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
BACKPORT: FROMGIT: scsi: ufs: Fix ufs clk specs violation
According to the spec (JESD220E chapter 7.2), while powering off/on the ufs
device, REF_CLK signal should be between VSS(Ground) and VCCQ/VCCQ2.
Link: https://lore.kernel.org/r/1610103385-45755-2-git-send-email-ziqichen@codeaurora.org
Reviewed-by: Can Guo <cang@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>
Bug: 177449264
Change-Id: I75c269cbf7602c45b13a3a7023b53daa0ecb838b
(cherry picked from commit 528db9e563
git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git 5.12/scsi-staging)
[Can Guo: Resolved minor conflict]
Signed-off-by: Can Guo <cang@codeaurora.org>
This commit is contained in:
parent
fc005b3ced
commit
6f296e0498
|
|
@ -8693,8 +8693,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
|
||||
|
|
@ -8722,6 +8720,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;
|
||||
|
|
@ -8776,18 +8776,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);
|
||||
/* Make sure clocks are enabled before accessing controller */
|
||||
ret = ufshcd_setup_clocks(hba, true);
|
||||
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 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
|
||||
|
|
@ -8795,7 +8795,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;
|
||||
|
||||
if (ufshcd_is_link_hibern8(hba)) {
|
||||
ret = ufshcd_uic_hibern8_exit(hba);
|
||||
|
|
@ -8859,8 +8859,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)
|
||||
|
|
@ -8871,6 +8869,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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user