diff options
author | Saurav Kashyap <saurav.kashyap@qlogic.com> | 2012-08-22 14:21:22 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-09-24 04:10:52 -0400 |
commit | 0251ce8cf22fa4b531dfa8257497038eb0ac2b90 (patch) | |
tree | 47e0490097943c9da8333e6ce625689d4d6ea64e | |
parent | 45980cc22edc324d145978340bd3fc6dd8417f81 (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.c | 1 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_nx.c | 30 |
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 | ||
2305 | inline void | 2305 | inline void |
2306 | qla82xx_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 | |||
2328 | inline void | ||
2306 | qla82xx_set_drv_active(scsi_qla_host_t *vha) | 2329 | qla82xx_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; |