1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 22:21:16 +02:00

Always read the flash chip before writing

This will allow flashrom to skip erase of already-erased blocks and to
skip write of blocks which already have the wanted contents.

Avoid emergency messages by checking if the chip contents after a failed
write operation (erase/write) are unchanged.

Keep the emergency messages after a failed pure erase. That part is
debatable because if someone wants erase, he pretty sure doesn't care
about the flash contents anymore.

Please note that this introduces additional overhead of a full chip read
before write. This is frowned upon by people with slow programmers. A
followup patch will make this configurable.

Corresponding to flashrom svn r1215.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Reinauer <stepan@coreboot.org>
This commit is contained in:
Carl-Daniel Hailfinger
2010-10-19 22:06:20 +00:00
parent 83d349ac34
commit 42d38a9dd1
3 changed files with 71 additions and 17 deletions

View File

@ -205,7 +205,7 @@ int find_romentry(char *name)
return -1;
}
int handle_romentries(uint8_t *buffer, struct flashchip *flash)
int handle_romentries(struct flashchip *flash, uint8_t *oldcontents, uint8_t *newcontents)
{
int i;
@ -225,13 +225,12 @@ int handle_romentries(uint8_t *buffer, struct flashchip *flash)
// normal will be updated and the rest will be kept.
for (i = 0; i < romimages; i++) {
if (rom_entries[i].included)
continue;
flash->read(flash, buffer + rom_entries[i].start,
rom_entries[i].start,
rom_entries[i].end - rom_entries[i].start + 1);
memcpy(newcontents + rom_entries[i].start,
oldcontents + rom_entries[i].start,
rom_entries[i].end - rom_entries[i].start + 1);
}
return 0;