- Changes the size to 0x86064.
- The fw expects dword len instead of bytes.
- removed family version, its removed from requirements.
- Do nic core reset even on dump failure.
- mctp dump failure used to return failure even in case of success.
- memset mailbox regs and correctly set them.
Jira Key: V2632FC-213
ER: ER95908
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
return snprintf(buf, PAGE_SIZE, "%s\n",
ha->isp_ops->fw_version_str(vha, fw_str));
}
-static ssize_t
-qla2x00_family_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_MCTP_CAPABLE(ha))
- return -ENOTSUPP;
- if (!ha->family_version) {
- ha->family_version = dma_alloc_coherent(&ha->pdev->dev, MCTP_VERSION_SIZE,
- &ha->family_version_dma, GFP_KERNEL);
-
- qla2xxx_get_host_param(vha, ha->family_version_dma, 1);
- }
- return snprintf(buf, PAGE_SIZE, "%s\n", (char *)ha->family_version);
-}
-
-static ssize_t
-qla2x00_family_version_store(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
-{
- scsi_qla_host_t *vha = shost_priv(class_to_shost(dev));
- struct qla_hw_data *ha = vha->hw;
- dma_addr_t family_version_dma;
- void *family_version;
-
- if (!IS_MCTP_CAPABLE(ha))
- return -ENOTSUPP;
-
- family_version = dma_alloc_coherent(&ha->pdev->dev, MCTP_VERSION_SIZE,
- &family_version_dma, GFP_KERNEL);
-
- strncpy(family_version, buf, 4);
-
- qla2xxx_set_host_param(vha, ha->family_version_dma, 1);
-
- dma_free_coherent(&ha->pdev->dev, MCTP_VERSION_SIZE,
- family_version, family_version_dma);
-
- return strlen(buf);
-}
static ssize_t
qla2x00_serial_num_show(struct device *dev, struct device_attribute *attr,
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(family_version, S_IRUGO | S_IWUSR, qla2x00_family_version_show,
- qla2x00_family_version_store);
static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL);
static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL);
static DEVICE_ATTR(isp_id, S_IRUGO, qla2x00_isp_id_show, NULL);
struct device_attribute *qla2x00_host_attrs[] = {
&dev_attr_driver_version,
&dev_attr_fw_version,
- &dev_attr_family_version,
&dev_attr_serial_num,
&dev_attr_isp_name,
&dev_attr_isp_id,
* | Level | Last Value Used | Holes |
* ----------------------------------------------------------------------
* | Module Init and Probe | 0x0122 | 0x4b,0xba,0xfa |
- * | Mailbox commands | 0x1153 | 0x111a-0x111b |
+ * | Mailbox commands | 0x114d | 0x111a-0x111b |
* | Device Discovery | 0x2087 | 0x2020-0x2022, |
* | | | 0x2016 |
* | Queue Command and IO tracing | 0x3030 | 0x3006,0x3008 |
* | | | 0x800b,0x8039 |
* | AER/EEH | 0x9011 | |
* | Virtual Port | 0xa008 | |
- * | ISP82XX Specific | 0xb083 | 0xb002,0xb024 |
+ * | ISP82XX Specific | 0xb084 | 0xb002,0xb024 |
* | MultiQ | 0xc00c | |
* | Misc | 0xd010 | |
* ----------------------------------------------------------------------
dma_addr_t eft_dma;
void *eft;
/* Current size of mctp dump is 0x086064 bytes */
-#define MCTP_DUMP_SIZE (536*1024)
+#define MCTP_DUMP_SIZE 0x086064
dma_addr_t mctp_dump_dma;
void *mctp_dump;
int mctp_dumped;
int mctp_dump_reading;
-#define MCTP_VERSION_SIZE 4
- dma_addr_t family_version_dma;
- void *family_version;
uint32_t chain_offset;
struct dentry *dfs_dir;
struct dentry *dfs_fce;
extern void qla83xx_idc_audit(scsi_qla_host_t *, int);
extern int qla83xx_nic_core_reset(scsi_qla_host_t *);
extern void qla83xx_reset_ownership(scsi_qla_host_t *);
-extern int qla2xx_mctp_dump(scsi_qla_host_t *);
+extern int qla2xxx_mctp_dump(scsi_qla_host_t *);
/*
* Global Data in qla_os.c source file.
extern int
qla2x00_dump_mctp_data(scsi_qla_host_t *, dma_addr_t, uint32_t, uint32_t);
-extern int
-qla2xxx_set_host_param(scsi_qla_host_t *, dma_addr_t, uint32_t);
-
-extern int
-qla2xxx_get_host_param(scsi_qla_host_t *, dma_addr_t, uint32_t);
-
/*
* Global Function Prototypes in qla_isr.c source file.
*/
}
int
-qla2xx_mctp_dump(scsi_qla_host_t *vha)
+qla2xxx_mctp_dump(scsi_qla_host_t *vha)
{
struct qla_hw_data *ha = vha->hw;
int rval = QLA_FUNCTION_FAILED;
ha->mctp_dump = dma_alloc_coherent(&ha->pdev->dev,
MCTP_DUMP_SIZE, &ha->mctp_dump_dma, GFP_KERNEL);
- if (!ha->mctp_dump)
+ if (!ha->mctp_dump) {
ql_log(ql_log_warn, vha, 0x506e,
"Failed to allocate memory for mctp dump\n");
- return rval;
+ return rval;
+ }
}
- rval = qla2x00_dump_mctp_data(vha, ha->mctp_dump_dma, 0x00000000, MCTP_DUMP_SIZE);
+#define MCTP_DUMP_STR_ADDR 0x00000000
+ rval = qla2x00_dump_mctp_data(vha, ha->mctp_dump_dma,
+ MCTP_DUMP_STR_ADDR, MCTP_DUMP_SIZE/4);
if (rval != QLA_SUCCESS) {
ql_log(ql_log_warn, vha, 0x506f,
"Failed to capture mctp dump\n");
- return rval;
+ } else {
+ ql_log(ql_log_info, vha, 0x5070,
+ "Mctp dump capture for host (%ld/%p).\n",
+ vha->host_no, ha->mctp_dump);
+ ha->mctp_dumped = 1;
}
- ql_log(ql_log_info, vha, 0x5070,
- "Mctp dump capture for host (%ld/%p).\n", vha->host_no, ha->mctp_dump);
- ha->mctp_dumped = 1;
if (!ha->flags.nic_core_reset_hdlr_active) {
ha->flags.nic_core_reset_hdlr_active = 1;
if ((rval = qla83xx_restart_nic_firmware(vha)))
/* NIC Core reset failed. */
ql_log(ql_log_warn, vha, 0x5071,
"Failed to restart nic firmware\n");
+ else
+ ql_dbg(ql_dbg_p3p, vha, 0xb084,
+ "Restarted NIC firmware successfully.\n");
ha->flags.nic_core_reset_hdlr_active = 0;
}
ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x114b,
"Entered %s.\n", __func__);
+ memset(mcp->mb, 0, sizeof(mcp->mb));
mcp->mb[0] = MBC_DUMP_RISC_RAM_EXTENDED;
- if (MSW(addr)) {
- mcp->mb[8] = MSW(addr);
- mcp->out_mb = MBX_8|MBX_0;
- }
mcp->mb[1] = LSW(addr);
mcp->mb[2] = MSW(req_dma);
mcp->mb[3] = LSW(req_dma);
mcp->mb[5] = LSW(size);
mcp->mb[6] = MSW(MSD(req_dma));
mcp->mb[7] = LSW(MSD(req_dma));
+ mcp->mb[8] = MSW(addr);
/* Setting RAM ID to valid */
mcp->mb[10] |= BIT_7;
/* For MCTP RAM ID is 0x40 */
mcp->mb[10] |= 0x40;
- mcp->out_mb |= MBX_10;
- mcp->out_mb |= MBX_10|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1;
+ mcp->out_mb |= MBX_10|MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
mcp->in_mb = MBX_0;
mcp->tov = MBX_TOV_SECONDS;
return rval;
}
-
-int
-qla2xxx_set_host_param(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t len)
-{
- int rval;
- mbx_cmd_t mc;
- mbx_cmd_t *mcp = &mc;
-
- if (!IS_MCTP_CAPABLE(vha->hw))
- return QLA_FUNCTION_FAILED;
-
- ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x114e,
- "Entered %s.\n", __func__);
- mcp->mb[0] = MBC_SET_RNID_PARAMS;
-#define HOST_VERSION_ID_TYPE 0x9
- mcp->mb[1] = ((len / 8) & 0x00ff) | HOST_VERSION_ID_TYPE << 8;
- mcp->mb[2] = MSW(req_dma);
- mcp->mb[3] = LSW(req_dma);
- mcp->mb[6] = MSW(MSD(req_dma));
- mcp->mb[7] = LSW(MSD(req_dma));
-
- mcp->out_mb |= MBX_7|MBX_6|MBX_3|MBX_2|MBX_1;
- mcp->in_mb = MBX_0;
- mcp->tov = MBX_TOV_SECONDS;
- mcp->flags = 0;
- rval = qla2x00_mailbox_command(vha, mcp);
-
- if (rval != QLA_SUCCESS) {
- ql_dbg(ql_dbg_mbx, vha, 0x114f,
- "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
- } else {
- ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1150,
- "Done %s.\n", __func__);
- }
-
- return rval;
-
-}
-
-int
-qla2xxx_get_host_param(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t len)
-{
- int rval;
- mbx_cmd_t mc;
- mbx_cmd_t *mcp = &mc;
-
- if (!IS_MCTP_CAPABLE(vha->hw))
- return QLA_FUNCTION_FAILED;
-
- ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1151,
- "Entered %s.\n", __func__);
- mcp->mb[0] = MBC_GET_RNID_PARAMS;
-#define HOST_VERSION_ID_TYPE 0x9
- mcp->mb[1] = ((len / 8) & 0x00ff) | HOST_VERSION_ID_TYPE << 8;
- mcp->mb[2] = MSW(req_dma);
- mcp->mb[3] = LSW(req_dma);
- mcp->mb[6] = MSW(MSD(req_dma));
- mcp->mb[7] = LSW(MSD(req_dma));
-
- mcp->out_mb |= MBX_7|MBX_6|MBX_3|MBX_2|MBX_1;
- mcp->in_mb = MBX_0;
- mcp->tov = MBX_TOV_SECONDS;
- mcp->flags = 0;
- rval = qla2x00_mailbox_command(vha, mcp);
-
- if (rval != QLA_SUCCESS) {
- ql_dbg(ql_dbg_mbx, vha, 0x1152,
- "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
- } else {
- ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1153,
- "Done %s.\n", __func__);
- }
-
- return rval;
-
-}
dma_free_coherent(&ha->pdev->dev, MCTP_DUMP_SIZE, ha->mctp_dump,
ha->mctp_dump_dma);
- if (ha->family_version)
- dma_free_coherent(&ha->pdev->dev, MCTP_VERSION_SIZE,
- ha->family_version, ha->family_version_dma);
-
if (ha->srb_mempool)
mempool_destroy(ha->srb_mempool);
uint32_t dev_state = 0;
if (IS_QLA2031(ha)) {
- if (qla2xx_mctp_dump(base_vha) != QLA_SUCCESS)
+ if (qla2xxx_mctp_dump(base_vha) != QLA_SUCCESS)
ql_log(ql_log_warn, base_vha, 0xb081,
"Failed to dump mctp\n");
return;