diff options
author | Edward O'Callaghan <quasisec@google.com> | 2023-03-01 10:50:37 +1100 |
---|---|---|
committer | Thomas Heijligen <src@posteo.de> | 2023-03-03 17:33:06 +0000 |
commit | c66d2bd1ca384dd673b24420e11865fde86060fc (patch) | |
tree | 59904dcc86a95c34a8ddae5880e08c3c47f894ca /spi.c | |
parent | 29a3a09f9155e5de69d6d2a4bf582a9e09b8e0a4 (diff) | |
download | flashrom-c66d2bd1ca384dd673b24420e11865fde86060fc.tar.gz flashrom-c66d2bd1ca384dd673b24420e11865fde86060fc.tar.bz2 flashrom-c66d2bd1ca384dd673b24420e11865fde86060fc.zip |
spi: Make default cmd helpers static internal
Avoid these leaking into driver implementations as a NULL
field now implies their implementation. This removes one
source of a driver bug where both `mst->command` AND
`mst->multicommand` are set to default implementations
which is actually a cyclical control flow condition.
The driver however must still have either `mst->command` OR
`mst->multicommand` defined and so both cannot be NULL.
This simplifies the code and driver development.
Change-Id: I4ef95846c2f005cf4aa727f31548c6877d2d4801
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/73337
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Thomas Heijligen <src@posteo.de>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Diffstat (limited to 'spi.c')
-rw-r--r-- | spi.c | 39 |
1 files changed, 19 insertions, 20 deletions
@@ -26,23 +26,7 @@ #include "programmer.h" #include "spi.h" -int spi_send_command(const struct flashctx *flash, unsigned int writecnt, - unsigned int readcnt, const unsigned char *writearr, - unsigned char *readarr) -{ - if (flash->mst->spi.command) - return flash->mst->spi.command(flash, writecnt, readcnt, writearr, readarr); - return default_spi_send_command(flash, writecnt, readcnt, writearr, readarr); -} - -int spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds) -{ - if (flash->mst->spi.multicommand) - return flash->mst->spi.multicommand(flash, cmds); - return default_spi_send_multicommand(flash, cmds); -} - -int default_spi_send_command(const struct flashctx *flash, unsigned int writecnt, +static int default_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr) @@ -63,7 +47,7 @@ int default_spi_send_command(const struct flashctx *flash, unsigned int writecnt return spi_send_multicommand(flash, cmd); } -int default_spi_send_multicommand(const struct flashctx *flash, +static int default_spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds) { int result = 0; @@ -74,6 +58,22 @@ int default_spi_send_multicommand(const struct flashctx *flash, return result; } +int spi_send_command(const struct flashctx *flash, unsigned int writecnt, + unsigned int readcnt, const unsigned char *writearr, + unsigned char *readarr) +{ + if (flash->mst->spi.command) + return flash->mst->spi.command(flash, writecnt, readcnt, writearr, readarr); + return default_spi_send_command(flash, writecnt, readcnt, writearr, readarr); +} + +int spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds) +{ + if (flash->mst->spi.multicommand) + return flash->mst->spi.multicommand(flash, cmds); + return default_spi_send_multicommand(flash, cmds); +} + int default_spi_read(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len) { @@ -156,8 +156,7 @@ int register_spi_master(const struct spi_master *mst, void *data) } if (!mst->write_256 || !mst->read || !mst->probe_opcode || - ((mst->command == default_spi_send_command || !mst->command) && - (mst->multicommand == default_spi_send_multicommand || !mst->multicommand))) { + (!mst->command && !mst->multicommand)) { msg_perr("%s called with incomplete master definition. " "Please report a bug at flashrom@flashrom.org\n", __func__); |