ipq806x/storm: Return NULL for cbmem_top if DRAM is not initialized

DRAM initialization on storm requires ipq blobs to be
loaded from cbfs. vboot_locator first checks cbmem_find to see if cbmem is
initialized and contains selected region info, else it falls back to
vboot work buffer.

Since cbmem_find calls into cbmem_top to identify the location of
cbmem area, board/chipset is expected to return NULL until the backing
store is ready, which in this case until DRAM is initialized in
romstage, return NULL for cbmem_top.

Change-Id: I1880ce61dcfdabaa527d7a6dcc3482dfe5d5fd17
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/14182
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins)
This commit is contained in:
Furquan Shaikh 2016-03-28 13:29:33 -07:00
parent 6f009dc485
commit cf9e0bc6a6
3 changed files with 22 additions and 0 deletions

View File

@ -34,6 +34,8 @@ void setup_dram_mappings(enum dram_state dram)
mmu_config_range(DRAM_START, DRAM_SIZE, DCACHE_WRITEBACK); mmu_config_range(DRAM_START, DRAM_SIZE, DCACHE_WRITEBACK);
/* Map DMA memory */ /* Map DMA memory */
mmu_config_range(DMA_START, DMA_SIZE, DCACHE_OFF); mmu_config_range(DMA_START, DMA_SIZE, DCACHE_OFF);
/* Mark cbmem backing store as ready. */
ipq_cbmem_backing_store_ready();
} else { } else {
mmu_disable_range(DRAM_START, DRAM_SIZE); mmu_disable_range(DRAM_START, DRAM_SIZE);
/* Map DMA memory */ /* Map DMA memory */

View File

@ -16,7 +16,24 @@
#include <cbmem.h> #include <cbmem.h>
#include <soc/soc_services.h> #include <soc/soc_services.h>
static int cbmem_backing_store_ready;
void ipq_cbmem_backing_store_ready(void)
{
cbmem_backing_store_ready = 1;
}
void *cbmem_top(void) void *cbmem_top(void)
{ {
/*
* In romstage, make sure that cbmem backing store is ready before
* returning the pointer to cbmem top. Otherwise, it could lead to
* issues with components that utilize cbmem in romstage
* (e.g. vboot_locator for loading ipq blobs before DRAM is
* initialized).
*/
if (ENV_ROMSTAGE && (cbmem_backing_store_ready == 0))
return NULL;
return _memlayout_cbmem_top; return _memlayout_cbmem_top;
} }

View File

@ -32,4 +32,7 @@ int tz_init_wrapper(int, int, void *);
/* Load RPM code into memory and trigger its execution. */ /* Load RPM code into memory and trigger its execution. */
void start_rpm(void); void start_rpm(void);
/* Mark cbmem backing store as ready. */
void ipq_cbmem_backing_store_ready(void);
#endif #endif