diff options
author | Furquan Shaikh <furquan@chromium.org> | 2017-10-28 00:09:33 -0700 |
---|---|---|
committer | Furquan Shaikh <furquan@google.com> | 2017-10-29 01:59:18 +0000 |
commit | 2d65d2043664fc5b04a59ac1a1b18282228e1b41 (patch) | |
tree | 9914bff629a59e9259bb7f25586f16b3cecbe19d /src/arch/x86 | |
parent | 504d1eff4bd324915f5c44223ab03086b0cbbd2c (diff) |
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>
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/tables.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/src/arch/x86/tables.c b/src/arch/x86/tables.c index fc5870d9f4..057f6654d4 100644 --- a/src/arch/x86/tables.c +++ b/src/arch/x86/tables.c @@ -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. */ |