summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefan Reinauer <reinauer@chromium.org>2013-09-17 14:15:16 -0700
committerIsaac Christensen <isaac.christensen@se-eng.com>2014-08-08 19:29:51 +0200
commit9ad28b940f74a17c88069816df1f20c0b03a9552 (patch)
tree851e5fb9f85fe69d5a345a59414d2b1d573c338b /src
parentda36bcf0d4334695b797166b865006842a1ae7e2 (diff)
downloadcoreboot-9ad28b940f74a17c88069816df1f20c0b03a9552.tar.xz
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>
Diffstat (limited to 'src')
-rw-r--r--src/vendorcode/google/chromeos/fmap.c13
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);