]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qla2xxx: Update to Implementation of the mctp.
authorSaurav Kashyap <saurav.kashyap@qlogic.com>
Mon, 27 Aug 2012 07:28:00 +0000 (12:58 +0530)
committerMaxim Uvarov <maxim.uvarov@oracle.com>
Mon, 27 Aug 2012 09:44:29 +0000 (02:44 -0700)
- 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>
drivers/scsi/qla2xxx/qla_attr.c
drivers/scsi/qla2xxx/qla_dbg.c
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_mbx.c
drivers/scsi/qla2xxx/qla_os.c

index b2f6871e4cf311b243986c285764fd0770727c2b..088e181494a9e57f139c5e2e4f849f742b2e6ffa 100644 (file)
@@ -878,48 +878,6 @@ qla2x00_fw_version_show(struct device *dev,
        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,
@@ -1395,8 +1353,6 @@ qla2x00_fw_dump_size_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);
@@ -1440,7 +1396,6 @@ static DEVICE_ATTR(fw_dump_size, S_IRUGO, qla2x00_fw_dump_size_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,
index 54d066f30333732db7640f9eacdb990ccaf05da0..c65e1ffafff596fc772c3abdcb36963955dbc2c3 100644 (file)
@@ -12,7 +12,7 @@
  * |             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  |
@@ -32,7 +32,7 @@
  * |                             |                    | 0x800b,0x8039 |
  * | AER/EEH                      |       0x9011       |               |
  * | Virtual Port                 |       0xa008       |               |
- * | ISP82XX Specific             |       0xb083       | 0xb002,0xb024 |
+ * | ISP82XX Specific             |       0xb084       | 0xb002,0xb024 |
  * | MultiQ                       |       0xc00c       |              |
  * | Misc                         |       0xd010       |              |
  * ----------------------------------------------------------------------
index c0624a25d23bd06cec9c70cca2d51bb28de32aed..c07119c398cb1a66e14b3605e86ff72f3e5aa7e1 100644 (file)
@@ -2842,14 +2842,11 @@ struct qla_hw_data {
        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;
index a2b467ebc86510b58c5cbd214f82c68615067f34..d6d69157b366b437c84db914832ddaa5e72f21b3 100644 (file)
@@ -82,7 +82,7 @@ extern int __qla83xx_get_idc_control(scsi_qla_host_t *, uint32_t *);
 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.
@@ -397,12 +397,6 @@ qla2x00_port_logout(scsi_qla_host_t *, struct fc_port *);
 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.
  */
index cf89800d36b0fd329c827dbb546345f2cd8ec807..9d16f9ffc0f28bc047dfdeb9a4b8470b7752d539 100644 (file)
@@ -4081,7 +4081,7 @@ exit:
 }
 
 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;
@@ -4097,28 +4097,35 @@ qla2xx_mctp_dump(scsi_qla_host_t *vha)
                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;
         }
 
index cb8cebf443281814fde37771155e1266a9c2d25f..75ebc9c38f1abfb183c1e2ee344db14e48e3ef11 100644 (file)
@@ -4940,11 +4940,8 @@ qla2x00_dump_mctp_data(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t addr,
        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);
@@ -4952,13 +4949,13 @@ qla2x00_dump_mctp_data(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t addr,
        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;
@@ -4975,79 +4972,3 @@ qla2x00_dump_mctp_data(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t addr,
 
        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;
-
-}
index 96fd7988465002ed91a32db79ab199b0a1e7af35..e6fda177a0924f84d783d0ac5698df5390e01f5a 100644 (file)
@@ -3291,10 +3291,6 @@ qla2x00_mem_free(struct qla_hw_data *ha)
                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);
 
@@ -3819,7 +3815,7 @@ qla83xx_nic_core_reset_work(struct work_struct *work)
        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;