Currently auto-hibernate is activated if host supports auto-hibern8 capability. However error-handling is not implemented, which makes the feature somewhat risky.
If either "Hibernate Enter" or "Hibernate Exit" fail during auto-hibernate flow, the corresponding interrupt "UIC_HIBERNATE_ENTER" or "UIC_HIBERNATE_EXIT" shall be raised according to UFS specification. This patch adds auto-hibernate error-handling: - Monitor "Hibernate Enter" and "Hibernate Exit" interrupts after auto-hibernate feature is activated. - If fail happens, trigger error-handling just like "manual-hibernate" fail and apply the same recovery flow: schedule UFS error handler in ufshcd_check_errors(), and then do host reset and restore in UFS error handler. v4: - Replace original patch "[3/3] scsi: ufs: Use re-factored Auto-Hibernate function" by a new preparation patch "[2/3] scsi: ufs: Introduce ufshcd_is_auto_hibern8_supported()" for re-factoring ufshcd_is_auto_hibern8_supported (Avri Altman) - Refine UIC mask definitions (Avri Altman) v3: - Fix typo in patch "scsi: ufs: Do not overwrite Auto-Hibernate timer" (Avri Altman) - Rebase to Linux 5.2-rc1 v2: - Fix sentences in commit message (Marc Gonzalez) - Make "Auto-Hibernate" error detection more precise (Bean Huo) Stanley Chu (3): scsi: ufs: Do not overwrite Auto-Hibernate timer scsi: ufs: Introduce ufshcd_is_auto_hibern8_supported() scsi: ufs: Add error-handling of Auto-Hibernate drivers/scsi/ufs/ufshcd.c | 33 ++++++++++++++++++++++++++++++++- drivers/scsi/ufs/ufshcd.h | 5 +++++ drivers/scsi/ufs/ufshci.h | 6 ++++-- 3 files changed, 41 insertions(+), 3 deletions(-) -- 2.18.0