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>
This commit is contained in:
parent
e05fe29248
commit
2486c62765
|
@ -11,8 +11,7 @@
|
|||
* ----------------------------------------------------------------------
|
||||
* | Level | Last Value Used | Holes |
|
||||
* ----------------------------------------------------------------------
|
||||
* | Module Init and Probe | 0x017d | 0x0141 |
|
||||
* | | | 0x0144,0x0146 |
|
||||
* | Module Init and Probe | 0x017d | 0x0144,0x0146 |
|
||||
* | | | 0x015b-0x0160 |
|
||||
* | | | 0x016e-0x0170 |
|
||||
* | Mailbox commands | 0x118d | 0x1115-0x1116 |
|
||||
|
|
|
@ -2945,7 +2945,8 @@ struct qla_hw_data {
|
|||
|
||||
uint32_t mr_reset_hdlr_active:1;
|
||||
uint32_t mr_intr_valid:1;
|
||||
/* 34 bits */
|
||||
uint32_t fawwpn_enabled:1;
|
||||
/* 35 bits */
|
||||
} flags;
|
||||
|
||||
/* This spinlock is used to protect "io transactions", you must
|
||||
|
|
|
@ -2202,6 +2202,11 @@ qla2x00_init_rings(scsi_qla_host_t *vha)
|
|||
if (IS_DPORT_CAPABLE(ha))
|
||||
mid_init_cb->init_cb.firmware_options_1 |=
|
||||
cpu_to_le16(BIT_7);
|
||||
/* Enable FA-WWPN */
|
||||
ha->flags.fawwpn_enabled =
|
||||
(mid_init_cb->init_cb.firmware_options_1 & BIT_6) ? 1 : 0;
|
||||
ql_dbg(ql_dbg_init, vha, 0x0141, "FA-WWPN Support: %s.\n",
|
||||
(ha->flags.fawwpn_enabled) ? "enabled" : "disabled");
|
||||
}
|
||||
|
||||
rval = qla2x00_init_firmware(vha, ha->init_cb_size);
|
||||
|
|
|
@ -752,6 +752,16 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb)
|
|||
if (atomic_read(&vha->loop_state) != LOOP_DOWN) {
|
||||
atomic_set(&vha->loop_state, LOOP_DOWN);
|
||||
atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME);
|
||||
/*
|
||||
* In case of loop down, restore WWPN from
|
||||
* NVRAM in case of FA-WWPN capable ISP
|
||||
*/
|
||||
if (ha->flags.fawwpn_enabled) {
|
||||
void *wwpn = ha->init_cb->port_name;
|
||||
|
||||
memcpy(vha->port_name, wwpn, WWN_SIZE);
|
||||
}
|
||||
|
||||
vha->device_flags |= DFLG_NO_CABLE;
|
||||
qla2x00_mark_all_devices_lost(vha, 1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue