Am 05.05.2011 03:04 schrieb Michael Karcher:
Remove the array spi_programmer, replace it by dynamic registration
instead. Also initially start with no busses supported, and switch to
the default non-SPI only for the internal programmer.
Signed-off-by: Michael Karcher<[email protected]>
Thanks for your patch!
I have a few minor nitpicks and design questions, but the code changes
seem to be bug-free, so you get an
Acked-by: Carl-Daniel Hailfinger <[email protected]>
Your patch is very readable and got me thinking about future directions
of that code, especially multiple registrations... so take the review
with a grain of salt.
diff --git a/dummyflasher.c b/dummyflasher.c
index c4c9c4e..fdaa5f2 100644
--- a/dummyflasher.c
+++ b/dummyflasher.c
@@ -339,7 +339,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
unsigned int readcnt
}
#endif
-int dummy_spi_send_command(unsigned int writecnt, unsigned int readcnt,
+static int dummy_spi_send_command(unsigned int writecnt, unsigned int readcnt,
const unsigned char *writearr, unsigned char *readarr)
{
int i;
@@ -375,12 +375,22 @@ int dummy_spi_send_command(unsigned int writecnt,
unsigned int readcnt,
return 0;
}
-int dummy_spi_write_256(struct flashchip *flash, uint8_t *buf, int start, int
len)
+static int dummy_spi_write_256(struct flashchip *flash, uint8_t *buf, int
start, int len)
{
return spi_write_chunked(flash, buf, start, len,
spi_write_256_chunksize);
}
+static const struct spi_programmer spi_programmer_dummyflasher = {
+ .type = SPI_CONTROLLER_DUMMY,
+ .max_data_read = MAX_DATA_READ_UNLIMITED,
+ .max_data_write = MAX_DATA_UNSPECIFIED,
256 instead?
+ .command = dummy_spi_send_command,
+ .multicommand = default_spi_send_multicommand,
+ .read = default_spi_read,
+ .write_256 = dummy_spi_write_256,
Same comment as for patch 1 of the series. AFAICS dummy_spi_write_256
should be replaced by the default one.
+};
+
int dummy_init(void)
{
char *bustext = NULL;
Please fix the whitespace (spaces instead of tabs) in it87spi.c and
dummyflasher.c.
Apparently a newline is missing at the end of spi.c.
diff --git a/bitbang_spi.c b/bitbang_spi.c
index be30944..ca28434 100644
--- a/bitbang_spi.c
+++ b/bitbang_spi.c
@@ -81,7 +81,7 @@ static uint8_t bitbang_spi_readwrite_byte(uint8_t val)
return ret;
}
-int bitbang_spi_send_command(unsigned int writecnt, unsigned int readcnt,
+static int bitbang_spi_send_command(unsigned int writecnt, unsigned int
readcnt,
const unsigned char *writearr, unsigned char *readarr)
{
int i;
@@ -106,6 +106,16 @@ int bitbang_spi_send_command(unsigned int writecnt,
unsigned int readcnt,
return 0;
}
+static const struct spi_programmer spi_programmer_bitbang = {
Can you make this one non-const to allow changing .type?
+ .type = SPI_CONTROLLER_BITBANG,
And leave type empty, to be filled by bitbang_spi_init()?
+ .max_data_read = MAX_DATA_READ_UNLIMITED,
+ .max_data_write = MAX_DATA_WRITE_UNLIMITED,
+ .command = bitbang_spi_send_command,
+ .multicommand = default_spi_send_multicommand,
+ .read = default_spi_read,
+ .write_256 = default_spi_write_256,
+};
+
int bitbang_spi_init(const struct bitbang_spi_master *master, int halfperiod)
Could you extend this function signature to have an additional enum
spi_controller parameter? If each bitbang-using programmer calls
bitbang_spi_init(spi_controller, master, halfperiod) we can keep the
spi_controller enums unchanged for now which would help us keep things
consistent (for example, ichspi.c uses 3 different spi_controller enums
for the same functions).
{
/* BITBANG_SPI_INVALID is 0, so if someone forgot to initialize ->type,
Insert in this function:
spi_programmer_bitbang.type=spi_controller;
diff --git a/programmer.h b/programmer.h
index fefb9cd..53a50f6 100644
--- a/programmer.h
+++ b/programmer.h
@@ -527,7 +518,6 @@ enum spi_controller {
SPI_CONTROLLER_SB600,
SPI_CONTROLLER_VIA,
SPI_CONTROLLER_WBSIO,
- SPI_CONTROLLER_MCP6X_BITBANG,
#endif
#endif
#if CONFIG_FT2232_SPI == 1
@@ -542,16 +532,9 @@ enum spi_controller {
#if CONFIG_DEDIPROG == 1
SPI_CONTROLLER_DEDIPROG,
#endif
-#if CONFIG_RAYER_SPI == 1
- SPI_CONTROLLER_RAYER,
-#endif
-#if CONFIG_NICINTEL_SPI == 1
- SPI_CONTROLLER_NICINTEL,
-#endif
-#if CONFIG_OGP_SPI == 1
- SPI_CONTROLLER_OGP,
+#if CONFIG_OGP_SPI == 1 || CONFIG_NICINTEL_SPI == 1 || CONFIG_RAYER_SPI == 1 ||
(CONFIG_INTERNAL == 1&& (defined(__i386__) || defined(__x86_64__)))
+ SPI_CONTROLLER_BITBANG,
#endif
- SPI_CONTROLLER_INVALID /* This must always be the last entry. */
};
extern const int spi_programmer_count;
If you use enum spi_controller as parameter for bitbang_spi_init(), we
don't need an extra SPI_CONTROLLER_BITBANG and can keep the
programmer-specific ones.
The calls to bitbang_spi_init() in mcp6x_spi.c, nicintel_spi.c,
ogp_spi.c and rayer_spi.c would need to be adjusted as well.
I plan to add a union private_data{} to struct spi_programmer to allow
storing stuff like struct bitbang_spi_master, avoiding the need for
programmer-internal static configuration variables.
Regards,
Carl-Daniel
--
http://www.hailfinger.org/
_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom