[SCSI] be2iscsi: Issue an function level reset when driver is loaded
authorJohn Soni Jose <sony.john-n@emulex.com>
Fri, 19 Oct 2012 23:12:37 +0000 (04:42 +0530)
committerJames Bottomley <JBottomley@Parallels.com>
Tue, 27 Nov 2012 04:59:36 +0000 (08:59 +0400)
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>
drivers/scsi/be2iscsi/be_main.c

index bd0f49f..41c7c56 100644 (file)
@@ -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,