summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/amd/cezanne/smihandler.c8
-rw-r--r--src/soc/amd/common/vboot/Makefile.inc10
-rw-r--r--src/soc/amd/common/vboot/early_ram_symbols.awk16
3 files changed, 34 insertions, 0 deletions
diff --git a/src/soc/amd/cezanne/smihandler.c b/src/soc/amd/cezanne/smihandler.c
index 509a1d404a..a149e57fa9 100644
--- a/src/soc/amd/cezanne/smihandler.c
+++ b/src/soc/amd/cezanne/smihandler.c
@@ -9,9 +9,11 @@
#include <arch/hlt.h>
#include <arch/io.h>
#include <console/console.h>
+#include <console/cbmem_console.h>
#include <cpu/x86/cache.h>
#include <cpu/x86/smm.h>
#include <elog.h>
+#include <soc/psp_transfer.h>
#include <soc/smi.h>
#include <soc/smu.h>
#include <soc/southbridge.h>
@@ -150,3 +152,9 @@ void *get_smi_source_handler(int source)
return NULL;
}
+
+void smm_soc_early_init(void)
+{
+ if (CONFIG(VBOOT_STARTS_BEFORE_BOOTBLOCK) && __CBMEM_CONSOLE_ENABLE__)
+ replay_transfer_buffer_cbmemc();
+}
diff --git a/src/soc/amd/common/vboot/Makefile.inc b/src/soc/amd/common/vboot/Makefile.inc
index 6938d16e69..e3486abffc 100644
--- a/src/soc/amd/common/vboot/Makefile.inc
+++ b/src/soc/amd/common/vboot/Makefile.inc
@@ -7,3 +7,13 @@ endif
bootblock-$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK) += vboot_bootblock.c
bootblock-$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK) += transfer_buffer.c
+smm-$(CONFIG_VBOOT_STARTS_BEFORE_BOOTBLOCK) += transfer_buffer.c
+
+# We don't use the early RAM memlayout linker for SMM, so we don't have access
+# to the early RAM symbols. We manually generate a file that defines the symbols
+# for us.
+$(obj)/smm/early_ram_symbols.ld: $(objcbfs)/bootblock.map $(src)/soc/amd/common/vboot/early_ram_symbols.awk
+ awk -f $(src)/soc/amd/common/vboot/early_ram_symbols.awk -- "$<" > "$@"
+
+$(obj)/smm/smm.elf: $(obj)/smm/early_ram_symbols.ld
+$(obj)/smm/smm.elf-ldflags += -T $(obj)/smm/early_ram_symbols.ld
diff --git a/src/soc/amd/common/vboot/early_ram_symbols.awk b/src/soc/amd/common/vboot/early_ram_symbols.awk
new file mode 100644
index 0000000000..85a1627a25
--- /dev/null
+++ b/src/soc/amd/common/vboot/early_ram_symbols.awk
@@ -0,0 +1,16 @@
+#!/usr/bin/awk -F
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Generates a linker script to provide early RAM symbols.
+#
+# e.g.,
+# _cbmemc_transfer = 0x02014040;
+# _ecbmemc_transfer = 0x02015640;
+# _cbmemc_transfer_size = 0x00001600;
+
+$3 ~ /^_e?transfer_buffer$/ { printf("%s = 0x%s;\n", $3, $1)}
+$3 ~ /^_transfer_buffer_size$/ { printf("%s = 0x%s;\n", $3, $1)}
+
+$3 ~ /^_e?cbmemc_transfer$/ { printf("%s = 0x%s;\n", $3, $1)}
+$3 ~ /^_cbmemc_transfer_size$/ { printf("%s = 0x%s;\n", $3, $1)}