From a6941beb43956c6cd30d44b5c6a97c747bc2f63a Mon Sep 17 00:00:00 2001 From: Carl-Daniel Hailfinger Date: Tue, 22 Jan 2008 15:19:01 +0000 Subject: [PATCH] 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 Acked-by: Harald Gutmann git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3070 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/flashrom/flashrom.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/util/flashrom/flashrom.c b/util/flashrom/flashrom.c index 5446fc5fc7..abcd3d2684 100644 --- a/util/flashrom/flashrom.c +++ b/util/flashrom/flashrom.c @@ -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); }