Commit 8193fb44 authored by Jeremy Kerr's avatar Jeremy Kerr Committed by Benjamin Herrenschmidt

fsi/gpio: Include command build in locked section

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: default avatarJeremy Kerr <jk@ozlabs.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tested-by: default avatarJoel Stanley <joel@jms.id.au>
parent f3ca4834
...@@ -463,14 +463,10 @@ static int fsi_master_gpio_xfer(struct fsi_master_gpio *master, uint8_t slave, ...@@ -463,14 +463,10 @@ static int fsi_master_gpio_xfer(struct fsi_master_gpio *master, uint8_t slave,
{ {
int rc; int rc;
mutex_lock(&master->cmd_lock);
rc = send_request(master, cmd); rc = send_request(master, cmd);
if (!rc) if (!rc)
rc = poll_for_response(master, slave, resp_len, resp); rc = poll_for_response(master, slave, resp_len, resp);
mutex_unlock(&master->cmd_lock);
return rc; return rc;
} }
...@@ -479,12 +475,17 @@ static int fsi_master_gpio_read(struct fsi_master *_master, int link, ...@@ -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_master_gpio *master = to_fsi_master_gpio(_master);
struct fsi_gpio_msg cmd; struct fsi_gpio_msg cmd;
int rc;
if (link != 0) if (link != 0)
return -ENODEV; return -ENODEV;
mutex_lock(&master->cmd_lock);
build_abs_ar_command(&cmd, id, addr, size, NULL); 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, 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, ...@@ -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_master_gpio *master = to_fsi_master_gpio(_master);
struct fsi_gpio_msg cmd; struct fsi_gpio_msg cmd;
int rc;
if (link != 0) if (link != 0)
return -ENODEV; return -ENODEV;
mutex_lock(&master->cmd_lock);
build_abs_ar_command(&cmd, id, addr, size, val); 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, static int fsi_master_gpio_term(struct fsi_master *_master,
...@@ -505,12 +511,17 @@ 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_master_gpio *master = to_fsi_master_gpio(_master);
struct fsi_gpio_msg cmd; struct fsi_gpio_msg cmd;
int rc;
if (link != 0) if (link != 0)
return -ENODEV; return -ENODEV;
mutex_lock(&master->cmd_lock);
build_term_command(&cmd, id); 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) static int fsi_master_gpio_break(struct fsi_master *_master, int link)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment