]> www.infradead.org Git - users/hch/misc.git/commitdiff
scsi: ufs: core: Include UTP error in INT_FATAL_ERRORS
authorHoyoung Seo <hy50.seo@samsung.com>
Tue, 30 Sep 2025 06:14:28 +0000 (15:14 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 30 Sep 2025 20:10:29 +0000 (16:10 -0400)
When a UTP error occurs in isolation, UFS is not currently recoverable.
This is because the UTP error is not considered fatal in the error
handling code, leading to either an I/O timeout or an OCS error.

Add the UTP error flag to INT_FATAL_ERRORS so the controller will be
reset in this situation.

  sd 0:0:0:0: [sda] tag#38 UNKNOWN(0x2003) Result: hostbyte=0x07
  driverbyte=DRIVER_OK cmd_age=0s
  sd 0:0:0:0: [sda] tag#38 CDB: opcode=0x28 28 00 00 51 24 e2 00 00 08 00
  I/O error, dev sda, sector 42542864 op 0x0:(READ) flags 0x80700 phys_seg
  8 prio class 2
  OCS error from controller = 9 for tag 39
  pa_err[1] = 0x80000010 at 2667224756 us
  pa_err: total cnt=2
  dl_err[0] = 0x80000002 at 2667148060 us
  dl_err[1] = 0x80002000 at 2667282844 us
  No record of nl_err
  No record of tl_err
  No record of dme_err
  No record of auto_hibern8_err
  fatal_err[0] = 0x804 at 2667282836 us

  ---------------------------------------------------
   REGISTER
  ---------------------------------------------------
                             NAME       OFFSET          VALUE
                      STD HCI SFR   0xfffffff0            0x0
                             AHIT         0x18          0x814
                 INTERRUPT STATUS         0x20         0x1000
                 INTERRUPT ENABLE         0x24        0x70ef5

[mkp: commit desc]

Signed-off-by: Hoyoung Seo <hy50.seo@samsung.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Message-Id: <20250930061428.617955-1-hy50.seo@samsung.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
include/ufs/ufshci.h

index 612500a7088f00fe97131aaee91508faf1b37772..e64b701321010be384175d6fbe1d8893023536e1 100644 (file)
@@ -180,6 +180,7 @@ static inline u32 ufshci_version(u32 major, u32 minor)
 #define UTP_TASK_REQ_COMPL                     0x200
 #define UIC_COMMAND_COMPL                      0x400
 #define DEVICE_FATAL_ERROR                     0x800
+#define UTP_ERROR                              0x1000
 #define CONTROLLER_FATAL_ERROR                 0x10000
 #define SYSTEM_BUS_FATAL_ERROR                 0x20000
 #define CRYPTO_ENGINE_FATAL_ERROR              0x40000
@@ -199,7 +200,8 @@ static inline u32 ufshci_version(u32 major, u32 minor)
                                CONTROLLER_FATAL_ERROR |\
                                SYSTEM_BUS_FATAL_ERROR |\
                                CRYPTO_ENGINE_FATAL_ERROR |\
-                               UIC_LINK_LOST)
+                               UIC_LINK_LOST |\
+                               UTP_ERROR)
 
 /* HCS - Host Controller Status 30h */
 #define DEVICE_PRESENT                         0x1