[coreboot] Patch set updated for coreboot: 47688c9 ELOG: Find flash base in FMAP if possible

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Wed Nov 7 20:26:34 CET 2012


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1706

-gerrit

commit 47688c9c254ad8d317eacc07b6a5e543e6d840c2
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Wed Aug 15 13:14:58 2012 -0700

    ELOG: Find flash base in FMAP if possible
    
    Now that we have FMAP support in coreboot use it to find the
    offset in flash for ELOG to use.
    
    If coreboot has elog configured with a smaller size then use
    that over the FMAP size.  This is because I set aside a 16KB
    region in the FMAP but we only use 4KB of it to keep the impact
    to boot/resume speed to a minimum.
    
    FMAP: Found "FMAP" version 1.0 at ffe10000.
    FMAP: base = 0 size = 800000 #areas = 32
    FMAP: area RW_ELOG found
    FMAP:   offset: 3f0000
    FMAP:   size:   16384 bytes
    FMAP: No valid base address, using 0xff800000
    ELOG: base=0x003f0000 base_ptr=0xffbf0000
    ELOG: MEM @0x00190ad8 FLASH @0xffbf0000
    ELOG: areas are 4096 bytes, full threshold 3072, shrink size 1024
    
    Change-Id: I3d826812c0f259d61f41b42797c58dd179f9f1c8
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
---
 src/drivers/elog/elog.c                     | 29 ++++++++++++++++++++++++++---
 src/vendorcode/google/chromeos/Makefile.inc |  1 +
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c
index 1219883..7be443a 100644
--- a/src/drivers/elog/elog.c
+++ b/src/drivers/elog/elog.c
@@ -28,7 +28,9 @@
 #include <elog.h>
 #include "elog_internal.h"
 
-#if CONFIG_ELOG_FLASH_BASE == 0
+#if CONFIG_CHROMEOS
+#include <vendorcode/google/chromeos/fmap.h>
+#elif CONFIG_ELOG_FLASH_BASE == 0
 #error "CONFIG_ELOG_FLASH_BASE is invalid"
 #endif
 #if CONFIG_ELOG_FULL_THRESHOLD >= CONFIG_ELOG_AREA_SIZE
@@ -735,6 +737,12 @@ int elog_clear(void)
  */
 int elog_init(void)
 {
+	u32 flash_base = CONFIG_ELOG_FLASH_BASE;
+	int flash_size = CONFIG_ELOG_AREA_SIZE;
+#if CONFIG_CHROMEOS
+	u8 *flash_base_ptr;
+#endif
+
 	if (elog_initialized)
 		return 0;
 
@@ -746,9 +754,24 @@ int elog_init(void)
 		return -1;
 	}
 
+#if CONFIG_CHROMEOS
+	/* Find the ELOG base and size in FMAP */
+	flash_size = find_fmap_entry("RW_ELOG", (void **)&flash_base_ptr);
+	if (flash_size < 0) {
+		printk(BIOS_WARNING, "ELOG: Unable to find RW_ELOG in FMAP, "
+		       "using CONFIG_ELOG_FLASH_BASE instead\n");
+		flash_size = CONFIG_ELOG_AREA_SIZE;
+	} else {
+		flash_base = elog_flash_address_to_offset(flash_base_ptr);
+
+		/* Use configured size if smaller than FMAP size */
+		if (flash_size > CONFIG_ELOG_AREA_SIZE)
+			flash_size = CONFIG_ELOG_AREA_SIZE;
+	}
+#endif
+
 	/* Setup descriptors for flash and memory areas */
-	if (elog_setup_descriptors(CONFIG_ELOG_FLASH_BASE,
-				   CONFIG_ELOG_AREA_SIZE) < 0) {
+	if (elog_setup_descriptors(flash_base, flash_size) < 0) {
 		printk(BIOS_ERR, "ELOG: Unable to initialize descriptors\n");
 		return -1;
 	}
diff --git a/src/vendorcode/google/chromeos/Makefile.inc b/src/vendorcode/google/chromeos/Makefile.inc
index 6e5ea9b..b2f3d35 100644
--- a/src/vendorcode/google/chromeos/Makefile.inc
+++ b/src/vendorcode/google/chromeos/Makefile.inc
@@ -25,3 +25,4 @@ romstage-y += vboot.c
 ramstage-y += gnvs.c
 romstage-y += fmap.c
 ramstage-y += fmap.c
+smm-y += fmap.c




More information about the coreboot mailing list