mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
Move erase verification to generic code
Erase functions are no longer called from chip drivers and thus their internal erase verification can be moved to generic code. This also makes it easier to skip the verify step if desired and to differentiate between failed command submission and failed erase verification. Corresponding to flashrom svn r1353. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
This commit is contained in:
parent
bfa021dd80
commit
b4061f61cd
@ -136,11 +136,7 @@ int erase_block_82802ab(struct flashchip *flash, unsigned int page, unsigned int
|
||||
status = wait_82802ab(flash);
|
||||
print_status_82802ab(status);
|
||||
|
||||
if (check_erased_range(flash, page, pagesize)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
1
flash.h
1
flash.h
@ -210,7 +210,6 @@ int min(int a, int b);
|
||||
int max(int a, int b);
|
||||
void tolower_string(char *str);
|
||||
char *extract_param(char **haystack, char *needle, char *delim);
|
||||
int check_erased_range(struct flashchip *flash, int start, int len);
|
||||
int verify_range(struct flashchip *flash, uint8_t *cmpbuf, int start, int len, char *message);
|
||||
int need_erase(uint8_t *have, uint8_t *want, int len, enum write_granularity gran);
|
||||
char *strcat_realloc(char *dest, const char *src);
|
||||
|
@ -1400,6 +1400,10 @@ static int erase_and_write_block_helper(struct flashchip *flash,
|
||||
ret = erasefn(flash, start, len);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (check_erased_range(flash, start, len)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* Erase was successful. Adjust curcontents. */
|
||||
memset(curcontents, 0xff, len);
|
||||
skip = 0;
|
||||
|
16
jedec.c
16
jedec.c
@ -264,10 +264,7 @@ static int erase_sector_jedec_common(struct flashchip *flash, unsigned int page,
|
||||
/* wait for Toggle bit ready */
|
||||
toggle_ready_jedec_slow(bios);
|
||||
|
||||
if (check_erased_range(flash, page, pagesize)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -297,16 +294,12 @@ static int erase_block_jedec_common(struct flashchip *flash, unsigned int block,
|
||||
/* wait for Toggle bit ready */
|
||||
toggle_ready_jedec_slow(bios);
|
||||
|
||||
if (check_erased_range(flash, block, blocksize)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int erase_chip_jedec_common(struct flashchip *flash, unsigned int mask)
|
||||
{
|
||||
int total_size = flash->total_size * 1024;
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
int delay_us = 0;
|
||||
if(flash->probe_timing != TIMING_ZERO)
|
||||
@ -329,10 +322,7 @@ static int erase_chip_jedec_common(struct flashchip *flash, unsigned int mask)
|
||||
|
||||
toggle_ready_jedec_slow(bios);
|
||||
|
||||
if (check_erased_range(flash, 0, total_size)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
10
m29f400bt.c
10
m29f400bt.c
@ -101,10 +101,7 @@ int erase_m29f400bt(struct flashchip *flash)
|
||||
programmer_delay(10);
|
||||
toggle_ready_jedec(bios);
|
||||
|
||||
if (check_erased_range(flash, 0, flash->total_size * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -124,10 +121,7 @@ int block_erase_m29f400bt(struct flashchip *flash, unsigned int start, unsigned
|
||||
programmer_delay(10);
|
||||
toggle_ready_jedec(bios);
|
||||
|
||||
if (check_erased_range(flash, start, len)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -50,9 +50,6 @@ int erase_lhf00l04_block(struct flashchip *flash, unsigned int blockaddr, unsign
|
||||
status = wait_82802ab(flash);
|
||||
print_status_82802ab(status);
|
||||
|
||||
if (check_erased_range(flash, blockaddr, blocklen)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
30
spi25.c
30
spi25.c
@ -481,10 +481,7 @@ int spi_chip_erase_60(struct flashchip *flash)
|
||||
/* FIXME: We assume spi_read_status_register will never fail. */
|
||||
while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
|
||||
programmer_delay(1000 * 1000);
|
||||
if (check_erased_range(flash, 0, flash->total_size * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -520,10 +517,7 @@ int spi_chip_erase_c7(struct flashchip *flash)
|
||||
/* FIXME: We assume spi_read_status_register will never fail. */
|
||||
while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
|
||||
programmer_delay(1000 * 1000);
|
||||
if (check_erased_range(flash, 0, flash->total_size * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -564,10 +558,7 @@ int spi_block_erase_52(struct flashchip *flash, unsigned int addr, unsigned int
|
||||
*/
|
||||
while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
|
||||
programmer_delay(100 * 1000);
|
||||
if (check_erased_range(flash, addr, blocklen)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -613,10 +604,7 @@ int spi_block_erase_d8(struct flashchip *flash, unsigned int addr, unsigned int
|
||||
*/
|
||||
while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
|
||||
programmer_delay(100 * 1000);
|
||||
if (check_erased_range(flash, addr, blocklen)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -660,10 +648,7 @@ int spi_block_erase_d7(struct flashchip *flash, unsigned int addr, unsigned int
|
||||
*/
|
||||
while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
|
||||
programmer_delay(100 * 1000);
|
||||
if (check_erased_range(flash, addr, blocklen)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -705,10 +690,7 @@ int spi_block_erase_20(struct flashchip *flash, unsigned int addr, unsigned int
|
||||
*/
|
||||
while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
|
||||
programmer_delay(10 * 1000);
|
||||
if (check_erased_range(flash, addr, blocklen)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
10
sst28sf040.c
10
sst28sf040.c
@ -71,10 +71,7 @@ int erase_sector_28sf040(struct flashchip *flash, unsigned int address, unsigned
|
||||
/* wait for Toggle bit ready */
|
||||
toggle_ready_jedec(bios);
|
||||
|
||||
if (check_erased_range(flash, address, sector_size)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -113,10 +110,7 @@ static int erase_28sf040(struct flashchip *flash)
|
||||
programmer_delay(10);
|
||||
toggle_ready_jedec(bios);
|
||||
|
||||
if (check_erased_range(flash, 0, flash->total_size * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -70,9 +70,6 @@ int erase_sector_49lfxxxc(struct flashchip *flash, unsigned int address, unsigne
|
||||
status = wait_82802ab(flash);
|
||||
print_status_82802ab(status);
|
||||
|
||||
if (check_erased_range(flash, address, sector_size)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
@ -107,10 +107,6 @@ int erase_sector_stm50flw0x0x(struct flashchip *flash, unsigned int sector, unsi
|
||||
|
||||
wait_82802ab(flash);
|
||||
|
||||
if (check_erased_range(flash, sector, sectorsize)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* FIXME: Check the status register for errors. */
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user