From e1b59960c5c1a0689a847116d09145e5dff6b9d0 Mon Sep 17 00:00:00 2001 From: Kapil Porwal Date: Wed, 26 Apr 2023 00:33:53 +0530 Subject: soc/intel/cmn/block/cse: Support sending EOP from payload Skip sending EOP from coreboot when payload is sending it. BUG=b:279184514 TEST=Verify sending EOP from depthcharge on google/rex Signed-off-by: Kapil Porwal Change-Id: I0fbb9fd0f8522eefad39960ca3167c2ba764f523 Reviewed-on: https://review.coreboot.org/c/coreboot/+/74765 Reviewed-by: Werner Zeh Tested-by: build bot (Jenkins) Reviewed-by: Subrata Banik --- src/soc/intel/common/block/cse/Kconfig | 14 ++++++++++++++ src/soc/intel/common/block/cse/cse.c | 4 +++- src/soc/intel/common/block/cse/cse_eop.c | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) (limited to 'src/soc/intel') diff --git a/src/soc/intel/common/block/cse/Kconfig b/src/soc/intel/common/block/cse/Kconfig index 581cecdfbc..ca806fd821 100644 --- a/src/soc/intel/common/block/cse/Kconfig +++ b/src/soc/intel/common/block/cse/Kconfig @@ -134,6 +134,20 @@ config SOC_INTEL_CSE_SEND_EOP_ASYNC request is posted (at CSE .final device operation) and the time coreboot check for its completion (BS_PAYLOAD_LOAD). +config SOC_INTEL_CSE_SEND_EOP_BY_PAYLOAD + bool + depends on SOC_INTEL_COMMON_BLOCK_CSE + depends on !SOC_INTEL_CSE_SEND_EOP_LATE + depends on !SOC_INTEL_CSE_SEND_EOP_EARLY + depends on !SOC_INTEL_CSE_SEND_EOP_ASYNC + depends on !DISABLE_HECI1_AT_PRE_BOOT + help + Use this config to specify that the payload will send the End Of Post (EOP) instead + of coreboot. + + In this case, the HECI interface needs to stay visible and the payload must support + sending commands to CSE. + config SOC_INTEL_CSE_LITE_SKU bool default n diff --git a/src/soc/intel/common/block/cse/cse.c b/src/soc/intel/common/block/cse/cse.c index af1ca92d57..8a92332dbf 100644 --- a/src/soc/intel/common/block/cse/cse.c +++ b/src/soc/intel/common/block/cse/cse.c @@ -1441,15 +1441,17 @@ static void cse_final(struct device *dev) if (CONFIG(SOC_INTEL_STORE_CSE_FW_VERSION)) intel_cse_get_rw_version(); /* - * SoC user can have two options for sending EOP: + * SoC user can have three options for sending EOP: * 1. Choose to send EOP late * 2. Choose to send EOP cmd asynchronously + * 3. Choose to send EOP cmd from payload i.e. skip here * * In case of sending EOP in asynchronous mode, the EOP command * has most likely not been completed yet. The finalization steps * will be run once the EOP command has successfully been completed. */ if (CONFIG(SOC_INTEL_CSE_SEND_EOP_LATE) || + CONFIG(SOC_INTEL_CSE_SEND_EOP_BY_PAYLOAD) || CONFIG(SOC_INTEL_CSE_SEND_EOP_ASYNC)) return; diff --git a/src/soc/intel/common/block/cse/cse_eop.c b/src/soc/intel/common/block/cse/cse_eop.c index 135bcb7be2..265fe04bbc 100644 --- a/src/soc/intel/common/block/cse/cse_eop.c +++ b/src/soc/intel/common/block/cse/cse_eop.c @@ -309,6 +309,11 @@ void cse_send_end_of_post(void) static void send_cse_eop_with_late_finalize(void *unused) { + if (CONFIG(SOC_INTEL_CSE_SEND_EOP_BY_PAYLOAD)) { + printk(BIOS_INFO, "Deferring CSE EOP to payload\n"); + return; + } + if (is_cse_eop_supported()) do_send_end_of_post(true); -- cgit v1.2.3