Isaac Christensen (isaac.christensen@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@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@google.com Reviewed-on: https://chromium-review.googlesource.com/169781 Reviewed-by: David Hendrix dhendrix@chromium.org (cherry picked from commit a263d3717e82c43fe91e7c4e82d167e74bf27527) Signed-off-by: Isaac Christensen isaac.christensen@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);