diff --git a/src/lib/dynamic_cbmem.c b/src/lib/dynamic_cbmem.c index 3b008c7614..c63cb46eb2 100644 --- a/src/lib/dynamic_cbmem.c +++ b/src/lib/dynamic_cbmem.c @@ -426,18 +426,7 @@ void *cbmem_entry_start(const struct cbmem_entry *entry) #if !defined(__PRE_RAM__) -#if IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) -/* selected cbmem can be initialized early in ramstage. Additionally, that - * means cbmem console can be reinitialized early as well. The post_device - * function is empty since cbmem was initialized early in ramstage. */ -static void init_cbmem_pre_device(void *unused) -{ - cbmem_initialize(); -} - -BOOT_STATE_INIT_ENTRY(BS_PRE_DEVICE, BS_ON_ENTRY, init_cbmem_pre_device, NULL); -#else - +#if !IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) static void init_cbmem_post_device(void *unused) { if (acpi_is_wakeup()) diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c index 83bc7be522..5f06ca762a 100644 --- a/src/lib/hardwaremain.c +++ b/src/lib/hardwaremain.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -433,6 +434,14 @@ static void boot_state_schedule_static_entries(void) void main(void) { + /* + * CBMEM needs to be recovered in the EARLY_CBMEM_INIT case because + * timestamps, APCI, etc rely on the cbmem infrastructure being + * around. Explicitly recover it. + */ + if (IS_ENABLED(CONFIG_EARLY_CBMEM_INIT)) + cbmem_initialize(); + /* Record current time, try to locate timestamps in CBMEM. */ timestamp_init(timestamp_get());