Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d4d1ef8 authored by John Soni Jose's avatar John Soni Jose Committed by James Bottomley
Browse files

[SCSI] be2iscsi: Issue an function level reset when driver is loaded

parent 5cac7596
Loading
Loading
Loading
Loading
+18 −47
Original line number Diff line number Diff line
@@ -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,13 +4599,6 @@ 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,
@@ -4626,12 +4612,6 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
			    "Aborting Crashdump\n");
		goto hba_free;
	}
		} else {
			value |= 0x00010000;
			writel(value, (void *)real_offset);
			num_hba++;
		}
	}

	spin_lock_init(&phba->io_sgl_lock);
	spin_lock_init(&phba->mgmt_sgl_lock);
@@ -4718,15 +4698,6 @@ static int __devinit beiscsi_dev_probe(struct pci_dev *pcidev,
	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,