diff options
-rw-r--r-- | src/include/memlayout.h | 25 | ||||
-rw-r--r-- | src/include/symbols.h | 4 | ||||
-rw-r--r-- | src/lib/cbfs_spi.c | 9 |
3 files changed, 25 insertions, 13 deletions
diff --git a/src/include/memlayout.h b/src/include/memlayout.h index 3178bc4893..42d56082fa 100644 --- a/src/include/memlayout.h +++ b/src/include/memlayout.h @@ -63,6 +63,10 @@ STR(name must be aligned to expected_align!)); \ SYMBOL(e##name, addr + size) +#define ALIAS_REGION(name, alias) \ + _##alias = _##name; \ + _e##alias = _e##name; + /* Declare according to SRAM/DRAM ranges in SoC hardware-defined address map. */ #define SRAM_START(addr) SYMBOL(sram, addr) @@ -77,20 +81,23 @@ REGION(preram_cbmem_console, addr, size, 4) /* Use either CBFS_CACHE (unified) or both (PRERAM|POSTRAM)_CBFS_CACHE */ -#define CBFS_CACHE(addr, size) REGION(cbfs_cache, addr, size, 4) +#define CBFS_CACHE(addr, size) \ + REGION(cbfs_cache, addr, size, 4) \ + ALIAS_REGION(cbfs_cache, preram_cbfs_cache) \ + ALIAS_REGION(cbfs_cache, postram_cbfs_cache) -#if ENV_ROMSTAGE - #define PRERAM_CBFS_CACHE(addr, size) CBFS_CACHE(addr, size) +#if defined(__PRE_RAM__) + #define PRERAM_CBFS_CACHE(addr, size) \ + REGION(preram_cbfs_cache, addr, size, 4) \ + ALIAS_REGION(preram_cbfs_cache, cbfs_cache) #define POSTRAM_CBFS_CACHE(addr, size) \ REGION(postram_cbfs_cache, addr, size, 4) -#elif defined(__PRE_RAM__) - #define PRERAM_CBFS_CACHE(addr, size) CBFS_CACHE(addr, size) - #define POSTRAM_CBFS_CACHE(addr, size) \ - REGION(unused_cbfs_cache, addr, size, 4) #else #define PRERAM_CBFS_CACHE(addr, size) \ - REGION(unused_cbfs_cache, addr, size, 4) - #define POSTRAM_CBFS_CACHE(addr, size) CBFS_CACHE(addr, size) + REGION(preram_cbfs_cache, addr, size, 4) + #define POSTRAM_CBFS_CACHE(addr, size) \ + REGION(postram_cbfs_cache, addr, size, 4) \ + ALIAS_REGION(postram_cbfs_cache, cbfs_cache) #endif /* Careful: 'INCLUDE <filename>' must always be at the end of the output line */ diff --git a/src/include/symbols.h b/src/include/symbols.h index 662f44e34c..4276176398 100644 --- a/src/include/symbols.h +++ b/src/include/symbols.h @@ -41,6 +41,10 @@ extern u8 _stack[]; extern u8 _estack[]; #define _stack_size (_estack - _stack) +extern u8 _preram_cbfs_cache[]; +extern u8 _epreram_cbfs_cache[]; +#define _preram_cbfs_cache_size (_epreram_cbfs_cache - _preram_cbfs_cache) + extern u8 _postram_cbfs_cache[]; extern u8 _epostram_cbfs_cache[]; #define _postram_cbfs_cache_size (_epostram_cbfs_cache - _postram_cbfs_cache) diff --git a/src/lib/cbfs_spi.c b/src/lib/cbfs_spi.c index ffa0628b05..2677ac46c3 100644 --- a/src/lib/cbfs_spi.c +++ b/src/lib/cbfs_spi.c @@ -43,7 +43,7 @@ static const struct region_device_ops spi_ops = { static struct mmap_helper_region_device mdev = MMAP_HELPER_REGION_INIT(&spi_ops, 0, CONFIG_ROM_SIZE); -static void initialize_mdev(int unused) +static void switch_to_postram_cache(int unused) { /* * Call boot_device_init() to ensure spi_flash is initialized before @@ -51,10 +51,11 @@ static void initialize_mdev(int unused) * being overwritten if spi_flash was not accessed before dram was up. */ boot_device_init(); - mmap_helper_device_init(&mdev, _postram_cbfs_cache, - _postram_cbfs_cache_size); + if (_preram_cbfs_cache != _postram_cbfs_cache) + mmap_helper_device_init(&mdev, _postram_cbfs_cache, + _postram_cbfs_cache_size); } -ROMSTAGE_CBMEM_INIT_HOOK(initialize_mdev); +ROMSTAGE_CBMEM_INIT_HOOK(switch_to_postram_cache); void boot_device_init(void) { |