lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 192/421] fsi: scom: Reset the FSI2PIB engine for any error
    Date
    From: Eddie James <eajames@linux.ibm.com>

    [ 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>
    ---
    drivers/fsi/fsi-scom.c | 16 +++++++++-------
    1 file changed, 9 insertions(+), 7 deletions(-)

    diff --git a/drivers/fsi/fsi-scom.c b/drivers/fsi/fsi-scom.c
    index fdc0e458dbaa..6a48b3144410 100644
    --- a/drivers/fsi/fsi-scom.c
    +++ b/drivers/fsi/fsi-scom.c
    @@ -47,9 +47,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)
    @@ -249,13 +250,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;
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-19 18:40    [W:4.266 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site