Commit a5c317da authored by Eddie James's avatar Eddie James Committed by Joel Stanley

fsi: scom: Reset the FSI2PIB engine for any error

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: 6b293258 ("fsi: scom: Major overhaul")
Signed-off-by: default avatarEddie James <eajames@linux.ibm.com>
Reviewed-by: default avatarJoel Stanley <joel@jms.id.au>
Link: https://lore.kernel.org/r/20210329151344.14246-1-eajames@linux.ibm.comSigned-off-by: default avatarJoel Stanley <joel@jms.id.au>
parent 4134cb91
...@@ -38,9 +38,10 @@ ...@@ -38,9 +38,10 @@
#define SCOM_STATUS_PIB_RESP_MASK 0x00007000 #define SCOM_STATUS_PIB_RESP_MASK 0x00007000
#define SCOM_STATUS_PIB_RESP_SHIFT 12 #define SCOM_STATUS_PIB_RESP_SHIFT 12
#define SCOM_STATUS_ANY_ERR (SCOM_STATUS_PROTECTION | \ #define SCOM_STATUS_FSI2PIB_ERROR (SCOM_STATUS_PROTECTION | \
SCOM_STATUS_PARITY | \ SCOM_STATUS_PARITY | \
SCOM_STATUS_PIB_ABORT | \ SCOM_STATUS_PIB_ABORT)
#define SCOM_STATUS_ANY_ERR (SCOM_STATUS_FSI2PIB_ERROR | \
SCOM_STATUS_PIB_RESP_MASK) SCOM_STATUS_PIB_RESP_MASK)
/* SCOM address encodings */ /* SCOM address encodings */
#define XSCOM_ADDR_IND_FLAG BIT_ULL(63) #define XSCOM_ADDR_IND_FLAG BIT_ULL(63)
...@@ -240,13 +241,14 @@ static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status) ...@@ -240,13 +241,14 @@ static int handle_fsi2pib_status(struct scom_device *scom, uint32_t status)
{ {
uint32_t dummy = -1; uint32_t dummy = -1;
if (status & SCOM_STATUS_PROTECTION) if (status & SCOM_STATUS_FSI2PIB_ERROR)
return -EPERM;
if (status & SCOM_STATUS_PARITY) {
fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy, fsi_device_write(scom->fsi_dev, SCOM_FSI2PIB_RESET_REG, &dummy,
sizeof(uint32_t)); sizeof(uint32_t));
if (status & SCOM_STATUS_PROTECTION)
return -EPERM;
if (status & SCOM_STATUS_PARITY)
return -EIO; return -EIO;
}
/* Return -EBUSY on PIB abort to force a retry */ /* Return -EBUSY on PIB abort to force a retry */
if (status & SCOM_STATUS_PIB_ABORT) if (status & SCOM_STATUS_PIB_ABORT)
return -EBUSY; return -EBUSY;
......
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