Subrata Banik has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/86001?usp=email )
Change subject: drivers/intel/fsp2_0/: Add option to control debug log level using CBFS ......................................................................
drivers/intel/fsp2_0/: Add option to control debug log level using CBFS
This commit introduces a new Kconfig option, FSP_DEBUG_LOG_LEVEL_USING_CBFS, which allows controlling the FSP debug log level using CBFS RAW binary files.
If this option is enabled, the following files will be used to determine the log levels:
- fsp_pcd_debug_level: For the overall FSP debug log level.
- fsp_mrc_debug_level: For the MRC (Memory Reference Code) debug log level.
The values in these files should correspond to the FSP_LOG_LEVEL_* enum values.
See the Kconfig help text for more details.
If this option is disabled, the log levels will be determined by calling into fsp_map_console_log_level API.
This change allows for more flexibility in controlling the FSP debug log level, especially in cases of debugging silicon firmware issues with a debug AP FW binary.
This capability is particularly useful when debugging issues that require examining both silicon and MRC logs simultaneously.
BUG=b:227151510 TEST=Able to control the FSP debug log based on CBFS options
To inject the fsp_pcd_debug_level and fsp_mrc_debug_level CBFS files with the desired log level, run:
``` cbfstool image-fatcat.serial.bin add-int -i 5 -n option/fsp_pcd_debug_level
cbfstool image-fatcat.serial.bin add-int -i 5 -n option/fsp_mrc_debug_level ```
With both fsp_pcd_debug_level and fsp_mrc_debug_level present in the RO CBFS, both the silicon firmware and MRC behave as debug binaries.
To verify the presence of both log-level RAW CBFS binaries in the CBFS RO slot, run:
``` sudo cbfstool fatcat/image-rex0.serial.bin print | grep fsp_ ```
This should output:
``` option/fsp_mrc_debug_level 0x88e40 raw 8 none option/fsp_pcd_debug_level 0x2a7400 raw 8 none ```
Change-Id: I2c14d26021dd0048fa24024119df857e216f18bd Signed-off-by: Subrata Banik subratabanik@google.com --- M src/drivers/intel/fsp2_0/Kconfig M src/drivers/intel/fsp2_0/debug.c M src/drivers/intel/fsp2_0/include/fsp/debug.h 3 files changed, 74 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/01/86001/1
diff --git a/src/drivers/intel/fsp2_0/Kconfig b/src/drivers/intel/fsp2_0/Kconfig index c5c485b..8ab7d7b 100644 --- a/src/drivers/intel/fsp2_0/Kconfig +++ b/src/drivers/intel/fsp2_0/Kconfig @@ -522,4 +522,33 @@ Enable this option if you are using a debug build of the FSP (Firmware Support Package) in your project.
+config FSP_DEBUG_LOG_LEVEL_USING_CBFS + bool + select HAVE_CBFS_FILE_OPTION_BACKEND + default n + help + Enable controlling the FSP debug log level using CBFS RAW binary files. + + If enabled, the following files will be used to determine the log levels: + + - `fsp_pcd_debug_level`: For the overall FSP debug log level. + - `fsp_mrc_debug_level`: For the MRC (Memory Reference Code) debug log level. + + Here is the example of adding RAW binary file into the RO-CBFS to specify the + FSP log-level: + - cbfstool <AP FW image> add-int -i <log-level> -n fsp_pcd_debug_level + - cbfstool <AP FW image> add-int -i <log-level> -n fsp_mrc_debug_level + + If disabled, the log levels will be determined by calling into + `fsp_map_console_log_level` API. + + As per FSP documentation of valid log-level values for these CBFS files: + 0: Serial log disable + 1: Critical errors, need action etc., FSP_LOG_LEVEL_ERR aka value 1 + 2. #1 including warnings, FSP_LOG_LEVEL_ERR_WARN aka value 2 + 3. #2 including additional informational messages, FSP_LOG_LEVEL_ERR_WARN_INFO + aka value 3 + 4. #3 including event logs, FSP_LOG_LEVEL_ERR_WARN_INFO_EVENT aka value 4 + 5. Use FSP_LOG_LEVEL_VERBOSE aka 5 for all types of debug messages. + endif diff --git a/src/drivers/intel/fsp2_0/debug.c b/src/drivers/intel/fsp2_0/debug.c index 9dc964d..339deeb 100644 --- a/src/drivers/intel/fsp2_0/debug.c +++ b/src/drivers/intel/fsp2_0/debug.c @@ -6,6 +6,7 @@ #include <cpu/x86/mtrr.h> #include <fsp/debug.h> #include <fsp/util.h> +#include <option.h>
enum fsp_call_phase { BEFORE_FSP_CALL, @@ -178,3 +179,22 @@
display_mtrrs(); } + +#define FSP_PCD_DEBUG_FILENAME "fsp_pcd_debug_level" +#define FSP_MRC_DEBUG_FILENAME "fsp_mrc_debug_level" + +enum fsp_log_level get_fsp_pcd_debug_log_level(void) +{ + if (!CONFIG(FSP_DEBUG_LOG_LEVEL_USING_CBFS)) + return FSP_LOG_LEVEL_DISABLE; + + return (enum fsp_log_level)get_uint_option(FSP_PCD_DEBUG_FILENAME, FSP_LOG_LEVEL_DISABLE); +} + +enum fsp_log_level get_fsp_mrc_debug_log_level(void) +{ + if (!CONFIG(FSP_DEBUG_LOG_LEVEL_USING_CBFS)) + return FSP_LOG_LEVEL_DISABLE; + + return (enum fsp_log_level)get_uint_option(FSP_MRC_DEBUG_FILENAME, FSP_LOG_LEVEL_DISABLE); +} diff --git a/src/drivers/intel/fsp2_0/include/fsp/debug.h b/src/drivers/intel/fsp2_0/include/fsp/debug.h index e7f9f25..c1360a9 100644 --- a/src/drivers/intel/fsp2_0/include/fsp/debug.h +++ b/src/drivers/intel/fsp2_0/include/fsp/debug.h @@ -63,4 +63,29 @@ /* Callback to verify that current GPIO configuration matches the saved snapshot */ size_t gpio_verify_snapshot(void);
+/* + * Retrieve `fsp_pcd_debug_level` file from CBFS to identify the log-level + * used for outputting FSP debug messages. + * If `fsp_pcd_debug_level` not present then, use the log-level as zero aka + * no serial log. Otherwise, use below log levels + * + * 1. Critical errors, need action etc., FSP_LOG_LEVEL_ERR aka value 1 + * 2. #1 including warnings, FSP_LOG_LEVEL_ERR_WARN aka value 2 + * 3. #2 including additional informational messages, FSP_LOG_LEVEL_ERR_WARN_INFO aka value 3 + */ +enum fsp_log_level get_fsp_pcd_debug_log_level(void); +/* +* Retrieve `fsp_mrc_debug_level` file from CBFS to identify the log-level +* used for outputting FSP debug messages. +* If `fsp_mrc_debug_level` not present then, use the log-level as zero aka +* no serial log. Otherwise, use below log levels +* +* 1. Critical errors, need action etc., FSP_LOG_LEVEL_ERR aka value 1 +* 2. #1 including warnings, FSP_LOG_LEVEL_ERR_WARN aka value 2 +* 3. #2 including additional informational messages, FSP_LOG_LEVEL_ERR_WARN_INFO aka value 3 +* 4. #3 including event logs, FSP_LOG_LEVEL_ERR_WARN_INFO_EVENT aka value 4 +* 5. Use FSP_LOG_LEVEL_VERBOSE aka 5 for all types of debug messages. +*/ +enum fsp_log_level get_fsp_mrc_debug_log_level(void); + #endif /* _FSP2_0_DEBUG_H_ */