Anil Kumar K has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/78243?usp=email )
Change subject: soc/intel/cse: Add API to check if CSE Firmware update is required ......................................................................
soc/intel/cse: Add API to check if CSE Firmware update is required
This patch adds a function to check if a CSE FW update is required during this boot. The function is expected to be used during use cases like Pre-Memory Sign of Life text display to inform user of a CSE Firmware update .
Bug=279173035 TEST=build and boot on google/rex board. Call the function in romstage and confirm it returns True during CSE FW update and False otherwise
Signed-off-by: Anil Kumar anil.kumar.k@intel.com Change-Id: If5fae95786d28d586566881bc4436812754636ae --- M src/soc/intel/common/block/cse/cse_lite.c M src/soc/intel/common/block/include/intelblocks/cse.h 2 files changed, 35 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/43/78243/1
diff --git a/src/soc/intel/common/block/cse/cse_lite.c b/src/soc/intel/common/block/cse/cse_lite.c index bd06bbf..f03b1c6 100644 --- a/src/soc/intel/common/block/cse/cse_lite.c +++ b/src/soc/intel/common/block/cse/cse_lite.c @@ -1177,6 +1177,36 @@ backup_psr_data(); }
+/* + * Check if a CSE Firmware update is required + * returns true if an update is required, false otherwise + */ +bool is_cse_fw_update_required(void) +{ + struct fw_version cbfs_rw_version; + int ret; + + if (!is_cse_fw_update_enabled()) + return false; + + /* + * First check if cse_bp_info_rsp global structure is populated + * else, this implies that cse_fill_bp_info() function is not called + */ + if (!is_cse_bp_info_valid(&cse_bp_info_rsp)) + return false; + + if (get_cse_ver_from_cbfs(&cbfs_rw_version) == CB_ERR) + return false; + + ret = cse_compare_sub_part_version(&cbfs_rw_version, cse_get_rw_version()); + if (ret == 0) + /* return false if CSE FW update is not required */ + return false; + else + return true; +} + static uint8_t cse_fw_update(void) { struct region_device target_rdev; diff --git a/src/soc/intel/common/block/include/intelblocks/cse.h b/src/soc/intel/common/block/include/intelblocks/cse.h index f84dba8..3db1324 100644 --- a/src/soc/intel/common/block/include/intelblocks/cse.h +++ b/src/soc/intel/common/block/include/intelblocks/cse.h @@ -611,4 +611,9 @@ /* Fills the CSE Boot Partition Info response */ void cse_fill_bp_info(void);
+/* + * Check if a CSE Firmware update is required + * Returns true if an update is required, false otherwise + */ +bool is_cse_fw_update_required(void); #endif // SOC_INTEL_COMMON_CSE_H