arch/x86: Restore forwarding table on resume for non EARLY_EBDA_INIT

In commit c06a3f72 (arch/x86: initialize EBDA in S3 and S0/S5 path),
BDA and EBDA are wiped in the resume path. It results in coreboot
forwarding table address being wiped out since it is stored in the
BDA. This issue was resolved for platforms using EARLY_EBDA_INIT in
commit f46a9a0d (arch/x86: restore forwarding table on resume for
EARLY_EBDA_INIT). However platforms that do not use EARLY_EBDA_INIT
still run into the same issue and hence cbmem does not work on
resume. This change fixes the issue by using the stash/restore of
forwarding table address for all platforms using BDA.

BUG=b:68412690
TEST=Verified that cbmem works on S3 resume for coral.

Change-Id: I42ae2ccb0b4ce8e989b1032d82b9bb34d0d84db0
Signed-off-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: https://review.coreboot.org/22207
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Furquan Shaikh 2017-10-28 00:09:33 -07:00 committed by Furquan Shaikh
parent 504d1eff4b
commit 2d65d20436
1 changed files with 1 additions and 4 deletions

View File

@ -216,7 +216,6 @@ static void stash_forwarding_table(uintptr_t addr, size_t sz)
memcpy(cbmem_addr, (void *)addr, sz);
}
#if IS_ENABLED(CONFIG_EARLY_EBDA_INIT)
static void restore_forwarding_table(void *dest)
{
const struct cbmem_entry *fwd_entry;
@ -233,7 +232,6 @@ static void restore_forwarding_table(void *dest)
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY,
restore_forwarding_table, (void *)FORWARDING_TABLE_ADDR);
#endif
void arch_write_tables(uintptr_t coreboot_table)
{
@ -256,8 +254,7 @@ void arch_write_tables(uintptr_t coreboot_table)
sz = write_coreboot_forwarding_table(forwarding_table, coreboot_table);
if (IS_ENABLED(CONFIG_EARLY_EBDA_INIT))
stash_forwarding_table(forwarding_table, sz);
stash_forwarding_table(forwarding_table, sz);
forwarding_table += sz;
/* Align up to page boundary for historical consistency. */