From c66d2bd1ca384dd673b24420e11865fde86060fc Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Wed, 1 Mar 2023 10:50:37 +1100 Subject: 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 Reviewed-on: https://review.coreboot.org/c/flashrom/+/73337 Tested-by: build bot (Jenkins) Reviewed-by: Thomas Heijligen Reviewed-by: Anastasia Klimchuk --- include/programmer.h | 3 --- spi.c | 39 +++++++++++++++++++-------------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/include/programmer.h b/include/programmer.h index f72f1d7b4..f6bc8ce62 100644 --- a/include/programmer.h +++ b/include/programmer.h @@ -318,9 +318,6 @@ struct spi_master { void *data; }; -int default_spi_send_command(const struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, - const unsigned char *writearr, unsigned char *readarr); -int default_spi_send_multicommand(const struct flashctx *flash, struct spi_command *cmds); int default_spi_read(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); int default_spi_write_256(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); int default_spi_write_aai(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); diff --git a/spi.c b/spi.c index 4fe0fa5c9..3b3f6229e 100644 --- a/spi.c +++ b/spi.c @@ -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__); -- cgit v1.2.3