[SCSI] be2iscsi: Issue an function level reset when driver is loaded
Signed-off-by: John Soni Jose <sony.john-n@emulex.com> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
5cac7596ba
commit
4d4d1ef8cb
@ -47,8 +47,6 @@
|
||||
static unsigned int be_iopoll_budget = 10;
|
||||
static unsigned int be_max_phys_size = 64;
|
||||
static unsigned int enable_msix = 1;
|
||||
static unsigned int gcrashmode = 0;
|
||||
static unsigned int num_hba = 0;
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, beiscsi_pci_id_table);
|
||||
MODULE_DESCRIPTION(DRV_DESC " " BUILD_STR);
|
||||
@ -4446,14 +4444,18 @@ void beiscsi_hba_attrs_init(struct beiscsi_hba *phba)
|
||||
beiscsi_log_enable_init(phba, beiscsi_log_enable);
|
||||
}
|
||||
|
||||
/*
|
||||
* beiscsi_quiesce()- Cleanup Driver resources
|
||||
* @phba: Instance Priv structure
|
||||
*
|
||||
* Free the OS and HW resources held by the driver
|
||||
**/
|
||||
static void beiscsi_quiesce(struct beiscsi_hba *phba)
|
||||
{
|
||||
struct hwi_controller *phwi_ctrlr;
|
||||
struct hwi_context_memory *phwi_context;
|
||||
struct be_eq_obj *pbe_eq;
|
||||
unsigned int i, msix_vec;
|
||||
u8 *real_offset = 0;
|
||||
u32 value = 0;
|
||||
|
||||
phwi_ctrlr = phba->phwi_ctrlr;
|
||||
phwi_context = phwi_ctrlr->phwi_ctxt;
|
||||
@ -4477,14 +4479,7 @@ static void beiscsi_quiesce(struct beiscsi_hba *phba)
|
||||
|
||||
beiscsi_clean_port(phba);
|
||||
beiscsi_free_mem(phba);
|
||||
real_offset = (u8 *)phba->csr_va + MPU_EP_SEMAPHORE;
|
||||
|
||||
value = readl((void *)real_offset);
|
||||
|
||||
if (value & 0x00010000) {
|
||||
value &= 0xfffeffff;
|
||||
writel(value, (void *)real_offset);
|
||||
}
|
||||
beiscsi_unmap_pci_function(phba);
|
||||
pci_free_consistent(phba->pcidev,
|
||||
phba->ctrl.mbox_mem_alloced.size,
|
||||
@ -4550,8 +4545,6 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
|
||||
struct hwi_context_memory *phwi_context;
|
||||
struct be_eq_obj *pbe_eq;
|
||||
int ret, i;
|
||||
u8 *real_offset = 0;
|
||||
u32 value = 0;
|
||||
|
||||
ret = beiscsi_enable_pci(pcidev);
|
||||
if (ret < 0) {
|
||||
@ -4606,31 +4599,18 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
|
||||
goto hba_free;
|
||||
}
|
||||
|
||||
if (!num_hba) {
|
||||
real_offset = (u8 *)phba->csr_va + MPU_EP_SEMAPHORE;
|
||||
value = readl((void *)real_offset);
|
||||
if (value & 0x00010000) {
|
||||
gcrashmode++;
|
||||
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
|
||||
"BM_%d : Loading Driver in crashdump mode\n");
|
||||
ret = beiscsi_cmd_reset_function(phba);
|
||||
if (ret) {
|
||||
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
|
||||
"BM_%d : Reset Failed. Aborting Crashdump\n");
|
||||
goto hba_free;
|
||||
}
|
||||
ret = be_chk_reset_complete(phba);
|
||||
if (ret) {
|
||||
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
|
||||
"BM_%d : Failed to get out of reset."
|
||||
"Aborting Crashdump\n");
|
||||
goto hba_free;
|
||||
}
|
||||
} else {
|
||||
value |= 0x00010000;
|
||||
writel(value, (void *)real_offset);
|
||||
num_hba++;
|
||||
}
|
||||
ret = beiscsi_cmd_reset_function(phba);
|
||||
if (ret) {
|
||||
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
|
||||
"BM_%d : Reset Failed. Aborting Crashdump\n");
|
||||
goto hba_free;
|
||||
}
|
||||
ret = be_chk_reset_complete(phba);
|
||||
if (ret) {
|
||||
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
|
||||
"BM_%d : Failed to get out of reset."
|
||||
"Aborting Crashdump\n");
|
||||
goto hba_free;
|
||||
}
|
||||
|
||||
spin_lock_init(&phba->io_sgl_lock);
|
||||
@ -4718,15 +4698,6 @@ free_twq:
|
||||
beiscsi_clean_port(phba);
|
||||
beiscsi_free_mem(phba);
|
||||
free_port:
|
||||
real_offset = (u8 *)phba->csr_va + MPU_EP_SEMAPHORE;
|
||||
|
||||
value = readl((void *)real_offset);
|
||||
|
||||
if (value & 0x00010000) {
|
||||
value &= 0xfffeffff;
|
||||
writel(value, (void *)real_offset);
|
||||
}
|
||||
|
||||
pci_free_consistent(phba->pcidev,
|
||||
phba->ctrl.mbox_mem_alloced.size,
|
||||
phba->ctrl.mbox_mem_alloced.va,
|
||||
|
Loading…
Reference in New Issue
Block a user