aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaurav Kashyap <saurav.kashyap@qlogic.com>2012-08-22 14:21:22 -0400
committerJames Bottomley <JBottomley@Parallels.com>2012-09-24 04:10:52 -0400
commit0251ce8cf22fa4b531dfa8257497038eb0ac2b90 (patch)
tree47e0490097943c9da8333e6ce625689d4d6ea64e
parent45980cc22edc324d145978340bd3fc6dd8417f81 (diff)
[SCSI] qla2xxx: set idc version if function is first one to come.
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com> Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rw-r--r--drivers/scsi/qla2xxx/qla_dbg.c1
-rw-r--r--drivers/scsi/qla2xxx/qla_nx.c30
2 files changed, 26 insertions, 5 deletions
diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c
index 6de4d0319715..279f52c7dfcd 100644
--- a/drivers/scsi/qla2xxx/qla_dbg.c
+++ b/drivers/scsi/qla2xxx/qla_dbg.c
@@ -34,7 +34,6 @@
34 * | AER/EEH | 0x9011 | | 34 * | AER/EEH | 0x9011 | |
35 * | Virtual Port | 0xa007 | | 35 * | Virtual Port | 0xa007 | |
36 * | ISP82XX Specific | 0xb084 | 0xb002,0xb024 | 36 * | ISP82XX Specific | 0xb084 | 0xb002,0xb024 |
37 * | | | 0xb082,0xb083 |
38 * | MultiQ | 0xc00c | | 37 * | MultiQ | 0xc00c | |
39 * | Misc | 0xd010 | | 38 * | Misc | 0xd010 | |
40 * | Target Mode | 0xe06f | | 39 * | Target Mode | 0xe06f | |
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index 9fc08b881f9c..3a054445fca1 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -2303,6 +2303,29 @@ void qla82xx_init_flags(struct qla_hw_data *ha)
2303} 2303}
2304 2304
2305inline void 2305inline void
2306qla82xx_set_idc_version(scsi_qla_host_t *vha)
2307{
2308 int idc_ver;
2309 uint32_t drv_active;
2310 struct qla_hw_data *ha = vha->hw;
2311
2312 drv_active = qla82xx_rd_32(ha, QLA82XX_CRB_DRV_ACTIVE);
2313 if (drv_active == (QLA82XX_DRV_ACTIVE << (ha->portnum * 4))) {
2314 qla82xx_wr_32(ha, QLA82XX_CRB_DRV_IDC_VERSION,
2315 QLA82XX_IDC_VERSION);
2316 ql_log(ql_log_info, vha, 0xb082,
2317 "IDC version updated to %d\n", QLA82XX_IDC_VERSION);
2318 } else {
2319 idc_ver = qla82xx_rd_32(ha, QLA82XX_CRB_DRV_IDC_VERSION);
2320 if (idc_ver != QLA82XX_IDC_VERSION)
2321 ql_log(ql_log_info, vha, 0xb083,
2322 "qla2xxx driver IDC version %d is not compatible "
2323 "with IDC version %d of the other drivers\n",
2324 QLA82XX_IDC_VERSION, idc_ver);
2325 }
2326}
2327
2328inline void
2306qla82xx_set_drv_active(scsi_qla_host_t *vha) 2329qla82xx_set_drv_active(scsi_qla_host_t *vha)
2307{ 2330{
2308 uint32_t drv_active; 2331 uint32_t drv_active;
@@ -2878,9 +2901,6 @@ dev_initialize:
2878 "HW State: INITIALIZING.\n"); 2901 "HW State: INITIALIZING.\n");
2879 qla82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, QLA8XXX_DEV_INITIALIZING); 2902 qla82xx_wr_32(ha, QLA82XX_CRB_DEV_STATE, QLA8XXX_DEV_INITIALIZING);
2880 2903
2881 /* Driver that sets device state to initializating sets IDC version */
2882 qla82xx_wr_32(ha, QLA82XX_CRB_DRV_IDC_VERSION, QLA82XX_IDC_VERSION);
2883
2884 qla82xx_idc_unlock(ha); 2904 qla82xx_idc_unlock(ha);
2885 rval = qla82xx_start_firmware(vha); 2905 rval = qla82xx_start_firmware(vha);
2886 qla82xx_idc_lock(ha); 2906 qla82xx_idc_lock(ha);
@@ -3210,8 +3230,10 @@ qla82xx_device_state_handler(scsi_qla_host_t *vha)
3210 int loopcount = 0; 3230 int loopcount = 0;
3211 3231
3212 qla82xx_idc_lock(ha); 3232 qla82xx_idc_lock(ha);
3213 if (!vha->flags.init_done) 3233 if (!vha->flags.init_done) {
3214 qla82xx_set_drv_active(vha); 3234 qla82xx_set_drv_active(vha);
3235 qla82xx_set_idc_version(vha);
3236 }
3215 3237
3216 dev_state = qla82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE); 3238 dev_state = qla82xx_rd_32(ha, QLA82XX_CRB_DEV_STATE);
3217 old_dev_state = dev_state; 3239 old_dev_state = dev_state;