Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3173167f authored by Giridhar Malavali's avatar Giridhar Malavali Committed by James Bottomley
Browse files

[SCSI] qla2xxx: Issue mailbox command only when firmware hung bit is reset for ISP82xx.

parent b668ae37
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -574,6 +574,7 @@ extern int qla82xx_mbx_intr_enable(scsi_qla_host_t *);
extern int qla82xx_mbx_intr_disable(scsi_qla_host_t *);
extern void qla82xx_start_iocbs(srb_t *);
extern int qla82xx_fcoe_ctx_reset(scsi_qla_host_t *);
extern int qla82xx_check_md_needed(scsi_qla_host_t *);
extern void qla82xx_chip_reset_cleanup(scsi_qla_host_t *);
extern int qla82xx_mbx_beacon_ctl(scsi_qla_host_t *, int);
extern char *qdev_state(uint32_t);
+14 −12
Original line number Diff line number Diff line
@@ -1480,13 +1480,19 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
			if (rval == QLA_SUCCESS) {
enable_82xx_npiv:
				fw_major_version = ha->fw_major_version;
				if (IS_QLA82XX(ha))
					qla82xx_check_md_needed(vha);
				else {
					rval = qla2x00_get_fw_version(vha,
					    &ha->fw_major_version,
					    &ha->fw_minor_version,
					    &ha->fw_subminor_version,
				    &ha->fw_attributes, &ha->fw_memory_size,
				    ha->mpi_version, &ha->mpi_capabilities,
					    &ha->fw_attributes,
					    &ha->fw_memory_size,
					    ha->mpi_version,
					    &ha->mpi_capabilities,
					    ha->phy_version);
				}
				if (rval != QLA_SUCCESS)
					goto failed;
				ha->flags.npiv_supported = 0;
@@ -5441,11 +5447,7 @@ qla82xx_restart_isp(scsi_qla_host_t *vha)
		clear_bit(ISP_ABORT_RETRY, &vha->dpc_flags);

		/* Update the firmware version */
		qla2x00_get_fw_version(vha, &ha->fw_major_version,
		    &ha->fw_minor_version, &ha->fw_subminor_version,
		    &ha->fw_attributes, &ha->fw_memory_size,
		    ha->mpi_version, &ha->mpi_capabilities,
		    ha->phy_version);
		status = qla82xx_check_md_needed(vha);

		if (ha->fce) {
			ha->flags.fce_enabled = 1;
+41 −33
Original line number Diff line number Diff line
@@ -3619,45 +3619,53 @@ qla82xx_need_reset_handler(scsi_qla_host_t *vha)
	}
}

static void
int
qla82xx_check_md_needed(scsi_qla_host_t *vha)
{
	struct qla_hw_data *ha = vha->hw;
	uint16_t fw_major_version, fw_minor_version, fw_subminor_version;
	uint16_t fw_attributes;
	uint32_t fw_memory_size, mpi_capabilities;
	uint8_t	mpi_version[3], phy_version[3];
	int rval = QLA_SUCCESS;

	if (!ha->fw_dumped) {
		qla2x00_get_fw_version(vha,
		    &fw_major_version,
		    &fw_minor_version,
		    &fw_subminor_version,
		    &fw_attributes, &fw_memory_size,
		    mpi_version, &mpi_capabilities,
		    phy_version);
	fw_major_version = ha->fw_major_version;
	fw_minor_version = ha->fw_minor_version;
	fw_subminor_version = ha->fw_subminor_version;

	rval = qla2x00_get_fw_version(vha, &ha->fw_major_version,
	    &ha->fw_minor_version, &ha->fw_subminor_version,
	    &ha->fw_attributes, &ha->fw_memory_size,
	    ha->mpi_version, &ha->mpi_capabilities,
	    ha->phy_version);

	if (rval != QLA_SUCCESS)
		return rval;

	if (ql2xmdenable) {
		if (!ha->fw_dumped) {
			if (fw_major_version != ha->fw_major_version ||
			    fw_minor_version != ha->fw_minor_version ||
			    fw_subminor_version != ha->fw_subminor_version) {

				ql_log(ql_log_info, vha, 0xb02d,
				    "Firmware version differs "
				    "Previous version: %d:%d:%d - "
				    "New version: %d:%d:%d\n",
				    ha->fw_major_version,
			    ha->fw_minor_version, ha->fw_subminor_version,
				    ha->fw_minor_version,
				    ha->fw_subminor_version,
				    fw_major_version, fw_minor_version,
				    fw_subminor_version);
				/* Release MiniDump resources */
				qla82xx_md_free(vha);
				/* ALlocate MiniDump resources */
				qla82xx_md_prep(vha);
		}
			} else
				ql_log(ql_log_info, vha, 0xb02e,
				    "Firmware dump available to retrieve\n",
				    vha->host_no);
		}
	}
	return rval;
}


int