[PATCH linux dev-4.13 01/10] fsi/gpio: Include command build in locked section
Christopher Bostic
cbostic at linux.vnet.ibm.com
Thu May 24 23:40:35 AEST 2018
Reviewed-by: Christopher Bostic <cbostic at linux.vnet.ibm.com>
On 5/24/18 12:14 AM, Benjamin Herrenschmidt wrote:
> From: Jeremy Kerr <jk at ozlabs.org>
>
> For implementing relative addressing mode, we'll need to build a command
> that is coherent with CFAM state. To do that, include the
> build_command_* functions in the locked section of read/write/term.
>
> Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> ---
> drivers/fsi/fsi-master-gpio.c | 25 ++++++++++++++++++-------
> 1 file changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/fsi/fsi-master-gpio.c b/drivers/fsi/fsi-master-gpio.c
> index e1bde9e3f855..d50ea4849377 100644
> --- a/drivers/fsi/fsi-master-gpio.c
> +++ b/drivers/fsi/fsi-master-gpio.c
> @@ -463,14 +463,10 @@ static int fsi_master_gpio_xfer(struct fsi_master_gpio *master, uint8_t slave,
> {
> int rc;
>
> - mutex_lock(&master->cmd_lock);
> -
> rc = send_request(master, cmd);
> if (!rc)
> rc = poll_for_response(master, slave, resp_len, resp);
>
> - mutex_unlock(&master->cmd_lock);
> -
> return rc;
> }
>
> @@ -479,12 +475,17 @@ static int fsi_master_gpio_read(struct fsi_master *_master, int link,
> {
> struct fsi_master_gpio *master = to_fsi_master_gpio(_master);
> struct fsi_gpio_msg cmd;
> + int rc;
>
> if (link != 0)
> return -ENODEV;
>
> + mutex_lock(&master->cmd_lock);
> build_abs_ar_command(&cmd, id, addr, size, NULL);
> - return fsi_master_gpio_xfer(master, id, &cmd, size, val);
> + rc = fsi_master_gpio_xfer(master, id, &cmd, size, val);
> + mutex_unlock(&master->cmd_lock);
> +
> + return rc;
> }
>
> static int fsi_master_gpio_write(struct fsi_master *_master, int link,
> @@ -492,12 +493,17 @@ static int fsi_master_gpio_write(struct fsi_master *_master, int link,
> {
> struct fsi_master_gpio *master = to_fsi_master_gpio(_master);
> struct fsi_gpio_msg cmd;
> + int rc;
>
> if (link != 0)
> return -ENODEV;
>
> + mutex_lock(&master->cmd_lock);
> build_abs_ar_command(&cmd, id, addr, size, val);
> - return fsi_master_gpio_xfer(master, id, &cmd, 0, NULL);
> + rc = fsi_master_gpio_xfer(master, id, &cmd, 0, NULL);
> + mutex_unlock(&master->cmd_lock);
> +
> + return rc;
> }
>
> static int fsi_master_gpio_term(struct fsi_master *_master,
> @@ -505,12 +511,17 @@ static int fsi_master_gpio_term(struct fsi_master *_master,
> {
> struct fsi_master_gpio *master = to_fsi_master_gpio(_master);
> struct fsi_gpio_msg cmd;
> + int rc;
>
> if (link != 0)
> return -ENODEV;
>
> + mutex_lock(&master->cmd_lock);
> build_term_command(&cmd, id);
> - return fsi_master_gpio_xfer(master, id, &cmd, 0, NULL);
> + rc = fsi_master_gpio_xfer(master, id, &cmd, 0, NULL);
> + mutex_unlock(&master->cmd_lock);
> +
> + return rc;
> }
>
> static int fsi_master_gpio_break(struct fsi_master *_master, int link)
More information about the openbmc
mailing list