summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/soc/intel/common/block/cse/Kconfig14
-rw-r--r--src/soc/intel/common/block/cse/cse.c4
-rw-r--r--src/soc/intel/common/block/cse/cse_eop.c5
3 files changed, 22 insertions, 1 deletions
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);