diff options
Diffstat (limited to 'src/cpu/x86')
-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) |