soc/intel/common: Move CSE Lite driver functionality into romstage

The patch sets up the CSE Lite driver in the romstage instead of ramstage.
With this change, CSE Lite driver sets CSE's boot partition and triggers
CSE FW update in the romstage. The cse_fw_sync() must be called after DRAM
initialization as HMRFPO_ENABLE HECI command (which is used by
cse_fw_sync()) is expected to be executed after DRAM initialization. With
this change, it improves the cold boot time by ~154ms.

Test=Verified on JSL and TGL platforms
BUG=b:174694480

Signed-off-by: Sridhar Siricilla <sridhar.siricilla@intel.com>
Change-Id: I2fd562a5c6c8501226abbcb68021d9356bcf0b73
Reviewed-on: https://review.coreboot.org/c/coreboot/+/48279
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Sridhar Siricilla 2020-12-04 02:22:28 +05:30 committed by Furquan Shaikh
parent 4c2890d47e
commit 1a2b702848
3 changed files with 3 additions and 5 deletions

View File

@ -1,7 +1,7 @@
bootblock-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CSE) += cse.c
romstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CSE) += cse.c
ramstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CSE) += cse.c
ramstage-$(CONFIG_SOC_INTEL_CSE_LITE_SKU) += cse_lite.c
romstage-$(CONFIG_SOC_INTEL_CSE_LITE_SKU) += cse_lite.c
smm-$(CONFIG_SOC_INTEL_COMMON_BLOCK_HECI_DISABLE_IN_SMM) += disable_heci.c
ifeq ($(CONFIG_SOC_INTEL_CSE_RW_UPDATE),y)

View File

@ -775,7 +775,7 @@ static uint8_t cse_fw_update(const struct cse_bp_info *cse_bp_info)
return 0;
}
void cse_fw_sync(void *unused)
void cse_fw_sync(void)
{
static struct get_bp_info_rsp cse_bp_info;
@ -814,5 +814,3 @@ void cse_fw_sync(void *unused)
cse_trigger_recovery(CSE_LITE_SKU_RW_SWITCH_ERROR);
}
}
BOOT_STATE_INIT_ENTRY(BS_PRE_DEVICE, BS_ON_ENTRY, cse_fw_sync, NULL);

View File

@ -236,7 +236,7 @@ uint8_t cse_wait_com_soft_temp_disable(void);
* In software triggered recovery mode, the function allows CSE to boot from whatever is
* currently selected partition.
*/
void cse_fw_sync(void *unused);
void cse_fw_sync(void);
/* Perform a board-specific reset sequence for CSE RO<->RW jump */
void cse_board_reset(void);