]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
scsi: qla2xxx: Add D-Port Diagnostic reason explanation logs
authorJoe Carnuccio <joe.carnuccio@cavium.com>
Tue, 17 Dec 2019 22:06:09 +0000 (14:06 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 20 Dec 2019 03:42:44 +0000 (22:42 -0500)
This patch adds more details when D-Port diag async event is generated by
the firmware.

Link: https://lore.kernel.org/r/20191217220617.28084-7-hmadhani@marvell.com
Signed-off-by: Joe Carnuccio <joe.carnuccio@cavium.com>
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_isr.c

index f60fb9c19c2630a037a25aac399572341e252b3b..8fadc8673f1117f4d911ca57bea30ff0269f92ff 100644 (file)
@@ -1252,11 +1252,33 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
 
        case MBA_DPORT_DIAGNOSTICS:
                ql_dbg(ql_dbg_async, vha, 0x5052,
-                   "D-Port Diagnostics: %04x result=%s\n",
-                   mb[0],
-                   mb[1] == 0 ? "start" :
-                   mb[1] == 1 ? "done (pass)" :
-                   mb[1] == 2 ? "done (error)" : "other");
+                   "D-Port Diagnostics: %04x %04x %04x %04x\n",
+                   mb[0], mb[1], mb[2], mb[3]);
+               if (IS_QLA83XX(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) {
+                       static char *results[] = {
+                           "start", "done(pass)", "done(error)", "undefined" };
+                       static char *types[] = {
+                           "none", "dynamic", "static", "other" };
+                       uint result = mb[1] >> 0 & 0x3;
+                       uint type = mb[1] >> 6 & 0x3;
+                       uint sw = mb[1] >> 15 & 0x1;
+                       ql_dbg(ql_dbg_async, vha, 0x5052,
+                           "D-Port Diagnostics: result=%s type=%s [sw=%u]\n",
+                           results[result], types[type], sw);
+                       if (result == 2) {
+                               static char *reasons[] = {
+                                   "reserved", "unexpected reject",
+                                   "unexpected phase", "retry exceeded",
+                                   "timed out", "not supported",
+                                   "user stopped" };
+                               uint reason = mb[2] >> 0 & 0xf;
+                               uint phase = mb[2] >> 12 & 0xf;
+                               ql_dbg(ql_dbg_async, vha, 0x5052,
+                                   "D-Port Diagnostics: reason=%s phase=%u \n",
+                                   reason < 7 ? reasons[reason] : "other",
+                                   phase >> 1);
+                       }
+               }
                break;
 
        case MBA_TEMPERATURE_ALERT: