diff options
-rw-r--r-- | src/soc/amd/cezanne/smihandler.c | 8 | ||||
-rw-r--r-- | src/soc/amd/common/vboot/Makefile.inc | 10 | ||||
-rw-r--r-- | src/soc/amd/common/vboot/early_ram_symbols.awk | 16 |
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)} |