diff options
Diffstat (limited to 'src/soc/intel')
-rw-r--r-- | src/soc/intel/common/block/acpi/acpi_bert.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/src/soc/intel/common/block/acpi/acpi_bert.c b/src/soc/intel/common/block/acpi/acpi_bert.c index 168f3294b6..d35c6c01aa 100644 --- a/src/soc/intel/common/block/acpi/acpi_bert.c +++ b/src/soc/intel/common/block/acpi/acpi_bert.c @@ -7,6 +7,25 @@ #include <intelblocks/acpi.h> #include <intelblocks/crashlog.h> +static bool boot_error_src_present(void) +{ + if (!CONFIG(SOC_INTEL_CRASHLOG)) { + printk(BIOS_DEBUG, "Crashlog disabled.\n"); + return false; + } + + if (!discover_crashlog()) { + printk(BIOS_SPEW, "Crashlog discovery result: crashlog not found\n"); + return false; + } + + collect_pmc_and_cpu_crashlog_from_srams(); + + /* Discovery tables sizes can be larger than the actual valid collected data */ + u32 crashlog_size = cl_get_total_data_size(); + + return (crashlog_size > 0); +} enum cb_err acpi_soc_get_bert_region(void **region, size_t *length) { @@ -14,6 +33,10 @@ enum cb_err acpi_soc_get_bert_region(void **region, size_t *length) size_t cpu_record_size, pmc_record_size; void *cl_data = NULL; + if (!boot_error_src_present()) { + return CB_ERR; + } + if (!cl_get_total_data_size()) { printk(BIOS_ERR, "Error: No crashlog record present\n"); return CB_ERR; @@ -71,24 +94,3 @@ enum cb_err acpi_soc_get_bert_region(void **region, size_t *length) return CB_SUCCESS; } - -bool acpi_is_boot_error_src_present(void) -{ - - if (!CONFIG(SOC_INTEL_CRASHLOG)) { - printk(BIOS_DEBUG, "Crashlog disabled.\n"); - return false; - } - - if (!discover_crashlog()) { - printk(BIOS_SPEW, "Crashlog discovery result: crashlog not found\n"); - return false; - } - - collect_pmc_and_cpu_crashlog_from_srams(); - - /* Discovery tables sizes can be larger than the actual valid collected data */ - u32 crashlog_size = cl_get_total_data_size(); - - return (crashlog_size > 0); -} |