Message ID | 20200129073902.5786-2-stanley.chu@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | MediaTek UFS vendor implemenation part III and Auto-Hibern8 fix | expand |
HI Stanley On Wed, Jan 29, 2020 at 1:09 PM Stanley Chu <stanley.chu@mediatek.com> wrote: > > MediaTek Chipsets can enter proprietary UniPro low-power mode during > suspend while link is in hibern8 state. Make sure leaving low-power > mode before every link startup to prevent lockup in any possible error recovery > path. > > In the same time, re-factor related funcitons to improve code readability. > > Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> > --- > drivers/scsi/ufs/ufs-mediatek.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/drivers/scsi/ufs/ufs-mediatek.c b/drivers/scsi/ufs/ufs-mediatek.c > index 53eae5fe2ade..7ac838cc15d1 100644 > --- a/drivers/scsi/ufs/ufs-mediatek.c > +++ b/drivers/scsi/ufs/ufs-mediatek.c > @@ -30,6 +30,11 @@ > #define ufs_mtk_device_reset_ctrl(high, res) \ > ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, high, res) > > +#define ufs_mtk_unipro_powerdown(hba, powerdown) \ > + ufshcd_dme_set(hba, \ > + UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), \ > + powerdown) > + > static void ufs_mtk_cfg_unipro_cg(struct ufs_hba *hba, bool enable) > { > u32 tmp; > @@ -290,6 +295,8 @@ static int ufs_mtk_pre_link(struct ufs_hba *hba) > int ret; > u32 tmp; > > + ufs_mtk_unipro_powerdown(hba, 0); > + > /* disable deep stall */ > ret = ufshcd_dme_get(hba, UIC_ARG_MIB(VS_SAVEPOWERCONTROL), &tmp); > if (ret) > @@ -390,9 +397,7 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) > if (err) > return err; > > - err = ufshcd_dme_set(hba, > - UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), > - 0); > + err = ufs_mtk_unipro_powerdown(hba, 0); > if (err) > return err; > > @@ -413,14 +418,10 @@ static int ufs_mtk_link_set_lpm(struct ufs_hba *hba) > { > int err; > > - err = ufshcd_dme_set(hba, > - UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), > - 1); > + err = ufs_mtk_unipro_powerdown(hba, 1); > if (err) { > /* Resume UniPro state for following error recovery */ > - ufshcd_dme_set(hba, > - UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), > - 0); > + ufs_mtk_unipro_powerdown(hba, 0); > return err; > } > > -- > 2.18.0
diff --git a/drivers/scsi/ufs/ufs-mediatek.c b/drivers/scsi/ufs/ufs-mediatek.c index 53eae5fe2ade..7ac838cc15d1 100644 --- a/drivers/scsi/ufs/ufs-mediatek.c +++ b/drivers/scsi/ufs/ufs-mediatek.c @@ -30,6 +30,11 @@ #define ufs_mtk_device_reset_ctrl(high, res) \ ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, high, res) +#define ufs_mtk_unipro_powerdown(hba, powerdown) \ + ufshcd_dme_set(hba, \ + UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), \ + powerdown) + static void ufs_mtk_cfg_unipro_cg(struct ufs_hba *hba, bool enable) { u32 tmp; @@ -290,6 +295,8 @@ static int ufs_mtk_pre_link(struct ufs_hba *hba) int ret; u32 tmp; + ufs_mtk_unipro_powerdown(hba, 0); + /* disable deep stall */ ret = ufshcd_dme_get(hba, UIC_ARG_MIB(VS_SAVEPOWERCONTROL), &tmp); if (ret) @@ -390,9 +397,7 @@ static int ufs_mtk_link_set_hpm(struct ufs_hba *hba) if (err) return err; - err = ufshcd_dme_set(hba, - UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), - 0); + err = ufs_mtk_unipro_powerdown(hba, 0); if (err) return err; @@ -413,14 +418,10 @@ static int ufs_mtk_link_set_lpm(struct ufs_hba *hba) { int err; - err = ufshcd_dme_set(hba, - UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), - 1); + err = ufs_mtk_unipro_powerdown(hba, 1); if (err) { /* Resume UniPro state for following error recovery */ - ufshcd_dme_set(hba, - UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0), - 0); + ufs_mtk_unipro_powerdown(hba, 0); return err; }
MediaTek Chipsets can enter proprietary UniPro low-power mode during suspend while link is in hibern8 state. Make sure leaving low-power mode before every link startup to prevent lockup in any possible error recovery path. In the same time, re-factor related funcitons to improve code readability. Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> --- drivers/scsi/ufs/ufs-mediatek.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)