[SCSI] qla4xxx: Dump HW/FW reg to figure out what caused FW to be hung for ISP82XX
[firefly-linux-kernel-4.4.55.git] / drivers / scsi / qla4xxx / ql4_os.c
index c22f2a764d9d0f46a356e17973c745bec578ccaf..b657ecec46fa564b6c9276252894c4219f7e462f 100644 (file)
@@ -679,7 +679,27 @@ static void qla4_8xxx_check_fw_alive(struct scsi_qla_host *ha)
                if (ha->seconds_since_last_heartbeat == 2) {
                        ha->seconds_since_last_heartbeat = 0;
                        halt_status = qla4_8xxx_rd_32(ha,
-                           QLA82XX_PEG_HALT_STATUS1);
+                                                     QLA82XX_PEG_HALT_STATUS1);
+
+                       ql4_printk(KERN_INFO, ha,
+                                  "scsi(%ld): %s, Dumping hw/fw registers:\n "
+                                  " PEG_HALT_STATUS1: 0x%x, PEG_HALT_STATUS2:"
+                                  " 0x%x,\n PEG_NET_0_PC: 0x%x, PEG_NET_1_PC:"
+                                  " 0x%x,\n PEG_NET_2_PC: 0x%x, PEG_NET_3_PC:"
+                                  " 0x%x,\n PEG_NET_4_PC: 0x%x\n",
+                                  ha->host_no, __func__, halt_status,
+                                  qla4_8xxx_rd_32(ha,
+                                                  QLA82XX_PEG_HALT_STATUS2),
+                                  qla4_8xxx_rd_32(ha, QLA82XX_CRB_PEG_NET_0 +
+                                                  0x3c),
+                                  qla4_8xxx_rd_32(ha, QLA82XX_CRB_PEG_NET_1 +
+                                                  0x3c),
+                                  qla4_8xxx_rd_32(ha, QLA82XX_CRB_PEG_NET_2 +
+                                                  0x3c),
+                                  qla4_8xxx_rd_32(ha, QLA82XX_CRB_PEG_NET_3 +
+                                                  0x3c),
+                                  qla4_8xxx_rd_32(ha, QLA82XX_CRB_PEG_NET_4 +
+                                                  0x3c));
 
                        /* Since we cannot change dev_state in interrupt
                         * context, set appropriate DPC flag then wakeup