From 56ae8fcb6fe545557c6b5a3ffb72f54bd3b53ddc Mon Sep 17 00:00:00 2001 From: "Ronald G. Minnich" Date: Sat, 16 May 2009 23:05:20 +0000 Subject: This patch implements a "flash friendly" value for initialized areas of flash. It makes the write part of flashrom dramatically faster with small payloads like filo; and it also eliminates unnecessary wear on flash by not writing zeros (it's unlikely this really matters; let me know next time you flash a BIOS flash 100,000 times!). More importantly, it allows for future partial flash upgrades with cbfs. Note that uninitialized_flash_value is a global that can, if we ever need it, be set by an argument in main. Assuming we ever see a flash where the "erased" value is 0, not 0xff. At the same time, "erased" value has been "1" on every EEPROM or FLASH I've used for some time now. Signed-off-by: Ronald G. Minnich Acked-by: Peter Stuge git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4290 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/cbfstool/cbfstool.h | 1 + util/cbfstool/util.c | 10 ++++++++++ 2 files changed, 11 insertions(+) (limited to 'util/cbfstool') diff --git a/util/cbfstool/cbfstool.h b/util/cbfstool/cbfstool.h index dc52bfb16b..5804fdef50 100644 --- a/util/cbfstool/cbfstool.h +++ b/util/cbfstool/cbfstool.h @@ -56,6 +56,7 @@ struct rom { /* Function prototypes */ /* util.c */ +void flashinit(void *ptr, size_t len); int open_rom(struct rom *rom, const char *filename); int create_rom(struct rom *rom, const unsigned char *filename, int size, const char *bootblockname, int bootblocksize, diff --git a/util/cbfstool/util.c b/util/cbfstool/util.c index b36e9187a0..f0c0b293cf 100644 --- a/util/cbfstool/util.c +++ b/util/cbfstool/util.c @@ -25,6 +25,13 @@ #include #include "cbfstool.h" +int uninitialized_flash_value = 0xff; + +void flashinit(void *ptr, size_t len) +{ + memset(ptr, uninitialized_flash_value, len); +} + int get_size(const char *size) { char *next; @@ -203,6 +210,9 @@ int create_rom(struct rom *rom, const unsigned char *filename, return -1; } + /* mmap'ed pages are by default zero-filled. Fix that. */ + flashinit(rom->ptr, romsize); + /* This is a pointer to the header for easy access */ rom->header = (struct cbfs_header *) ROM_PTR(rom, rom->size - 16 - bootblocksize - sizeof(struct cbfs_header)); -- cgit v1.2.3