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.

BRANCH=none
TEST=boot tested on pit
BUG=none

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>
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 @@
 	 * 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 @@
 		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);