aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHimanshu Madhani <himanshu.madhani@qlogic.com>2014-09-25 05:17:00 -0400
committerChristoph Hellwig <hch@lst.de>2014-09-25 08:25:05 -0400
commit2486c62765d73ad8f206ba43b8ede09e689bd803 (patch)
tree727ad8284c4286ff1fe2329dd91053d25560c08f
parente05fe2924892a6c3c23dc818e94ce80dbceb86b1 (diff)
qla2xxx: Restore WWPN in case of Loop Dead.
For FA-WWPN capable device, ISP2031 and ISP27XX, when loop dead is detected by a driver, restore WWPN from NVRAM. Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com> Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c3
-rw-r--r--drivers/scsi/qla2xxx/qla_def.h3
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c5
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c10
4 files changed, 18 insertions, 3 deletions
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index b21adb3d5e67..5f25cf0db568 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -11,8 +11,7 @@
11 * ---------------------------------------------------------------------- 11 * ----------------------------------------------------------------------
12 * | Level | Last Value Used | Holes | 12 * | Level | Last Value Used | Holes |
13 * ---------------------------------------------------------------------- 13 * ----------------------------------------------------------------------
14 * | Module Init and Probe | 0x017d | 0x0141 | 14 * | Module Init and Probe | 0x017d | 0x0144,0x0146 |
15 * | | | 0x0144,0x0146 |
16 * | | | 0x015b-0x0160 | 15 * | | | 0x015b-0x0160 |
17 * | | | 0x016e-0x0170 | 16 * | | | 0x016e-0x0170 |
18 * | Mailbox commands | 0x118d | 0x1115-0x1116 | 17 * | Mailbox commands | 0x118d | 0x1115-0x1116 |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
index d529510bbc6c..a3bab3a3efdd 100644
--- a/drivers/scsi/qla2xxx/qla_def.h
+++ b/drivers/scsi/qla2xxx/qla_def.h
@@ -2945,7 +2945,8 @@ struct qla_hw_data {
2945 2945
2946 uint32_t mr_reset_hdlr_active:1; 2946 uint32_t mr_reset_hdlr_active:1;
2947 uint32_t mr_intr_valid:1; 2947 uint32_t mr_intr_valid:1;
2948 /* 34 bits */ 2948 uint32_t fawwpn_enabled:1;
2949 /* 35 bits */
2949 } flags; 2950 } flags;
2950 2951
2951 /* This spinlock is used to protect "io transactions", you must 2952 /* This spinlock is used to protect "io transactions", you must
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index 51cabb953552..23f12dddcb4a 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -2202,6 +2202,11 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
2202 if (IS_DPORT_CAPABLE(ha)) 2202 if (IS_DPORT_CAPABLE(ha))
2203 mid_init_cb->init_cb.firmware_options_1 |= 2203 mid_init_cb->init_cb.firmware_options_1 |=
2204 cpu_to_le16(BIT_7); 2204 cpu_to_le16(BIT_7);
2205 /* Enable FA-WWPN */
2206 ha->flags.fawwpn_enabled =
2207 (mid_init_cb->init_cb.firmware_options_1 & BIT_6) ? 1 : 0;
2208 ql_dbg(ql_dbg_init, vha, 0x0141, "FA-WWPN Support: %s.\n",
2209 (ha->flags.fawwpn_enabled) ? "enabled" : "disabled");
2205 } 2210 }
2206 2211
2207 rval = qla2x00_init_firmware(vha, ha->init_cb_size); 2212 rval = qla2x00_init_firmware(vha, ha->init_cb_size);
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index f15f87e1abd8..696e4a2d3fa7 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -752,6 +752,16 @@ skip_rio:
752 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { 752 if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
753 atomic_set(&vha->loop_state, LOOP_DOWN); 753 atomic_set(&vha->loop_state, LOOP_DOWN);
754 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); 754 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
755 /*
756 * In case of loop down, restore WWPN from
757 * NVRAM in case of FA-WWPN capable ISP
758 */
759 if (ha->flags.fawwpn_enabled) {
760 void *wwpn = ha->init_cb->port_name;
761
762 memcpy(vha->port_name, wwpn, WWN_SIZE);
763 }
764
755 vha->device_flags |= DFLG_NO_CABLE; 765 vha->device_flags |= DFLG_NO_CABLE;
756 qla2x00_mark_all_devices_lost(vha, 1); 766 qla2x00_mark_all_devices_lost(vha, 1);
757 } 767 }