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: 6b293258cd
("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>
This commit is contained in:
parent
4134cb9165
commit
a5c317dac5
|
@ -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)
|
||||||
{
|
{
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue