[PATCH v2 linux dev-4.13 1/2] fsi/gpio: Include command build in locked section

Christopher Bostic cbostic at linux.vnet.ibm.com
Sat May 12 07:28:46 AEST 2018


Reviewed-by: Christopher Bostic <cbostic at linux.vnet.ibm.com>


On 5/10/18 4:22 AM, Jeremy Kerr wrote:
> 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>
> ---
>   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 029b0a5b6d89..1723fe4284b0 100644
> --- a/drivers/fsi/fsi-master-gpio.c
> +++ b/drivers/fsi/fsi-master-gpio.c
> @@ -457,14 +457,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;
>   }
>
> @@ -473,12 +469,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,
> @@ -486,12 +487,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,
> @@ -499,12 +505,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