diff options
author | Stefan Reinauer <reinauer@chromium.org> | 2013-09-17 14:15:16 -0700 |
---|---|---|
committer | Isaac Christensen <isaac.christensen@se-eng.com> | 2014-08-08 19:29:51 +0200 |
commit | 9ad28b940f74a17c88069816df1f20c0b03a9552 (patch) | |
tree | 851e5fb9f85fe69d5a345a59414d2b1d573c338b | |
parent | da36bcf0d4334695b797166b865006842a1ae7e2 (diff) |
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>
Reviewed-on: http://review.coreboot.org/6522
Tested-by: build bot (Jenkins)
Reviewed-by: David Hendricks <dhendrix@chromium.org>
-rw-r--r-- | src/vendorcode/google/chromeos/fmap.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/vendorcode/google/chromeos/fmap.c b/src/vendorcode/google/chromeos/fmap.c index 538b8c359c..e0ec30b248 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); |