linux/drivers/scsi/ufs
Yaniv Gardi 583fa62d08 scsi: ufs: add error recovery after DL NAC error
Some vendor's UFS device sends back to back NACs for the DL data frames
causing the host controller to raise the DFES error status. Sometimes
such UFS devices send back to back NAC without waiting for new
retransmitted DL frame from the host and in such cases it might be
possible the Host UniPro goes into bad state without raising the DFES
error interrupt. If this happens then all the pending commands would
timeout only after respective SW command (which is generally too
large).

This change workarounds such device behaviour like this:
- As soon as SW sees the DL NAC error, it would schedule the error
  handler
- Error handler would sleep for 50ms to see if there any fatal errors
  raised by UFS controller.
   - If there are fatal errors then SW does normal error recovery.
   - If there are no fatal errors then SW sends the NOP command to
     device to check if link is alive.
       - If NOP command times out, SW does normal error recovery
       - If NOP command succeed, skip the error handling.

If DL NAC error is seen multiple times with some vendor's UFS devices
then enable this quirk to initiate quick error recovery and also
silence related error logs to reduce spamming of kernel logs.

Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Yaniv Gardi <ygardi@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2016-03-14 21:04:45 -04:00
..
Kconfig scsi: ufs-qcom: update configuration option of SCSI_UFS_QCOM component 2015-11-09 17:46:56 -05:00
Makefile ufs-qcom: add support for Qualcomm Technologies Inc platforms 2015-01-20 19:43:26 +01:00
ufs_quirks.h scsi: ufs: separate device and host quirks 2016-03-14 21:04:45 -04:00
ufs-qcom.c scsi: ufs-qcom: add number of lanes per direction 2016-03-14 21:04:45 -04:00
ufs-qcom.h scsi: ufs-qcom: add QUniPro hardware support and power optimizations 2015-11-09 18:03:55 -05:00
ufs.h scsi: ufs: disable vccq if it's not needed by UFS device 2016-03-14 21:04:45 -04:00
ufshcd-pci.c SCSI / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM 2014-12-15 15:11:06 +01:00
ufshcd-pltfrm.c scsi: ufs-qcom: add number of lanes per direction 2016-03-14 21:04:45 -04:00
ufshcd-pltfrm.h scsi: ufs: make the UFS variant a platform device 2015-11-09 18:00:02 -05:00
ufshcd.c scsi: ufs: add error recovery after DL NAC error 2016-03-14 21:04:45 -04:00
ufshcd.h scsi: ufs: separate device and host quirks 2016-03-14 21:04:45 -04:00
ufshci.h scsi: ufs: add error recovery after DL NAC error 2016-03-14 21:04:45 -04:00
unipro.h ufs: fix TRUE and FALSE re-define build error 2015-06-15 14:40:50 +02:00