Submitter | Stefan Tauner |
---|---|
Date | 2012-10-03 04:13:05 |
Message ID | <1349237585-3904-6-git-send-email-stefan.tauner@student.tuwien.ac.at> |
Download | mbox | patch |
Permalink | /patch/3765/ |
State | New |
Headers | show |
Comments
Am 03.10.2012 06:13 schrieb Stefan Tauner: > --- a/dummyflasher.c > +++ b/dummyflasher.c > @@ -119,7 +119,7 @@ static uint32_t dummy_chip_readl(const struct flashctx *flash, > static void dummy_chip_readn(const struct flashctx *flash, uint8_t *buf, > const chipaddr addr, size_t len); > > -static const struct spi_programmer spi_programmer_dummyflasher = { > +static struct spi_programmer spi_programmer_dummyflasher = { > .type = SPI_CONTROLLER_DUMMY, > .max_data_read = MAX_DATA_READ_UNLIMITED, > .max_data_write = MAX_DATA_UNSPECIFIED, > @@ -373,6 +373,19 @@ int dummy_init(void) > msg_pdbg("Initial status register is set to 0x%02x.\n", > emu_status); > } > + tmp = extract_programmer_param("spi_prog"); > + if (tmp) { > + if (!strcmp(tmp, "wbsio")) { > + spi_programmer_dummyflasher.check_trans = wbsio_spi_check_trans; This will cause compile failures if CONFIG_INTERNAL=no A similar #ifdef guard is needed for the programmer.h chunk unless we decide that it's ok to have prototypes for unavailable functions. > + msg_pdbg("Using SPI payload limitations of the %s programmer.\n", tmp); > + } else { > + msg_perr("Error: emulation of a programmer requested, " > + "but the programmer could not be parsed \"%s\".\n", tmp); > + free(tmp); > + return 1; > + } > + } > + free(tmp); > #endif > > msg_pdbg("Filling fake flash chip with 0xff, size %i\n", emu_chip_size); Regards, Carl-Daniel
Patch
diff --git a/dummyflasher.c b/dummyflasher.c index 4e08386..1d63b7a 100644 --- a/dummyflasher.c +++ b/dummyflasher.c @@ -119,7 +119,7 @@ static uint32_t dummy_chip_readl(const struct flashctx *flash, static void dummy_chip_readn(const struct flashctx *flash, uint8_t *buf, const chipaddr addr, size_t len); -static const struct spi_programmer spi_programmer_dummyflasher = { +static struct spi_programmer spi_programmer_dummyflasher = { .type = SPI_CONTROLLER_DUMMY, .max_data_read = MAX_DATA_READ_UNLIMITED, .max_data_write = MAX_DATA_UNSPECIFIED, @@ -373,6 +373,19 @@ int dummy_init(void) msg_pdbg("Initial status register is set to 0x%02x.\n", emu_status); } + tmp = extract_programmer_param("spi_prog"); + if (tmp) { + if (!strcmp(tmp, "wbsio")) { + spi_programmer_dummyflasher.check_trans = wbsio_spi_check_trans; + msg_pdbg("Using SPI payload limitations of the %s programmer.\n", tmp); + } else { + msg_perr("Error: emulation of a programmer requested, " + "but the programmer could not be parsed \"%s\".\n", tmp); + free(tmp); + return 1; + } + } + free(tmp); #endif msg_pdbg("Filling fake flash chip with 0xff, size %i\n", emu_chip_size); diff --git a/programmer.h b/programmer.h index bcd9547..c2373e6 100644 --- a/programmer.h +++ b/programmer.h @@ -585,6 +585,8 @@ int mcp6x_spi_init(int want_spi); int sb600_probe_spi(struct pci_dev *dev); /* wbsio_spi.c */ +int wbsio_spi_check_trans(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, + const unsigned char *writearr); int wbsio_check_for_spi(void); #endif diff --git a/wbsio_spi.c b/wbsio_spi.c index ec14c28..6164ae7 100644 --- a/wbsio_spi.c +++ b/wbsio_spi.c @@ -108,7 +108,7 @@ static uint8_t determine_mode(struct flashctx *flash, unsigned int writecnt, uns return 0; } -static int wbsio_spi_check_trans(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, +int wbsio_spi_check_trans(struct flashctx *flash, unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr) { if (determine_mode(flash, writecnt, readcnt, writearr) == 0)
As long as a programmer's check_trans code does not rely on the previous invocation of its init function one can trivially set that programmer's check_trans function instead of the dummy's default one. This allows for even better testing of the SPI infrastructure code under near realworld conditions. FIXME: add other programmers FIXME: add manpage doc Signed-off-by: Stefan Tauner <stefan.tauner@student.tuwien.ac.at> --- dummyflasher.c | 15 ++++++++++++++- programmer.h | 2 ++ wbsio_spi.c | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-)