Commit 2486c627 authored by Himanshu Madhani's avatar Himanshu Madhani Committed by Christoph Hellwig
Browse files

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: default avatarHimanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: default avatarSaurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent e05fe292
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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	|
+2 −1
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -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);
+10 −0
Original line number Diff line number Diff line
@@ -752,6 +752,16 @@ skip_rio:
		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);
		}