提交 03aa868c 编写于 作者: S Sawan Chandak 提交者: James Bottomley

qla2xxx: Add support to show MPI and PEP FW version for ISP27xx.

Signed-off-by: NSawan Chandak <sawan.chandak@qlogic.com>
Signed-off-by: NHimanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: NJames Bottomley <JBottomley@Odin.com>
上级 fd49a540
...@@ -1345,7 +1345,8 @@ qla2x00_mpi_version_show(struct device *dev, struct device_attribute *attr, ...@@ -1345,7 +1345,8 @@ qla2x00_mpi_version_show(struct device *dev, struct device_attribute *attr,
scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
if (!IS_QLA81XX(ha) && !IS_QLA8031(ha) && !IS_QLA8044(ha)) if (!IS_QLA81XX(ha) && !IS_QLA8031(ha) && !IS_QLA8044(ha) &&
!IS_QLA27XX(ha))
return scnprintf(buf, PAGE_SIZE, "\n"); return scnprintf(buf, PAGE_SIZE, "\n");
return scnprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", return scnprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n",
...@@ -1534,6 +1535,20 @@ qla2x00_allow_cna_fw_dump_store(struct device *dev, ...@@ -1534,6 +1535,20 @@ qla2x00_allow_cna_fw_dump_store(struct device *dev,
return strlen(buf); return strlen(buf);
} }
static ssize_t
qla2x00_pep_version_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
struct qla_hw_data *ha = vha->hw;
if (!IS_QLA27XX(ha))
return scnprintf(buf, PAGE_SIZE, "\n");
return scnprintf(buf, PAGE_SIZE, "%d.%02d.%02d\n",
ha->pep_version[0], ha->pep_version[1], ha->pep_version[2]);
}
static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL);
static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL);
static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
...@@ -1578,6 +1593,7 @@ static DEVICE_ATTR(fw_dump_size, S_IRUGO, qla2x00_fw_dump_size_show, NULL); ...@@ -1578,6 +1593,7 @@ static DEVICE_ATTR(fw_dump_size, S_IRUGO, qla2x00_fw_dump_size_show, NULL);
static DEVICE_ATTR(allow_cna_fw_dump, S_IRUGO | S_IWUSR, static DEVICE_ATTR(allow_cna_fw_dump, S_IRUGO | S_IWUSR,
qla2x00_allow_cna_fw_dump_show, qla2x00_allow_cna_fw_dump_show,
qla2x00_allow_cna_fw_dump_store); qla2x00_allow_cna_fw_dump_store);
static DEVICE_ATTR(pep_version, S_IRUGO, qla2x00_pep_version_show, NULL);
struct device_attribute *qla2x00_host_attrs[] = { struct device_attribute *qla2x00_host_attrs[] = {
&dev_attr_driver_version, &dev_attr_driver_version,
...@@ -1611,6 +1627,7 @@ struct device_attribute *qla2x00_host_attrs[] = { ...@@ -1611,6 +1627,7 @@ struct device_attribute *qla2x00_host_attrs[] = {
&dev_attr_diag_megabytes, &dev_attr_diag_megabytes,
&dev_attr_fw_dump_size, &dev_attr_fw_dump_size,
&dev_attr_allow_cna_fw_dump, &dev_attr_allow_cna_fw_dump,
&dev_attr_pep_version,
NULL, NULL,
}; };
......
...@@ -3287,6 +3287,7 @@ struct qla_hw_data { ...@@ -3287,6 +3287,7 @@ struct qla_hw_data {
uint8_t mpi_version[3]; uint8_t mpi_version[3];
uint32_t mpi_capabilities; uint32_t mpi_capabilities;
uint8_t phy_version[3]; uint8_t phy_version[3];
uint8_t pep_version[3];
/* Firmware dump template */ /* Firmware dump template */
void *fw_dump_template; void *fw_dump_template;
......
...@@ -555,7 +555,9 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha) ...@@ -555,7 +555,9 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
if (IS_FWI2_CAPABLE(ha)) if (IS_FWI2_CAPABLE(ha))
mcp->in_mb |= MBX_17|MBX_16|MBX_15; mcp->in_mb |= MBX_17|MBX_16|MBX_15;
if (IS_QLA27XX(ha)) if (IS_QLA27XX(ha))
mcp->in_mb |= MBX_21|MBX_20|MBX_19|MBX_18; mcp->in_mb |= MBX_23 | MBX_22 | MBX_21 | MBX_20 | MBX_19 |
MBX_18 | MBX_14 | MBX_13 | MBX_11 | MBX_10 | MBX_9 | MBX_8;
mcp->flags = 0; mcp->flags = 0;
mcp->tov = MBX_TOV_SECONDS; mcp->tov = MBX_TOV_SECONDS;
rval = qla2x00_mailbox_command(vha, mcp); rval = qla2x00_mailbox_command(vha, mcp);
...@@ -571,6 +573,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha) ...@@ -571,6 +573,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
ha->fw_memory_size = 0x1FFFF; /* Defaults to 128KB. */ ha->fw_memory_size = 0x1FFFF; /* Defaults to 128KB. */
else else
ha->fw_memory_size = (mcp->mb[5] << 16) | mcp->mb[4]; ha->fw_memory_size = (mcp->mb[5] << 16) | mcp->mb[4];
if (IS_QLA81XX(vha->hw) || IS_QLA8031(vha->hw) || IS_QLA8044(ha)) { if (IS_QLA81XX(vha->hw) || IS_QLA8031(vha->hw) || IS_QLA8044(ha)) {
ha->mpi_version[0] = mcp->mb[10] & 0xff; ha->mpi_version[0] = mcp->mb[10] & 0xff;
ha->mpi_version[1] = mcp->mb[11] >> 8; ha->mpi_version[1] = mcp->mb[11] >> 8;
...@@ -580,6 +583,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha) ...@@ -580,6 +583,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
ha->phy_version[1] = mcp->mb[9] >> 8; ha->phy_version[1] = mcp->mb[9] >> 8;
ha->phy_version[2] = mcp->mb[9] & 0xff; ha->phy_version[2] = mcp->mb[9] & 0xff;
} }
if (IS_FWI2_CAPABLE(ha)) { if (IS_FWI2_CAPABLE(ha)) {
ha->fw_attributes_h = mcp->mb[15]; ha->fw_attributes_h = mcp->mb[15];
ha->fw_attributes_ext[0] = mcp->mb[16]; ha->fw_attributes_ext[0] = mcp->mb[16];
...@@ -591,7 +595,14 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha) ...@@ -591,7 +595,14 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
"%s: Ext_FwAttributes Upper: 0x%x, Lower: 0x%x.\n", "%s: Ext_FwAttributes Upper: 0x%x, Lower: 0x%x.\n",
__func__, mcp->mb[17], mcp->mb[16]); __func__, mcp->mb[17], mcp->mb[16]);
} }
if (IS_QLA27XX(ha)) { if (IS_QLA27XX(ha)) {
ha->mpi_version[0] = mcp->mb[10] & 0xff;
ha->mpi_version[1] = mcp->mb[11] >> 8;
ha->mpi_version[2] = mcp->mb[11] & 0xff;
ha->pep_version[0] = mcp->mb[13] & 0xff;
ha->pep_version[1] = mcp->mb[14] >> 8;
ha->pep_version[2] = mcp->mb[14] & 0xff;
ha->fw_shared_ram_start = (mcp->mb[19] << 16) | mcp->mb[18]; ha->fw_shared_ram_start = (mcp->mb[19] << 16) | mcp->mb[18];
ha->fw_shared_ram_end = (mcp->mb[21] << 16) | mcp->mb[20]; ha->fw_shared_ram_end = (mcp->mb[21] << 16) | mcp->mb[20];
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册