summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@chromium.org>2017-10-28 00:09:33 -0700
committerFurquan Shaikh <furquan@google.com>2017-10-29 01:59:18 +0000
commit2d65d2043664fc5b04a59ac1a1b18282228e1b41 (patch)
tree9914bff629a59e9259bb7f25586f16b3cecbe19d
parent504d1eff4bd324915f5c44223ab03086b0cbbd2c (diff)
downloadcoreboot-2d65d2043664fc5b04a59ac1a1b18282228e1b41.tar.xz
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>
-rw-r--r--src/arch/x86/tables.c5
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. */