Commit b963752f authored by Giridhar Malavali's avatar Giridhar Malavali Committed by James Bottomley

[SCSI] qla2xxx: Clear drive active CRB register when not in use.

The CRB drive active register is cleared when driver is unloaded
or when driver enters failed state.
Signed-off-by: default avatarGiridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 9257aa49
...@@ -513,7 +513,6 @@ extern int qla82xx_nvram_config(struct scsi_qla_host *); ...@@ -513,7 +513,6 @@ extern int qla82xx_nvram_config(struct scsi_qla_host *);
extern int qla82xx_pinit_from_rom(scsi_qla_host_t *); extern int qla82xx_pinit_from_rom(scsi_qla_host_t *);
extern int qla82xx_load_firmware(scsi_qla_host_t *); extern int qla82xx_load_firmware(scsi_qla_host_t *);
extern int qla82xx_reset_hw(scsi_qla_host_t *); extern int qla82xx_reset_hw(scsi_qla_host_t *);
extern int qla82xx_load_risc_blob(scsi_qla_host_t *, uint32_t *);
extern void qla82xx_watchdog(scsi_qla_host_t *); extern void qla82xx_watchdog(scsi_qla_host_t *);
/* Firmware and flash related functions */ /* Firmware and flash related functions */
......
...@@ -1454,6 +1454,8 @@ qla2x00_setup_chip(scsi_qla_host_t *vha) ...@@ -1454,6 +1454,8 @@ qla2x00_setup_chip(scsi_qla_host_t *vha)
rval = ha->isp_ops->load_risc(vha, &srisc_address); rval = ha->isp_ops->load_risc(vha, &srisc_address);
if (rval == QLA_SUCCESS) if (rval == QLA_SUCCESS)
goto enable_82xx_npiv; goto enable_82xx_npiv;
else
goto failed;
} }
if (!IS_FWI2_CAPABLE(ha) && !IS_QLA2100(ha) && !IS_QLA2200(ha)) { if (!IS_FWI2_CAPABLE(ha) && !IS_QLA2100(ha) && !IS_QLA2200(ha)) {
......
...@@ -1683,7 +1683,7 @@ qla2x00_login_iocb(srb_t *sp, struct mbx_entry *mbx) ...@@ -1683,7 +1683,7 @@ qla2x00_login_iocb(srb_t *sp, struct mbx_entry *mbx)
struct srb_iocb *lio = ctx->u.iocb_cmd; struct srb_iocb *lio = ctx->u.iocb_cmd;
uint16_t opts; uint16_t opts;
mbx->entry_type = MBX_IOCB_TYPE;; mbx->entry_type = MBX_IOCB_TYPE;
SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id); SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id);
mbx->mb0 = cpu_to_le16(MBC_LOGIN_FABRIC_PORT); mbx->mb0 = cpu_to_le16(MBC_LOGIN_FABRIC_PORT);
opts = lio->u.logio.flags & SRB_LOGIN_COND_PLOGI ? BIT_0 : 0; opts = lio->u.logio.flags & SRB_LOGIN_COND_PLOGI ? BIT_0 : 0;
...@@ -1718,7 +1718,7 @@ qla2x00_logout_iocb(srb_t *sp, struct mbx_entry *mbx) ...@@ -1718,7 +1718,7 @@ qla2x00_logout_iocb(srb_t *sp, struct mbx_entry *mbx)
{ {
struct qla_hw_data *ha = sp->fcport->vha->hw; struct qla_hw_data *ha = sp->fcport->vha->hw;
mbx->entry_type = MBX_IOCB_TYPE;; mbx->entry_type = MBX_IOCB_TYPE;
SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id); SET_TARGET_ID(ha, mbx->loop_id, sp->fcport->loop_id);
mbx->mb0 = cpu_to_le16(MBC_LOGOUT_FABRIC_PORT); mbx->mb0 = cpu_to_le16(MBC_LOGOUT_FABRIC_PORT);
mbx->mb1 = HAS_EXTENDED_IDS(ha) ? mbx->mb1 = HAS_EXTENDED_IDS(ha) ?
......
...@@ -3279,6 +3279,10 @@ qla82xx_dev_failed_handler(scsi_qla_host_t *vha) ...@@ -3279,6 +3279,10 @@ qla82xx_dev_failed_handler(scsi_qla_host_t *vha)
/* Disable the board */ /* Disable the board */
qla_printk(KERN_INFO, ha, "Disabling the board\n"); qla_printk(KERN_INFO, ha, "Disabling the board\n");
qla82xx_idc_lock(ha);
qla82xx_clear_drv_active(ha);
qla82xx_idc_unlock(ha);
/* Set DEV_FAILED flag to disable timer */ /* Set DEV_FAILED flag to disable timer */
vha->device_flags |= DFLG_DEV_FAILED; vha->device_flags |= DFLG_DEV_FAILED;
qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16); qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16);
......
...@@ -538,11 +538,10 @@ ...@@ -538,11 +538,10 @@
/* Driver Coexistence Defines */ /* Driver Coexistence Defines */
#define QLA82XX_CRB_DRV_ACTIVE (QLA82XX_CAM_RAM(0x138)) #define QLA82XX_CRB_DRV_ACTIVE (QLA82XX_CAM_RAM(0x138))
#define QLA82XX_CRB_DEV_STATE (QLA82XX_CAM_RAM(0x140)) #define QLA82XX_CRB_DEV_STATE (QLA82XX_CAM_RAM(0x140))
#define QLA82XX_CRB_DEV_PART_INFO (QLA82XX_CAM_RAM(0x14c))
#define QLA82XX_CRB_DRV_IDC_VERSION (QLA82XX_CAM_RAM(0x174))
#define QLA82XX_CRB_DRV_STATE (QLA82XX_CAM_RAM(0x144)) #define QLA82XX_CRB_DRV_STATE (QLA82XX_CAM_RAM(0x144))
#define QLA82XX_CRB_DRV_SCRATCH (QLA82XX_CAM_RAM(0x148)) #define QLA82XX_CRB_DRV_SCRATCH (QLA82XX_CAM_RAM(0x148))
#define QLA82XX_CRB_DEV_PART_INFO (QLA82XX_CAM_RAM(0x14c)) #define QLA82XX_CRB_DEV_PART_INFO (QLA82XX_CAM_RAM(0x14c))
#define QLA82XX_CRB_DRV_IDC_VERSION (QLA82XX_CAM_RAM(0x174))
/* Every driver should use these Device State */ /* Every driver should use these Device State */
#define QLA82XX_DEV_COLD 1 #define QLA82XX_DEV_COLD 1
......
...@@ -2402,6 +2402,10 @@ qla2x00_remove_one(struct pci_dev *pdev) ...@@ -2402,6 +2402,10 @@ qla2x00_remove_one(struct pci_dev *pdev)
scsi_host_put(base_vha->host); scsi_host_put(base_vha->host);
if (IS_QLA82XX(ha)) { if (IS_QLA82XX(ha)) {
qla82xx_idc_lock(ha);
qla82xx_clear_drv_active(ha);
qla82xx_idc_unlock(ha);
iounmap((device_reg_t __iomem *)ha->nx_pcibase); iounmap((device_reg_t __iomem *)ha->nx_pcibase);
if (!ql2xdbwr) if (!ql2xdbwr)
iounmap((device_reg_t __iomem *)ha->nxdb_wr_ptr); iounmap((device_reg_t __iomem *)ha->nxdb_wr_ptr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment