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:
parent
6f009dc485
commit
cf9e0bc6a6
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue