Commit 306eaf27 authored by Suganath Prabu's avatar Suganath Prabu Committed by Martin K. Petersen
Browse files

scsi: mpt3sas: Replace readl with ioc->base_readl



Use ioc->base_readl to restrict the readl retries to only Aero controllers.

Signed-off-by: default avatarSuganath Prabu <suganath-prabu.subramani@broadcom.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent b8992029
Loading
Loading
Loading
Loading
+20 −19
Original line number Original line Diff line number Diff line
@@ -742,7 +742,7 @@ mpt3sas_halt_firmware(struct MPT3SAS_ADAPTER *ioc)


	dump_stack();
	dump_stack();


	doorbell = readl(&ioc->chip->Doorbell);
	doorbell = ioc->base_readl(&ioc->chip->Doorbell);
	if ((doorbell & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT)
	if ((doorbell & MPI2_IOC_STATE_MASK) == MPI2_IOC_STATE_FAULT)
		mpt3sas_base_fault_info(ioc , doorbell);
		mpt3sas_base_fault_info(ioc , doorbell);
	else {
	else {
@@ -1351,10 +1351,10 @@ _base_mask_interrupts(struct MPT3SAS_ADAPTER *ioc)
	u32 him_register;
	u32 him_register;


	ioc->mask_interrupts = 1;
	ioc->mask_interrupts = 1;
	him_register = readl(&ioc->chip->HostInterruptMask);
	him_register = ioc->base_readl(&ioc->chip->HostInterruptMask);
	him_register |= MPI2_HIM_DIM + MPI2_HIM_RIM + MPI2_HIM_RESET_IRQ_MASK;
	him_register |= MPI2_HIM_DIM + MPI2_HIM_RIM + MPI2_HIM_RESET_IRQ_MASK;
	writel(him_register, &ioc->chip->HostInterruptMask);
	writel(him_register, &ioc->chip->HostInterruptMask);
	readl(&ioc->chip->HostInterruptMask);
	ioc->base_readl(&ioc->chip->HostInterruptMask);
}
}


/**
/**
@@ -1368,7 +1368,7 @@ _base_unmask_interrupts(struct MPT3SAS_ADAPTER *ioc)
{
{
	u32 him_register;
	u32 him_register;


	him_register = readl(&ioc->chip->HostInterruptMask);
	him_register = ioc->base_readl(&ioc->chip->HostInterruptMask);
	him_register &= ~MPI2_HIM_RIM;
	him_register &= ~MPI2_HIM_RIM;
	writel(him_register, &ioc->chip->HostInterruptMask);
	writel(him_register, &ioc->chip->HostInterruptMask);
	ioc->mask_interrupts = 0;
	ioc->mask_interrupts = 0;
@@ -4880,7 +4880,7 @@ mpt3sas_base_get_iocstate(struct MPT3SAS_ADAPTER *ioc, int cooked)
{
{
	u32 s, sc;
	u32 s, sc;


	s = readl(&ioc->chip->Doorbell);
	s = ioc->base_readl(&ioc->chip->Doorbell);
	sc = s & MPI2_IOC_STATE_MASK;
	sc = s & MPI2_IOC_STATE_MASK;
	return cooked ? sc : s;
	return cooked ? sc : s;
}
}
@@ -4936,7 +4936,7 @@ _base_wait_for_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout)
	count = 0;
	count = 0;
	cntdn = 1000 * timeout;
	cntdn = 1000 * timeout;
	do {
	do {
		int_status = readl(&ioc->chip->HostInterruptStatus);
		int_status = ioc->base_readl(&ioc->chip->HostInterruptStatus);
		if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
		if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
			dhsprintk(ioc,
			dhsprintk(ioc,
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
@@ -4962,7 +4962,7 @@ _base_spin_on_doorbell_int(struct MPT3SAS_ADAPTER *ioc, int timeout)
	count = 0;
	count = 0;
	cntdn = 2000 * timeout;
	cntdn = 2000 * timeout;
	do {
	do {
		int_status = readl(&ioc->chip->HostInterruptStatus);
		int_status = ioc->base_readl(&ioc->chip->HostInterruptStatus);
		if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
		if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
			dhsprintk(ioc,
			dhsprintk(ioc,
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
@@ -5000,14 +5000,14 @@ _base_wait_for_doorbell_ack(struct MPT3SAS_ADAPTER *ioc, int timeout)
	count = 0;
	count = 0;
	cntdn = 1000 * timeout;
	cntdn = 1000 * timeout;
	do {
	do {
		int_status = readl(&ioc->chip->HostInterruptStatus);
		int_status = ioc->base_readl(&ioc->chip->HostInterruptStatus);
		if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) {
		if (!(int_status & MPI2_HIS_SYS2IOC_DB_STATUS)) {
			dhsprintk(ioc,
			dhsprintk(ioc,
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
					   __func__, count, timeout));
					   __func__, count, timeout));
			return 0;
			return 0;
		} else if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
		} else if (int_status & MPI2_HIS_IOC2SYS_DB_STATUS) {
			doorbell = readl(&ioc->chip->Doorbell);
			doorbell = ioc->base_readl(&ioc->chip->Doorbell);
			if ((doorbell & MPI2_IOC_STATE_MASK) ==
			if ((doorbell & MPI2_IOC_STATE_MASK) ==
			    MPI2_IOC_STATE_FAULT) {
			    MPI2_IOC_STATE_FAULT) {
				mpt3sas_base_fault_info(ioc , doorbell);
				mpt3sas_base_fault_info(ioc , doorbell);
@@ -5042,7 +5042,7 @@ _base_wait_for_doorbell_not_used(struct MPT3SAS_ADAPTER *ioc, int timeout)
	count = 0;
	count = 0;
	cntdn = 1000 * timeout;
	cntdn = 1000 * timeout;
	do {
	do {
		doorbell_reg = readl(&ioc->chip->Doorbell);
		doorbell_reg = ioc->base_readl(&ioc->chip->Doorbell);
		if (!(doorbell_reg & MPI2_DOORBELL_USED)) {
		if (!(doorbell_reg & MPI2_DOORBELL_USED)) {
			dhsprintk(ioc,
			dhsprintk(ioc,
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
				  ioc_info(ioc, "%s: successful count(%d), timeout(%d)\n",
@@ -5157,13 +5157,13 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
	__le32 *mfp;
	__le32 *mfp;


	/* make sure doorbell is not in use */
	/* make sure doorbell is not in use */
	if ((readl(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) {
	if ((ioc->base_readl(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) {
		ioc_err(ioc, "doorbell is in use (line=%d)\n", __LINE__);
		ioc_err(ioc, "doorbell is in use (line=%d)\n", __LINE__);
		return -EFAULT;
		return -EFAULT;
	}
	}


	/* clear pending doorbell interrupts from previous state changes */
	/* clear pending doorbell interrupts from previous state changes */
	if (readl(&ioc->chip->HostInterruptStatus) &
	if (ioc->base_readl(&ioc->chip->HostInterruptStatus) &
	    MPI2_HIS_IOC2SYS_DB_STATUS)
	    MPI2_HIS_IOC2SYS_DB_STATUS)
		writel(0, &ioc->chip->HostInterruptStatus);
		writel(0, &ioc->chip->HostInterruptStatus);


@@ -5206,7 +5206,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
	}
	}


	/* read the first two 16-bits, it gives the total length of the reply */
	/* read the first two 16-bits, it gives the total length of the reply */
	reply[0] = le16_to_cpu(readl(&ioc->chip->Doorbell)
	reply[0] = le16_to_cpu(ioc->base_readl(&ioc->chip->Doorbell)
	    & MPI2_DOORBELL_DATA_MASK);
	    & MPI2_DOORBELL_DATA_MASK);
	writel(0, &ioc->chip->HostInterruptStatus);
	writel(0, &ioc->chip->HostInterruptStatus);
	if ((_base_wait_for_doorbell_int(ioc, 5))) {
	if ((_base_wait_for_doorbell_int(ioc, 5))) {
@@ -5214,7 +5214,7 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
			__LINE__);
			__LINE__);
		return -EFAULT;
		return -EFAULT;
	}
	}
	reply[1] = le16_to_cpu(readl(&ioc->chip->Doorbell)
	reply[1] = le16_to_cpu(ioc->base_readl(&ioc->chip->Doorbell)
	    & MPI2_DOORBELL_DATA_MASK);
	    & MPI2_DOORBELL_DATA_MASK);
	writel(0, &ioc->chip->HostInterruptStatus);
	writel(0, &ioc->chip->HostInterruptStatus);


@@ -5225,9 +5225,10 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
			return -EFAULT;
			return -EFAULT;
		}
		}
		if (i >=  reply_bytes/2) /* overflow case */
		if (i >=  reply_bytes/2) /* overflow case */
			readl(&ioc->chip->Doorbell);
			ioc->base_readl(&ioc->chip->Doorbell);
		else
		else
			reply[i] = le16_to_cpu(readl(&ioc->chip->Doorbell)
			reply[i] = le16_to_cpu(
			    ioc->base_readl(&ioc->chip->Doorbell)
			    & MPI2_DOORBELL_DATA_MASK);
			    & MPI2_DOORBELL_DATA_MASK);
		writel(0, &ioc->chip->HostInterruptStatus);
		writel(0, &ioc->chip->HostInterruptStatus);
	}
	}
