[SCSI] qla4xxx: Set graceful reset bit for ISP83XX
authorVikas Chaudhary <vikas.chaudhary@qlogic.com>
Thu, 7 Mar 2013 10:43:09 +0000 (05:43 -0500)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 10 Apr 2013 18:41:56 +0000 (11:41 -0700)
For ISP83XX set graceful reset bit in IDC_DRV_CTRL
if reset is issued by application

Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla4xxx/ql4_os.c

index 1c387e7b2227b0bcb899e142b5a910449557abc1..b3ccb1ad8c025ef77faadef9becc59902a7365d9 100644 (file)
@@ -6081,6 +6081,7 @@ static int qla4xxx_host_reset(struct Scsi_Host *shost, int reset_type)
 {
        struct scsi_qla_host *ha = to_qla_host(shost);
        int rval = QLA_SUCCESS;
+       uint32_t idc_ctrl;
 
        if (ql4xdontresethba) {
                DEBUG2(ql4_printk(KERN_INFO, ha, "%s: Don't Reset HBA\n",
@@ -6111,6 +6112,14 @@ static int qla4xxx_host_reset(struct Scsi_Host *shost, int reset_type)
        }
 
 recover_adapter:
+       /* For ISP83XX set graceful reset bit in IDC_DRV_CTRL if
+        * reset is issued by application */
+       if (is_qla8032(ha) && test_bit(DPC_RESET_HA, &ha->dpc_flags)) {
+               idc_ctrl = qla4_83xx_rd_reg(ha, QLA83XX_IDC_DRV_CTRL);
+               qla4_83xx_wr_reg(ha, QLA83XX_IDC_DRV_CTRL,
+                                (idc_ctrl | GRACEFUL_RESET_BIT1));
+       }
+
        rval = qla4xxx_recover_adapter(ha);
        if (rval != QLA_SUCCESS) {
                DEBUG2(ql4_printk(KERN_INFO, ha, "%s: recover adapter fail\n",