Dear Avri TKS for your suggestion. and adjust timimg in own vop can solve this problem surely. but I think it's more of a common patch for all platforms, Patch can adapt different vendors,and align to ufshcd_auto_hibern8_enable in __ufshcd_wl_resume. Not distinguishing pm_op can refer to ufshcd_auto_hibern8_enable in __ufshcd_wl_resume. Avri Altman <Avri.Altman@xxxxxxx> 于2022年10月12日周三 16:13写道: > > > > > > > Dear Avri > > > Unisoc reports resume fail on UFS(micron FS164) during suspend/resume > > > test. > > > We check host inserts auto H8 enter/exit event between SSU sleep > > > command and H8 enter command in runtime suspend . > > > Asfollows: SSU Sleep command --> auto H8 enter --> auto H8 exit --> > > > H8 enter --> idle 2ms --> VCC off. > > > However device AQL FW can’t enter LPM within 2ms after second H8 > > enter > > > command. > > > FW already enter LPM after receive auto H8 enter command , Next auto > > > H8 exit command will trigger FW exit from LPM, it need take over 10ms, > > and > > > FW can’t enter > > > LPM again after second H8 enter command until device complete exit > > from > > > LPM. So disable auto h8 before ssu is a reasonable solution to solve it. > > > Hynix also has similar request. > > Is this something common to all platforms? > > If not, and you need your platform to disable h8 before ssu, > > You can implement it in your own vop - see e.g. > > commit 9561f58442e4 (scsi: ufs: mediatek: Support vops pre suspend to > > disable auto-hibern8) > Maybe to further clarify, I am not saying that your suggestion doesn't make sense. > It's just that you need, IMHO, to make it part of ufshcd_vops_suspend, which I think > Its ufshcd_system_suspend for every platform. > And you need to get an ack on that from the other platform owners (maybe except > Stanley who is doing it already). > > Btw, you are not checking the pm_op so your are disabling auto-h8 for runtime-suspend > As well. > > And maybe elaborate the commit log with your explanation above - making it more clear. > > Thanks, > Avri > > > > Thanks, > > Avri > > > > > > > > Avri Altman <Avri.Altman@xxxxxxx> 于2022年10月11日周二 15:07写道 > > : > > > > > > > > > From: Ten Gao <ten.gao@xxxxxxxxxx> > > > > > > > > > > Ensure auto h8 will not hit dme h8,and there won't be two h8 in a > > > > > row after ssu. > > > > I don't think the hw should do that. > > > > Can you please share on which platform/host controller did you observe > > > this? > > > > > > > > Thanks, > > > > Avri > > > > > > > > > > Signed-off-by: Ten Gao <ten.gao@xxxxxxxxxx> > > > > > --- > > > > > drivers/ufs/core/ufshcd.c | 10 ++++++++++ > > > > > 1 file changed, 10 insertions(+) > > > > > > > > > > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > > > > > index > > > > > a202d7d5240d..42f93648d796 100644 > > > > > --- a/drivers/ufs/core/ufshcd.c > > > > > +++ b/drivers/ufs/core/ufshcd.c > > > > > @@ -4256,6 +4256,14 @@ void ufshcd_auto_hibern8_update(struct > > > > > ufs_hba *hba, u32 ahit) } > > > > > EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update); > > > > > > > > > > +void ufshcd_auto_hibern8_disable(struct ufs_hba *hba) { > > > > > + if (!ufshcd_is_auto_hibern8_supported(hba)) > > > > > + return; > > > > > + > > > > > + ufshcd_writel(hba, 0, REG_AUTO_HIBERNATE_IDLE_TIMER); } > > > > > + > > > > > void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) { > > > > > if (!ufshcd_is_auto_hibern8_supported(hba)) > > > > > @@ -9036,6 +9044,8 @@ static int __ufshcd_wl_suspend(struct > > ufs_hba > > > > > *hba, enum ufs_pm_op pm_op) > > > > > if (ret) > > > > > goto enable_scaling; > > > > > > > > > > + ufshcd_auto_hibern8_disable(hba); > > > > > + > > > > > if (req_dev_pwr_mode != hba->curr_dev_pwr_mode) { > > > > > if (pm_op != UFS_RUNTIME_PM) > > > > > /* ensure that bkops is disabled */ > > > > > -- > > > > > 2.17.1 > > > >