aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/smm
diff options
context:
space:
mode:
authorJohnny Lin <johnny_lin@wiwynn.com>2021-01-14 17:49:08 +0800
committerDavid Hendricks <david.hendricks@gmail.com>2023-02-15 21:53:07 +0000
commit107e7aa0f58f79ee5719f82c7147e53d7d9fa218 (patch)
tree22ea35a3f0f188e2036ce1c710afdef8409c625f /src/cpu/x86/smm
parente822fb358764b78e7d7d02c024ae6a285632ddf9 (diff)
cpu/x86/smm: Enable setting SMM console log level from mainboard
Add a Kconfig RUNTIME_CONFIGURABLE_SMM_LOGLEVEL that enables mainboard to override mainboard_set_smm_log_level for SMM log level. This can let SMM have different log level than other stages for more flexibility. Another reason is that getting certain data that requires searching from flash VPD or CMOS is not very ideal to be done in SMM, so in this change the value can be passed via the member variable in struct smm_runtime and be referenced directly in SMM. One example is that mainboard can get the desired SMM log level from VPD/CMOS, and pass SMM console log level via the variable and in SMM it can be referenced in get_console_loglevel() override function directly. Tested=On OCP Delta Lake, verified SMM log level can be overridden. Change-Id: I81722a4f1bf75ec942cc06e403ad702dfe938e71 Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/49460 Reviewed-by: David Hendricks <david.hendricks@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Jonathan Zhang <jonzhang@fb.com>
Diffstat (limited to 'src/cpu/x86/smm')
-rw-r--r--src/cpu/x86/smm/smm_module_handler.c7
-rw-r--r--src/cpu/x86/smm/smm_module_loader.c5
2 files changed, 12 insertions, 0 deletions
diff --git a/src/cpu/x86/smm/smm_module_handler.c b/src/cpu/x86/smm/smm_module_handler.c
index a976521e65..1b3c93b780 100644
--- a/src/cpu/x86/smm/smm_module_handler.c
+++ b/src/cpu/x86/smm/smm_module_handler.c
@@ -52,6 +52,13 @@ static void smi_release_lock(void)
);
}
+#if CONFIG(RUNTIME_CONFIGURABLE_SMM_LOGLEVEL)
+int get_console_loglevel(void)
+{
+ return smm_runtime.smm_log_level;
+}
+#endif
+
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 6924f08e78..1b04e8894d 100644
--- a/src/cpu/x86/smm/smm_module_loader.c
+++ b/src/cpu/x86/smm/smm_module_loader.c
@@ -338,6 +338,11 @@ static void setup_smihandler_params(struct smm_runtime *mod_params,
for (int i = 0; i < loader_params->num_cpus; i++)
mod_params->save_state_top[i] = region_end(&cpus[i].ss);
+
+ if (CONFIG(RUNTIME_CONFIGURABLE_SMM_LOGLEVEL))
+ mod_params->smm_log_level = mainboard_set_smm_log_level();
+ else
+ mod_params->smm_log_level = 0;
}
static void print_region(const char *name, const struct region region)