lkml.org 
[lkml]   [2018]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/15] fsi/gpio: Include command build in locked section
    Date
    From: Jeremy Kerr <jk@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@ozlabs.org>
    Signed-off-by: Benjamin Herrenschmidt <benh@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)
    --
    2.17.0
    \
     
     \ /
      Last update: 2018-05-29 03:50    [W:2.990 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site