mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 09:14:07 -04:00
scsi: ufs: exynos: gs101: Put UFS device in reset on .suspend()
GPIO_OUT[0] is connected to the reset pin of embedded UFS device. Before powering off the phy assert the reset signal. This is added as a gs101 specific suspend hook so as not to have any unintended consequences for other SoCs supported by this driver. Signed-off-by: Peter Griffin <peter.griffin@linaro.org> Link: https://lore.kernel.org/r/20250319-exynos-ufs-stability-fixes-v2-7-96722cc2ba1b@linaro.org Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
67e4085015
commit
cd4c002506
@@ -1700,6 +1700,12 @@ static void exynos_ufs_hibern8_notify(struct ufs_hba *hba,
|
||||
}
|
||||
}
|
||||
|
||||
static int gs101_ufs_suspend(struct exynos_ufs *ufs)
|
||||
{
|
||||
hci_writel(ufs, 0 << 0, HCI_GPIO_OUT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int exynos_ufs_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
|
||||
enum ufs_notify_change_status status)
|
||||
{
|
||||
@@ -1708,6 +1714,9 @@ static int exynos_ufs_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op,
|
||||
if (status == PRE_CHANGE)
|
||||
return 0;
|
||||
|
||||
if (ufs->drv_data->suspend)
|
||||
ufs->drv_data->suspend(ufs);
|
||||
|
||||
if (!ufshcd_is_link_active(hba))
|
||||
phy_power_off(ufs->phy);
|
||||
|
||||
@@ -2170,6 +2179,7 @@ static const struct exynos_ufs_drv_data gs101_ufs_drvs = {
|
||||
.pre_link = gs101_ufs_pre_link,
|
||||
.post_link = gs101_ufs_post_link,
|
||||
.pre_pwr_change = gs101_ufs_pre_pwr_change,
|
||||
.suspend = gs101_ufs_suspend,
|
||||
};
|
||||
|
||||
static const struct of_device_id exynos_ufs_of_match[] = {
|
||||
|
||||
@@ -192,6 +192,7 @@ struct exynos_ufs_drv_data {
|
||||
struct ufs_pa_layer_attr *pwr);
|
||||
int (*pre_hce_enable)(struct exynos_ufs *ufs);
|
||||
int (*post_hce_enable)(struct exynos_ufs *ufs);
|
||||
int (*suspend)(struct exynos_ufs *ufs);
|
||||
};
|
||||
|
||||
struct ufs_phy_time_cfg {
|
||||
|
||||
Reference in New Issue
Block a user