diff options
author | Himanshu Madhani <himanshu.madhani@qlogic.com> | 2014-09-25 05:17:00 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2014-09-25 08:25:05 -0400 |
commit | 2486c62765d73ad8f206ba43b8ede09e689bd803 (patch) | |
tree | 727ad8284c4286ff1fe2329dd91053d25560c08f | |
parent | e05fe2924892a6c3c23dc818e94ce80dbceb86b1 (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.c | 3 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 3 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 5 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 10 |
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 | } |