@@ -6053,14 +6054,14 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
		if (count++ > 20)
		if (count++ > 20)
			goto out;
			goto out;


		host_diagnostic = readl(&ioc->chip->HostDiagnostic);
		host_diagnostic = ioc->base_readl(&ioc->chip->HostDiagnostic);
		drsprintk(ioc,
		drsprintk(ioc,
			  ioc_info(ioc, "wrote magic sequence: count(%d), host_diagnostic(0x%08x)\n",
			  ioc_info(ioc, "wrote magic sequence: count(%d), host_diagnostic(0x%08x)\n",
				   count, host_diagnostic));
				   count, host_diagnostic));


	} while ((host_diagnostic & MPI2_DIAG_DIAG_WRITE_ENABLE) == 0);
	} while ((host_diagnostic & MPI2_DIAG_DIAG_WRITE_ENABLE) == 0);


	hcb_size = readl(&ioc->chip->HCBSize);
	hcb_size = ioc->base_readl(&ioc->chip->HCBSize);


	drsprintk(ioc, ioc_info(ioc, "diag reset: issued\n"));
	drsprintk(ioc, ioc_info(ioc, "diag reset: issued\n"));
	writel(host_diagnostic | MPI2_DIAG_RESET_ADAPTER,
	writel(host_diagnostic | MPI2_DIAG_RESET_ADAPTER,
@@ -6073,7 +6074,7 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
	for (count = 0; count < (300000000 /
	for (count = 0; count < (300000000 /
		MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC); count++) {
		MPI2_HARD_RESET_PCIE_SECOND_READ_DELAY_MICRO_SEC); count++) {


		host_diagnostic = readl(&ioc->chip->HostDiagnostic);
		host_diagnostic = ioc->base_readl(&ioc->chip->HostDiagnostic);


		if (host_diagnostic == 0xFFFFFFFF)
		if (host_diagnostic == 0xFFFFFFFF)
			goto out;
			goto out;