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

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
...@@ -742,7 +742,7 @@ mpt3sas_halt_firmware(struct MPT3SAS_ADAPTER *ioc) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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;
......
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