diff options
author | Arthur Heymans <arthur@aheymans.xyz> | 2023-12-27 20:54:19 +0100 |
---|---|---|
committer | Arthur Heymans <arthur@aheymans.xyz> | 2024-04-05 07:10:17 +0000 |
commit | d57d5e3b3737607e4351ba460d0248a195279f2d (patch) | |
tree | 8f6cf0b7dab07f47cf4296cd8e14fcdefd188060 /src/cpu | |
parent | c72a65dccde199ef3e9b7ab51db86791b58e7b43 (diff) |
smmstorev2: Load the communication buffer at SMM setup
This removes the runtime SMI call to set up the communication buffer
for SMMSTORE in favor of setting this buffer up during the installation
of the smihandler.
The reason is that it's less code in the handler and a time costly SMI
is also avoided in ramstage.
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Change-Id: I94dce77711f37f87033530f5ae48cb850a39341b
Reviewed-on: https://review.coreboot.org/c/coreboot/+/79738
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/x86/smm/smm_module_handler.c | 6 | ||||
-rw-r--r-- | src/cpu/x86/smm/smm_module_loader.c | 17 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/cpu/x86/smm/smm_module_handler.c b/src/cpu/x86/smm/smm_module_handler.c index 0daae00ebb..6322e59beb 100644 --- a/src/cpu/x86/smm/smm_module_handler.c +++ b/src/cpu/x86/smm/smm_module_handler.c @@ -60,6 +60,12 @@ int get_console_loglevel(void) } #endif +void smm_get_smmstore_com_buffer(uintptr_t *base, size_t *size) +{ + *base = smm_runtime.smmstore_com_buffer_base; + *size = smm_runtime.smmstore_com_buffer_size; +} + void smm_get_cbmemc_buffer(void **buffer_out, size_t *size_out) { *buffer_out = smm_runtime.cbmemc; diff --git a/src/cpu/x86/smm/smm_module_loader.c b/src/cpu/x86/smm/smm_module_loader.c index ea51d63e83..646f3bb551 100644 --- a/src/cpu/x86/smm/smm_module_loader.c +++ b/src/cpu/x86/smm/smm_module_loader.c @@ -10,6 +10,7 @@ #include <device/device.h> #include <device/mmio.h> #include <rmodule.h> +#include <smmstore.h> #include <stdio.h> #include <string.h> #include <types.h> @@ -350,6 +351,22 @@ static void setup_smihandler_params(struct smm_runtime *mod_params, if (CONFIG(SMM_PCI_RESOURCE_STORE)) smm_pci_resource_store_init(mod_params); + + if (CONFIG(SMMSTORE_V2)) { + struct smmstore_params_info info; + if (smmstore_get_info(&info) < 0) { + printk(BIOS_INFO, "SMMSTORE: Failed to get meta data\n"); + return; + } + + void *ptr = cbmem_add(CBMEM_ID_SMM_COMBUFFER, info.block_size); + if (!ptr) { + printk(BIOS_ERR, "SMMSTORE: Failed to add com buffer\n"); + return; + } + mod_params->smmstore_com_buffer_base = (uintptr_t)ptr; + mod_params->smmstore_com_buffer_size = info.block_size; + } } static void print_region(const char *name, const struct region region) |