Flashrom did not use the read function for verifying, it used direct memory

access instead. That fails if the flash chip is not mapped completely.
If the read function is set in struct flashchip, use it for verification
as well.

This fixes verification of all SPI flash chips >512 kByte behind an
IT8716F flash translation chip.

"MX25L8005 found at physical address 0xfff00000.
Flash part is MX25L8005 (1024 KB).
Flash image seems to be a legacy BIOS. Disabling checks.
Verifying flash... VERIFIED."

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Harald Gutmann <harald.gutmann@gmx.net>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3070 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Carl-Daniel Hailfinger 2008-01-22 15:19:01 +00:00
parent 468413a337
commit a6941beb43
1 changed files with 6 additions and 2 deletions

View File

@ -159,7 +159,11 @@ int verify_flash(struct flashchip *flash, uint8_t *buf)
{
int idx;
int total_size = flash->total_size * 1024;
volatile uint8_t *bios = flash->virtual_memory;
uint8_t *buf2 = (uint8_t *) calloc(total_size, sizeof(char));
if (flash->read == NULL)
memcpy(buf2, (const char *)flash->virtual_memory, total_size);
else
flash->read(flash, buf2);
printf("Verifying flash... ");
@ -170,7 +174,7 @@ int verify_flash(struct flashchip *flash, uint8_t *buf)
if (verbose && ((idx & 0xfff) == 0xfff))
printf("0x%08x", idx);
if (*(bios + idx) != *(buf + idx)) {
if (*(buf2 + idx) != *(buf + idx)) {
if (verbose) {
printf("0x%08x ", idx);
}