linux/drivers/scsi/ufs
Subhash Jadavani 6d303e4b19 scsi: ufs: Fix error handing during hibern8 enter
During clock gating (ufshcd_gate_work()), we first put the link hibern8 by
calling ufshcd_uic_hibern8_enter() and if ufshcd_uic_hibern8_enter()
returns success (0) then we gate all the clocks.  Now let’s zoom in to what
ufshcd_uic_hibern8_enter() does internally: It calls
__ufshcd_uic_hibern8_enter() and if failure is encountered, link recovery
shall put the link back to the highest HS gear and returns success (0) to
ufshcd_uic_hibern8_enter() which is the issue as link is still in active
state due to recovery!  Now ufshcd_uic_hibern8_enter() returns success to
ufshcd_gate_work() and hence it goes ahead with gating the UFS clock while
link is still in active state hence I believe controller would raise UIC
error interrupts. But when we service the interrupt, clocks might have
already been disabled!

This change fixes for this by returning failure from
__ufshcd_uic_hibern8_enter() if recovery succeeds as link is still not in
hibern8, upon receiving the error ufshcd_hibern8_enter() would initiate
retry to put the link state back into hibern8.

Link: https://lore.kernel.org/r/1573798172-20534-8-git-send-email-cang@codeaurora.org
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2019-11-19 21:37:32 -05:00
..
cdns-pltfrm.c scsi: ufs: Disable local LCC in .link_startup_notify() in Cadence UFS 2019-08-29 17:42:52 -04:00
Kconfig scsi: ufs: Add driver for TI wrapper for Cadence UFS IP 2019-11-12 22:21:33 -05:00
Makefile scsi: ufs: Add driver for TI wrapper for Cadence UFS IP 2019-11-12 22:21:33 -05:00
tc-dwc-g210-pci.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
tc-dwc-g210-pltfrm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
tc-dwc-g210.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
tc-dwc-g210.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
ti-j721e-ufs.c scsi: ufs: Add driver for TI wrapper for Cadence UFS IP 2019-11-12 22:21:33 -05:00
ufs_bsg.c scsi: ufs: Fix kernel-doc warnings 2019-10-31 22:15:13 -04:00
ufs_bsg.h scsi: ufs: Add a bsg endpoint that supports UPIUs 2018-10-10 23:09:46 -04:00
ufs_quirks.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
ufs-hisi.c scsi: ufs-hisi: Use PTR_ERR_OR_ZERO() in ufs_hisi_get_resource() 2019-09-30 22:51:01 -04:00
ufs-hisi.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 471 2019-06-19 17:09:11 +02:00
ufs-mediatek.c scsi: ufs-mediatek: enable auto suspend capability 2019-09-30 23:01:17 -04:00
ufs-mediatek.h scsi: ufs-mediatek: Add UFS support for Mediatek SoC chips 2019-03-19 16:56:21 -04:00
ufs-qcom.c scsi: ufs-qcom: Add reset control support for host controller 2019-11-18 23:15:50 -05:00
ufs-qcom.h scsi: ufs-qcom: Add reset control support for host controller 2019-11-18 23:15:50 -05:00
ufs-sysfs.c scsi: ufs: Fix up auto hibern8 enablement 2019-11-18 23:15:51 -05:00
ufs-sysfs.h
ufs.h scsi: ufs: revamp string descriptor reading 2019-08-07 21:40:37 -04:00
ufshcd-dwc.c scsi: ufs: make array setup_attrs static const, makes object smaller 2019-09-30 22:47:21 -04:00
ufshcd-dwc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
ufshcd-pci.c scsi: ufshdc-pci: Add Intel PCI IDs for EHL 2019-06-26 22:42:28 -04:00
ufshcd-pltfrm.c scsi: ufs: ufshcd: Remove dev_err() on platform_get_irq() failure 2019-11-12 22:21:34 -05:00
ufshcd-pltfrm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 284 2019-06-05 17:36:37 +02:00
ufshcd.c scsi: ufs: Fix error handing during hibern8 enter 2019-11-19 21:37:32 -05:00
ufshcd.h scsi: ufs: Fix up auto hibern8 enablement 2019-11-18 23:15:51 -05:00
ufshci-dwc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
ufshci.h scsi: ufs: Fix irq return code 2019-11-19 21:37:09 -05:00
unipro.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00