mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-02 22:43:17 +02:00
Move implicit erase out of chip drivers
Flashrom had an implicit erase-on-write for most flash chip and programmer drivers, but it was not entirely consistent. Some drivers had their own hand-rolled partial update functionality which made handling partial updates from generic code impossible. Move implicit erase out of chip drivers, and kill some dead erase functions at the same time. A full chip erase is now performed in the generic code for all flash chips on write, and after that the whole chip is written. Corresponding to flashrom svn r1206. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
This commit is contained in:
21
m29f400bt.c
21
m29f400bt.c
@ -143,7 +143,6 @@ int write_m29f400bt(struct flashchip *flash, uint8_t *buf)
|
||||
int page_size = flash->page_size;
|
||||
chipaddr bios = flash->virtual_memory;
|
||||
|
||||
//erase_m29f400bt (flash);
|
||||
msg_cinfo("Programming page:\n ");
|
||||
/*********************************
|
||||
*Pages for M29F400BT:
|
||||
@ -163,41 +162,21 @@ int write_m29f400bt(struct flashchip *flash, uint8_t *buf)
|
||||
msg_cinfo("total_size/page_size = %d\n", total_size / page_size);
|
||||
for (i = 0; i < (total_size / page_size) - 1; i++) {
|
||||
msg_cinfo("%04d at address: 0x%08x\n", i, i * page_size);
|
||||
if (block_erase_m29f400bt(flash, i * page_size, page_size)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
write_page_m29f400bt(bios, buf + i * page_size,
|
||||
bios + i * page_size, page_size);
|
||||
msg_cinfo("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
|
||||
}
|
||||
|
||||
msg_cinfo("%04d at address: 0x%08x\n", 7, 0x70000);
|
||||
if (block_erase_m29f400bt(flash, 0x70000, 32 * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
write_page_m29f400bt(bios, buf + 0x70000, bios + 0x70000, 32 * 1024);
|
||||
|
||||
msg_cinfo("%04d at address: 0x%08x\n", 8, 0x78000);
|
||||
if (block_erase_m29f400bt(flash, 0x78000, 8 * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
write_page_m29f400bt(bios, buf + 0x78000, bios + 0x78000, 8 * 1024);
|
||||
|
||||
msg_cinfo("%04d at address: 0x%08x\n", 9, 0x7a000);
|
||||
if (block_erase_m29f400bt(flash, 0x7a000, 8 * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
write_page_m29f400bt(bios, buf + 0x7a000, bios + 0x7a000, 8 * 1024);
|
||||
|
||||
msg_cinfo("%04d at address: 0x%08x\n", 10, 0x7c000);
|
||||
if (block_erase_m29f400bt(flash, 0x7c000, 16 * 1024)) {
|
||||
msg_cerr("ERASE FAILED!\n");
|
||||
return -1;
|
||||
}
|
||||
write_page_m29f400bt(bios, buf + 0x7c000, bios + 0x7c000, 16 * 1024);
|
||||
|
||||
msg_cinfo("\n");
|
||||
|
Reference in New Issue
Block a user