[coreboot-gerrit] New patch to review for coreboot: 46e379c chromeos: Add code to read FMAP on ARM

Isaac Christensen (isaac.christensen@se-eng.com) gerrit at coreboot.org
Thu Aug 7 20:00:23 CEST 2014


Isaac Christensen (isaac.christensen at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6522

-gerrit

commit 46e379ca62634f7917c347358cdd92ad805390b0
Author: Stefan Reinauer <reinauer at chromium.org>
Date:   Tue Sep 17 14:15:16 2013 -0700

    chromeos: Add code to read FMAP on ARM
    
    On ARM the SPI flash is not memory mapped. Use the CBFS
    interface to map the correct portion.
    
    Change-Id: I8ea9aa0119e90a892bf777313fdc389c4739154e
    Signed-off-by: Stefan Reinauer <reinauer at google.com>
    Reviewed-on: https://chromium-review.googlesource.com/169781
    Reviewed-by: David Hendrix <dhendrix at chromium.org>
    (cherry picked from commit a263d3717e82c43fe91e7c4e82d167e74bf27527)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
---
 src/vendorcode/google/chromeos/fmap.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/vendorcode/google/chromeos/fmap.c b/src/vendorcode/google/chromeos/fmap.c
index 538b8c3..e0ec30b 100644
--- a/src/vendorcode/google/chromeos/fmap.c
+++ b/src/vendorcode/google/chromeos/fmap.c
@@ -21,6 +21,7 @@
 #include <stddef.h>
 #include <string.h>
 #include <console/console.h>
+#include <cbfs.h>
 #include "fmap.h"
 
 /* Find FMAP data structure in ROM.
@@ -36,9 +37,19 @@ const struct fmap *fmap_find(void)
 	 * and possibly cros_bundle_firmware.
 	 */
 
+#if CONFIG_ARCH_X86
 	/* wrapping around 0x100000000 */
 	const struct fmap *fmap = (void *)
 		(CONFIG_FLASHMAP_OFFSET - CONFIG_ROM_SIZE);
+#elif CONFIG_ARCH_ARMV7
+	struct cbfs_media default_media, *media;
+	media = &default_media;
+	init_default_cbfs_media(media);
+	media->open(media);
+	const struct fmap *fmap = (void *)
+		media->map(media, CONFIG_FLASHMAP_OFFSET, 4096); // FIXME size
+	media->close(media);
+#endif
 
 	if (memcmp(fmap, FMAP_SIGNATURE, sizeof(FMAP_SIGNATURE)-1)) {
 		printk(BIOS_DEBUG, "No FMAP found at %p.\n", fmap);
@@ -104,9 +115,11 @@ int find_fmap_entry(const char name[], void **pointer)
 		base = (void *)(unsigned long)fmap->base;
 		printk(BIOS_DEBUG, "FMAP: %s base at %p\n", name, base);
 	} else {
+#if CONFIG_ARCH_X86
 		base = (void *)(0 - CONFIG_ROM_SIZE);
 		printk(BIOS_WARNING, "FMAP: No valid base address, using"
 				" 0x%p\n", base);
+#endif
 	}
 
 	*pointer = (void*) ((u32)base + area->offset);



More information about the coreboot-gerrit mailing list