scsi: mpt3sas: Diag-Reset when Doorbell-In-Use bit is set during driver load time
[ Upstream commit 3f5eb062e8aa335643181c480e6c590c6cedfd22 ] Issue a Diag-Reset when the "Doorbell-In-Use" bit is set during the driver load/initialization. Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com> Link: https://lore.kernel.org/r/20241110173341.11595-2-ranjan.kumar@broadcom.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
58a94f526c
commit
657034f594
1 changed files with 6 additions and 1 deletions
|
@ -6008,11 +6008,12 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
|
|||
int i;
|
||||
u8 failed;
|
||||
__le32 *mfp;
|
||||
int ret_val;
|
||||
|
||||
/* make sure doorbell is not in use */
|
||||
if ((ioc->base_readl_ext_retry(&ioc->chip->Doorbell) & MPI2_DOORBELL_USED)) {
|
||||
ioc_err(ioc, "doorbell is in use (line=%d)\n", __LINE__);
|
||||
return -EFAULT;
|
||||
goto doorbell_diag_reset;
|
||||
}
|
||||
|
||||
/* clear pending doorbell interrupts from previous state changes */
|
||||
|
@ -6102,6 +6103,10 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
|
|||
le32_to_cpu(mfp[i]));
|
||||
}
|
||||
return 0;
|
||||
|
||||
doorbell_diag_reset:
|
||||
ret_val = _base_diag_reset(ioc);
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue