[PATCH linux dev-4.13 04/10] fsi/fsi-master-gpio: More error handling cleanup
Christopher Bostic
cbostic at linux.vnet.ibm.com
Fri May 25 04:50:21 AEST 2018
Reviewed-by: Christopher Bostic <cbostic at linux.vnet.ibm.com>
On 5/24/18 12:14 AM, Benjamin Herrenschmidt wrote:
> Remove calls to the empty and useless fsi_master_gpio_error()
> function, and report CRC errors as "FSI_ERR_NO_SLAVE" when
> reading an all 1's response.
>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> ---
> drivers/fsi/fsi-master-gpio.c | 26 +++++---------------------
> 1 file changed, 5 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c
> index 351c12f2ac55..da556da62846 100644
> --- a/drivers/fsi/fsi-master-gpio.c
> +++ b/drivers/fsi/fsi-master-gpio.c
> @@ -41,13 +41,6 @@
> #define FSI_GPIO_RESP_BUSY 1 /* Slave busy */
> #define FSI_GPIO_RESP_ERRA 2 /* Any (misc) Error */
> #define FSI_GPIO_RESP_ERRC 3 /* Slave reports master CRC error */
> -#define FSI_GPIO_MTOE 4 /* Master time out error */
> -#define FSI_GPIO_CRC_INVAL 5 /* Master reports slave CRC error */
> -
> -/* Normal slave responses */
> -#define FSI_GPIO_RESP_BUSY 1
> -#define FSI_GPIO_RESP_ACK 0
> -#define FSI_GPIO_RESP_ACKD 4
>
> #define FSI_GPIO_MAX_BUSY 200
> #define FSI_GPIO_MTOE_COUNT 1000
> @@ -359,15 +352,6 @@ static void build_term_command(struct fsi_gpio_msg *cmd, uint8_t slave_id)
> msg_push_crc(cmd);
> }
>
> -/*
> - * Store information on master errors so handler can detect and clean
> - * up the bus
> - */
> -static void fsi_master_gpio_error(struct fsi_master_gpio *master, int error)
> -{
> -
> -}
> -
> /*
> * Note: callers rely specifically on this returning -EAGAIN for
> * a CRC error detected in the response. Use other error code
> @@ -396,7 +380,6 @@ static int read_one_response(struct fsi_master_gpio *master,
> if (i == FSI_GPIO_MTOE_COUNT) {
> dev_dbg(master->dev,
> "Master time out waiting for response\n");
> - fsi_master_gpio_error(master, FSI_GPIO_MTOE);
> spin_unlock_irqrestore(&master->bit_lock, flags);
> return -ETIMEDOUT;
> }
> @@ -422,8 +405,11 @@ static int read_one_response(struct fsi_master_gpio *master,
> crc = crc4(0, 1, 1);
> crc = crc4(crc, msg.msg, msg.bits);
> if (crc) {
> - dev_dbg(master->dev, "ERR response CRC\n");
> - fsi_master_gpio_error(master, FSI_GPIO_CRC_INVAL);
> + /* Check if it's all 1's, that probably means the host is off */
> + if (((~msg.msg) & ((1ull << msg.bits) - 1)) == 0)
> + return -ENODEV;
> + dev_dbg(master->dev, "ERR response CRC msg: 0x%016llx (%d bits)\n",
> + msg.msg, msg.bits);
> return -EAGAIN;
> }
>
> @@ -538,12 +524,10 @@ static int poll_for_response(struct fsi_master_gpio *master,
>
> case FSI_GPIO_RESP_ERRA:
> dev_dbg(master->dev, "ERRA received: 0x%x\n", (int)response.msg);
> - fsi_master_gpio_error(master, response.msg);
> rc = -EIO;
> break;
> case FSI_GPIO_RESP_ERRC:
> dev_dbg(master->dev, "ERRC received: 0x%x\n", (int)response.msg);
> - fsi_master_gpio_error(master, response.msg);
> trace_fsi_master_gpio_crc_cmd_error(master);
> rc = -EAGAIN;
> break;
More information about the openbmc
mailing list