fsi: scom: Reset the FSI2PIB engine for any error
[ Upstream commit a5c317dac5567206ca7b6bc9d008dd6890c8bced ] The error bits in the FSI2PIB status are only cleared by a reset. So the driver needs to perform a reset after seeing any of the FSI2PIB errors, otherwise subsequent operations will also look like failures. Fixes: 6b293258cded ("fsi: scom: Major overhaul") Signed-off-by: Eddie James <eajames@linux.ibm.com> Reviewed-by: Joel Stanley <joel@jms.id.au> Link: https://lore.kernel.org/r/20210329151344.14246-1-eajames@linux.ibm.com Signed-off-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
19c8f5307a
commit
96c914057a
@ -38,9 +38,10 @@
|
||||
#define SCOM_STATUS_PIB_RESP_MASK 0x00007000
|
||||
#define SCOM_STATUS_PIB_RESP_SHIFT 12
|
||||
|
||||
#define SCOM_STATUS_ANY_ERR (SCOM_STATUS_PROTECTION | \
|
||||
SCOM_STATUS_PARITY | \
|
||||
SCOM_STATUS_PIB_ABORT | \
|
||||
#define SCOM_STATUS_FSI2PIB_ERROR (SCOM_STATUS_PROTECTION | \
|
||||
SCOM_STATUS_PARITY | \
|
||||
SCOM_STATUS_PIB_ABORT)
|
||||
#define SCOM_STATUS_ANY_ERR (SCOM_STATUS_FSI2PIB_ERROR | \
|
||||
SCOM_STATUS_PIB_RESP_MASK)
|
||||
/* SCOM address encodings */
|
||||
#define XSCOM_ADDR_IND_FLAG BIT_ULL(63)
|
||||
@ -240,13 +241,14 @@ static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status)
|
||||
{
|
||||
uint32_t dummy = -1;
|
||||
|
||||
if (status & SCOM_STATUS_PROTECTION)
|
||||
return -EPERM;
|
||||
if (status & SCOM_STATUS_PARITY) {
|
||||
if (status & SCOM_STATUS_FSI2PIB_ERROR)
|
||||
fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy,
|
||||
sizeof(uint32_t));
|
||||
|
||||
if (status & SCOM_STATUS_PROTECTION)
|
||||
return -EPERM;
|
||||
if (status & SCOM_STATUS_PARITY)
|
||||
return -EIO;
|
||||
}
|
||||
/* Return -EBUSY on PIB abort to force a retry */
|
||||
if (status & SCOM_STATUS_PIB_ABORT)
|
||||
return -EBUSY;
|
||||
|
Loading…
x
Reference in New Issue
Block a user