lib/cbmem: provide optional cbmem top initialization hook
Provide a hook to allow an optional one-time cbmem_top() initialization. The new function, cbmem_top_init(), is called on the first expected initialization of cbmem based on the Kconfig options LATE_CBMEM_INIT and EARLY_CBMEM_INIT. Change-Id: I89edd2d11f226217c8e2aaca829b4f375a2cff28 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Signed-off-by: John Zhao <john.zhao@intel.com> Reviewed-on: https://review.coreboot.org/20847 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
parent
403fdbc226
commit
dfdea2aa40
|
@ -64,6 +64,11 @@ int cbmem_initialize_id_size(u32 id, u64 size);
|
||||||
void cbmem_initialize_empty(void);
|
void cbmem_initialize_empty(void);
|
||||||
void cbmem_initialize_empty_id_size(u32 id, u64 size);
|
void cbmem_initialize_empty_id_size(u32 id, u64 size);
|
||||||
|
|
||||||
|
/* Optional hook for platforms to initialize cbmem_top() value. When employed
|
||||||
|
* it's called a single time during boot at cbmem initialization/recovery
|
||||||
|
* time. */
|
||||||
|
void cbmem_top_init(void);
|
||||||
|
|
||||||
/* Return the top address for dynamic cbmem. The address returned needs to
|
/* Return the top address for dynamic cbmem. The address returned needs to
|
||||||
* be consistent across romstage and ramstage, and it is required to be
|
* be consistent across romstage and ramstage, and it is required to be
|
||||||
* below 4GiB.
|
* below 4GiB.
|
||||||
|
|
|
@ -109,12 +109,31 @@ void cbmem_initialize_empty(void)
|
||||||
cbmem_initialize_empty_id_size(0, 0);
|
cbmem_initialize_empty_id_size(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __attribute__((weak)) cbmem_top_init(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cbmem_top_init_once(void)
|
||||||
|
{
|
||||||
|
/* Call one-time hook on expected cbmem init during boot. This sequence
|
||||||
|
assumes first init call is in romstage for early cbmem init and
|
||||||
|
ramstage for late cbmem init. */
|
||||||
|
if (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) && !ENV_ROMSTAGE)
|
||||||
|
return;
|
||||||
|
if (IS_ENABLED(CONFIG_LATE_CBMEM_INIT) && !ENV_RAMSTAGE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cbmem_top_init();
|
||||||
|
}
|
||||||
|
|
||||||
void cbmem_initialize_empty_id_size(u32 id, u64 size)
|
void cbmem_initialize_empty_id_size(u32 id, u64 size)
|
||||||
{
|
{
|
||||||
struct imd *imd;
|
struct imd *imd;
|
||||||
struct imd imd_backing;
|
struct imd imd_backing;
|
||||||
const int no_recovery = 0;
|
const int no_recovery = 0;
|
||||||
|
|
||||||
|
cbmem_top_init_once();
|
||||||
|
|
||||||
imd = imd_init_backing(&imd_backing);
|
imd = imd_init_backing(&imd_backing);
|
||||||
imd_handle_init(imd, cbmem_top());
|
imd_handle_init(imd, cbmem_top());
|
||||||
|
|
||||||
|
@ -145,6 +164,8 @@ int cbmem_initialize_id_size(u32 id, u64 size)
|
||||||
struct imd imd_backing;
|
struct imd imd_backing;
|
||||||
const int recovery = 1;
|
const int recovery = 1;
|
||||||
|
|
||||||
|
cbmem_top_init_once();
|
||||||
|
|
||||||
imd = imd_init_backing(&imd_backing);
|
imd = imd_init_backing(&imd_backing);
|
||||||
imd_handle_init(imd, cbmem_top());
|
imd_handle_init(imd, cbmem_top());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue