mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 14:11:15 +02:00
Convert SPI chips to partial write
However, wrap the write functions in a compat layer to allow converting the rest of flashrom later. Tested on Intel NM10 by David Hendricks. Corresponding to flashrom svn r1080. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
This commit is contained in:
34
spi.c
34
spi.c
@ -66,7 +66,7 @@ const struct spi_programmer spi_programmer[] = {
|
||||
.command = sb600_spi_send_command,
|
||||
.multicommand = default_spi_send_multicommand,
|
||||
.read = sb600_spi_read,
|
||||
.write_256 = sb600_spi_write_1,
|
||||
.write_256 = sb600_spi_write_256,
|
||||
},
|
||||
|
||||
{ /* SPI_CONTROLLER_VIA */
|
||||
@ -99,7 +99,7 @@ const struct spi_programmer spi_programmer[] = {
|
||||
.command = dummy_spi_send_command,
|
||||
.multicommand = default_spi_send_multicommand,
|
||||
.read = dummy_spi_read,
|
||||
.write_256 = NULL,
|
||||
.write_256 = dummy_spi_write_256,
|
||||
},
|
||||
#endif
|
||||
|
||||
@ -117,7 +117,7 @@ const struct spi_programmer spi_programmer[] = {
|
||||
.command = dediprog_spi_send_command,
|
||||
.multicommand = default_spi_send_multicommand,
|
||||
.read = dediprog_spi_read,
|
||||
.write_256 = spi_chip_write_1,
|
||||
.write_256 = spi_chip_write_1_new,
|
||||
},
|
||||
#endif
|
||||
|
||||
@ -196,8 +196,11 @@ int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len)
|
||||
/*
|
||||
* Program chip using page (256 bytes) programming.
|
||||
* Some SPI masters can't do this, they use single byte programming instead.
|
||||
* The redirect to single byte programming is achieved by setting
|
||||
* .write_256 = spi_chip_write_1
|
||||
*/
|
||||
int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
|
||||
/* real chunksize is up to 256, logical chunksize is 256 */
|
||||
int spi_chip_write_256_new(struct flashchip *flash, uint8_t *buf, int start, int len)
|
||||
{
|
||||
if (!spi_programmer[spi_controller].write_256) {
|
||||
msg_perr("%s called, but SPI page write is unsupported on this "
|
||||
@ -206,7 +209,28 @@ int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return spi_programmer[spi_controller].write_256(flash, buf);
|
||||
return spi_programmer[spi_controller].write_256(flash, buf, start, len);
|
||||
}
|
||||
|
||||
/* Wrapper function until the generic code is converted to partial writes. */
|
||||
int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
|
||||
{
|
||||
int ret;
|
||||
|
||||
spi_disable_blockprotect();
|
||||
msg_pinfo("Erasing flash before programming... ");
|
||||
if (erase_flash(flash)) {
|
||||
msg_perr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
msg_pinfo("done.\n");
|
||||
msg_pinfo("Programming flash... ");
|
||||
ret = spi_chip_write_256_new(flash, buf, 0, flash->total_size * 1024);
|
||||
if (!ret)
|
||||
msg_pinfo("done.\n");
|
||||
else
|
||||
msg_pinfo("\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user