Attention is currently required from: Patrick Rudolph. Sridhar Siricilla has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/59690 )
Change subject: soc/intel/common: Update CSE components during recovery mode ......................................................................
soc/intel/common: Update CSE components during recovery mode
The patch updates the CSE partitions during recovery mode.
TEST=Verified on ADL-P RVP.
Signed-off-by: Sridhar Siricilla sridhar.siricilla@intel.com Change-Id: Ifa23a54e4ab5d887482b6a7fa70d6d6f83d905c0 --- M src/soc/intel/common/block/cse/cse_lite.c 1 file changed, 31 insertions(+), 2 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/90/59690/1
diff --git a/src/soc/intel/common/block/cse/cse_lite.c b/src/soc/intel/common/block/cse/cse_lite.c index 70f7cfa..4862c6b 100644 --- a/src/soc/intel/common/block/cse/cse_lite.c +++ b/src/soc/intel/common/block/cse/cse_lite.c @@ -900,7 +900,11 @@ { static struct get_bp_info_rsp cse_bp_info;
- if (vboot_recovery_mode_enabled()) { + /* + * If system is in recovery mode, skip CSE Lite update if CSE sub-partition update + * is not enabled and continue to update CSE sub-partitions. + */ + if (vboot_recovery_mode_enabled() && !CONFIG(SOC_INTEL_CSE_SUB_PART_UPDATE)) { printk(BIOS_DEBUG, "cse_lite: Skip switching to RW in the recovery path\n"); return; } @@ -913,7 +917,32 @@
if (!cse_get_bp_info(&cse_bp_info)) { printk(BIOS_ERR, "cse_lite: Failed to get CSE boot partition info\n"); - cse_trigger_vboot_recovery(CSE_COMMUNICATION_ERROR); + + /* + * If system is in recovery mode, don't trigger recovery again */ + if (!vboot_recovery_mode_enabled) { + cse_trigger_vboot_recovery(CSE_COMMUNICATION_ERROR); + } + else { + printk(BIOS_ERR, + "cse_lite: System is already in Recovery Mode, so no action\n"); + return; + } + } + + /* + * If system is in recovery mode, CSE Lite update has to be skipped but CSE + * sub-partitions like NPHY and IOM have to to be updated. If CSE sub-parition update + * fails during recovery, just continue to boot. + */ + if (CONFIG(SOC_INTEL_CSE_SUB_PART_UPDATE) && vboot_recovery_mode_enabled()) { + if (sub_part_fw_update(&cse_bp_info.bp_info) == + CSE_LITE_SKU_PART_UPDATE_SUCCESS) { + cse_board_reset(); + do_global_reset(); + die (" ERROR: GLOBAL RESET Failed to reset the system\n"); + } + return; }
if (!cse_fix_data_failure_err(&cse_bp_info.bp_info))