summaryrefslogtreecommitdiffstats
path: root/spi.c
diff options
context:
space:
mode:
authorEdward O'Callaghan <quasisec@google.com>2023-03-01 10:50:37 +1100
committerThomas Heijligen <src@posteo.de>2023-03-03 17:33:06 +0000
commitc66d2bd1ca384dd673b24420e11865fde86060fc (patch)
tree59904dcc86a95c34a8ddae5880e08c3c47f894ca /spi.c
parent29a3a09f9155e5de69d6d2a4bf582a9e09b8e0a4 (diff)
downloadflashrom-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.c39
1 files changed, 19 insertions, 20 deletions
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__);