diff options
author | 2025-03-19 15:30:21 +0000 | |
---|---|---|
committer | 2025-04-03 09:53:51 -0400 | |
commit | 7f05fd9a3b6fb3a9abc5a748307d11831c03175f (patch) | |
tree | dc98696aca8d5104bd711451ea71763295e2298c | |
parent | scsi: ufs: exynos: Disable iocc if dma-coherent property isn't set (diff) | |
download | wireguard-linux-7f05fd9a3b6fb3a9abc5a748307d11831c03175f.tar.xz wireguard-linux-7f05fd9a3b6fb3a9abc5a748307d11831c03175f.zip |
scsi: ufs: exynos: Ensure consistent phy reference counts
ufshcd_link_startup() can call ufshcd_vops_link_startup_notify()
multiple times when retrying. This causes the phy reference count to
keep increasing and the phy to not properly re-initialize.
If the phy has already been previously powered on, first issue a
phy_power_off() and phy_exit(), before re-initializing and powering on
again.
Signed-off-by: Peter Griffin <peter.griffin@linaro.org>
Link: https://lore.kernel.org/r/20250319-exynos-ufs-stability-fixes-v2-4-96722cc2ba1b@linaro.org
Fixes: 3d73b200f989 ("scsi: ufs: ufs-exynos: Change ufs phy control sequence")
Cc: stable@vger.kernel.org
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to '')
-rw-r--r-- | drivers/ufs/host/ufs-exynos.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/ufs/host/ufs-exynos.c b/drivers/ufs/host/ufs-exynos.c index 533904a4c1a7..e77b3c63e698 100644 --- a/drivers/ufs/host/ufs-exynos.c +++ b/drivers/ufs/host/ufs-exynos.c @@ -962,6 +962,12 @@ static int exynos_ufs_phy_init(struct exynos_ufs *ufs) } phy_set_bus_width(generic_phy, ufs->avail_ln_rx); + + if (generic_phy->power_count) { + phy_power_off(generic_phy); + phy_exit(generic_phy); + } + ret = phy_init(generic_phy); if (ret) { dev_err(hba->dev, "%s: phy init failed, ret = %d\n", |