]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qla2xxx: set idc version if function is first one to come.
authorSaurav Kashyap <saurav.kashyap@qlogic.com>
Mon, 27 Aug 2012 07:22:39 +0000 (12:52 +0530)
committerMaxim Uvarov <maxim.uvarov@oracle.com>
Mon, 27 Aug 2012 09:44:27 +0000 (02:44 -0700)
JIRA Key: V2632FC-235

ER: ER95274

Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
drivers/scsi/qla2xxx/qla_dbg.c
drivers/scsi/qla2xxx/qla_nx.c

index 887617279d3526fb029ff350b8f45e137b7098f4..fcf55642d33c1dd80a6400d2c7eab1bd3b50aed4 100644 (file)
@@ -16,7 +16,7 @@
  * | Device Discovery             |       0x2087       | 0x2020-0x2022  |
  * | Queue Command and IO tracing |       0x3030       | 0x3006,0x3008  |
  * |                              |                    | 0x302d,0x302e  |
- * | DPC Thread                   |       0x401c       | 0x4002,0x4013  |
+ * | DPC Thread                   |       0x401d       | 0x4002,0x4013  |
  * | Async Events                 |       0x5071       | 0x502b-0x502f  |
  * |                            |                    | 0x5047,0x5052  |
  * | Timer Routines               |       0x6011       |               |
@@ -31,7 +31,7 @@
  * |                             |                    | 0x800b,0x8039 |
  * | AER/EEH                      |       0x9011       |               |
  * | Virtual Port                 |       0xa008       |               |
- * | ISP82XX Specific             |       0xb081       | 0xb002,0xb024 |
+ * | ISP82XX Specific             |       0xb083       | 0xb002,0xb024 |
  * | MultiQ                       |       0xc00c       |              |
  * | Misc                         |       0xd010       |              |
  * ----------------------------------------------------------------------
index 7e31d61eae9148c3a2c885e0e91fe725e8f3df1d..099564b2cc4d3ff3d181c69350fe531952ee33c2 100644 (file)
@@ -2302,6 +2302,29 @@ void qla82xx_init_flags(struct qla_hw_data *ha)
        ha->nx_legacy_intr.pci_int_reg = nx_legacy_intr->pci_int_reg;
 }
 
+inline void
+qla82xx_set_idc_version(scsi_qla_host_t *vha)
+{
+       int idc_ver;
+       uint32_t drv_active;
+       struct qla_hw_data *ha = vha->hw;
+
+       drv_active = qla82xx_rd_32(ha, QLA82XX_CRB_DRV_ACTIVE);
+       if (drv_active == (QLA82XX_DRV_ACTIVE << (ha->portnum * 4))) {
+               qla82xx_wr_32(ha, QLA82XX_CRB_DRV_IDC_VERSION,
+                   QLA82XX_IDC_VERSION);
+               ql_log(ql_log_info, vha, 0xb082,
+                   "IDC version updated to %d\n", QLA82XX_IDC_VERSION);
+       } else {
+               idc_ver = qla82xx_rd_32(ha, QLA82XX_CRB_DRV_IDC_VERSION);
+               if (idc_ver != QLA82XX_IDC_VERSION)
+                       ql_log(ql_log_info, vha, 0xb083,
+                           "qla2xxx driver IDC version %d is not compatible "
+                           "with IDC version %d of the other drivers\n",
+                           QLA82XX_IDC_VERSION, idc_ver);
+       }
+}
+
 inline void
 qla82xx_set_drv_active(scsi_qla_host_t *vha)
 {
@@ -2878,9 +2901,6 @@ dev_initialize:
            "HW State: INITIALIZING.\n");
        qla82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, QLA8XXX_DEV_INITIALIZING);
 
-       /* Driver that sets device state to initializating sets IDC version */
-       qla82xx_wr_32(ha, QLA82XX_CRB_DRV_IDC_VERSION, QLA82XX_IDC_VERSION);
-
        qla82xx_idc_unlock(ha);
        rval = qla82xx_start_firmware(vha);
        qla82xx_idc_lock(ha);
@@ -3210,8 +3230,10 @@ qla82xx_device_state_handler(scsi_qla_host_t *vha)
        int loopcount = 0;
 
        qla82xx_idc_lock(ha);
-       if (!vha->flags.init_done)
+       if (!vha->flags.init_done) {
                qla82xx_set_drv_active(vha);
+               qla82xx_set_idc_version(vha);
+       }
 
        dev_state = qla82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE);
        old_dev_state = dev_state;