[coreboot] [v2] r4290 - trunk/coreboot-v2/util/cbfstool

svn at coreboot.org svn at coreboot.org
Sun May 17 01:05:20 CEST 2009


Author: rminnich
Date: 2009-05-17 01:05:20 +0200 (Sun, 17 May 2009)
New Revision: 4290

Modified:
   trunk/coreboot-v2/util/cbfstool/cbfstool.h
   trunk/coreboot-v2/util/cbfstool/util.c
Log:
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 <rminnich at gmail.com>
Acked-by: Peter Stuge <peter at stuge.se>




Modified: trunk/coreboot-v2/util/cbfstool/cbfstool.h
===================================================================
--- trunk/coreboot-v2/util/cbfstool/cbfstool.h	2009-05-15 18:02:25 UTC (rev 4289)
+++ trunk/coreboot-v2/util/cbfstool/cbfstool.h	2009-05-16 23:05:20 UTC (rev 4290)
@@ -56,6 +56,7 @@
 /* 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,

Modified: trunk/coreboot-v2/util/cbfstool/util.c
===================================================================
--- trunk/coreboot-v2/util/cbfstool/util.c	2009-05-15 18:02:25 UTC (rev 4289)
+++ trunk/coreboot-v2/util/cbfstool/util.c	2009-05-16 23:05:20 UTC (rev 4290)
@@ -25,6 +25,13 @@
 #include <sys/mman.h>
 #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 @@
 		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));





More information about the coreboot mailing list