diff --git a/src/soc/intel/common/block/cse/Kconfig b/src/soc/intel/common/block/cse/Kconfig
index 33d703f..f1f53d6 100644
--- a/src/soc/intel/common/block/cse/Kconfig
+++ b/src/soc/intel/common/block/cse/Kconfig
@@ -67,25 +67,6 @@
 	  Starting with Jasper Lake, coreboot sends EOP before loading payload hence, this
 	  config is applicable for those platforms.
 
-config SOC_INTEL_CSE_SEND_EOP_ASYNC
-	bool
-	depends on SOC_INTEL_COMMON_BLOCK_CSE
-	depends on !SOC_INTEL_CSE_SEND_EOP_LATE
-	depends on !SOC_INTEL_CSE_SEND_EOP_EARLY
-	help
-	  Use this config to handle End Of Post (EOP) completion
-	  asynchronously. The EOP command is sent first and the result
-	  is checked later leaving time to CSE to complete the
-	  operation while coreboot perform other activities.
-	  Performing EOP asynchronously reduces the time spent
-	  actively waiting for command completion which can have a
-	  significant impact on boot time.
-
-	  Using this asynchronous approach comes with the limitation
-	  that no HECI command should be sent between the time the EOP
-	  request is posted (at CSE .final device operation) and the
-	  time coreboot check for its completion (BS_PAYLOAD_LOAD).
-
 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 6c4bb73..9902094 100644
--- a/src/soc/intel/common/block/cse/cse.c
+++ b/src/soc/intel/common/block/cse/cse.c
@@ -1407,8 +1407,7 @@
  */
 void cse_late_finalize(void)
 {
-	if (!CONFIG(SOC_INTEL_CSE_SEND_EOP_LATE) &&
-	    !CONFIG(SOC_INTEL_CSE_SEND_EOP_ASYNC))
+	if (!CONFIG(SOC_INTEL_CSE_SEND_EOP_LATE))
 		return;
 
 	if (!CONFIG(USE_FSP_NOTIFY_PHASE_READY_TO_BOOT))
@@ -1432,14 +1431,6 @@
 	if (CONFIG(SOC_INTEL_CSE_SET_EOP))
 		cse_send_end_of_post();
 
-	/*
-	 * In asynchronous mode, the EOP command has most likely not been
-	 * completed yet. Finalization steps will be run once the EOP command
-	 * has successfully been completed.
-	 */
-	if (CONFIG(SOC_INTEL_CSE_SEND_EOP_ASYNC))
-		return;
-
 	if (!CONFIG(USE_FSP_NOTIFY_PHASE_READY_TO_BOOT))
 		cse_final_ready_to_boot();
 
diff --git a/src/soc/intel/common/block/cse/cse_eop.c b/src/soc/intel/common/block/cse/cse_eop.c
index 16cf523..53a4fa5 100644
--- a/src/soc/intel/common/block/cse/cse_eop.c
+++ b/src/soc/intel/common/block/cse/cse_eop.c
@@ -67,54 +67,13 @@
 	return CSE_CMD_RESULT_SUCCESS;
 }
 
-static enum cse_cmd_result cse_receive_eop(void)
+static enum cse_cmd_result cse_send_eop(void)
 {
+	enum cse_tx_rx_status ret;
 	enum {
 		EOP_REQUESTED_ACTION_CONTINUE = 0,
 		EOP_REQUESTED_ACTION_GLOBAL_RESET = 1,
 	};
-	enum cse_tx_rx_status ret;
-	struct end_of_post_resp {
-		struct mkhi_hdr hdr;
-		uint32_t requested_actions;
-	} __packed resp = {};
-	size_t resp_size = sizeof(resp);
-
-	ret = heci_receive(&resp, &resp_size);
-	if (ret)
-		return decode_heci_send_receive_error(ret);
-
-	if (resp.hdr.group_id != MKHI_GROUP_ID_GEN ||
-	    resp.hdr.command != MKHI_END_OF_POST) {
-		printk(BIOS_ERR, "HECI: EOP Unexpected response group or command.\n");
-		if (CONFIG(SOC_INTEL_CSE_SEND_EOP_ASYNC))
-			printk(BIOS_ERR, "HECI: It could be a HECI command conflict.\n");
-		return CSE_CMD_RESULT_ERROR;
-	}
-
-	if (resp.hdr.result) {
-		printk(BIOS_ERR, "HECI: EOP Resp Failed: %u\n", resp.hdr.result);
-		return CSE_CMD_RESULT_ERROR;
-	}
-
-	printk(BIOS_INFO, "CSE: EOP requested action: ");
-
-	switch (resp.requested_actions) {
-	case EOP_REQUESTED_ACTION_GLOBAL_RESET:
-		printk(BIOS_INFO, "global reset\n");
-		return CSE_CMD_RESULT_GLOBAL_RESET_REQUESTED;
-	case EOP_REQUESTED_ACTION_CONTINUE:
-		printk(BIOS_INFO, "continue boot\n");
-		return CSE_CMD_RESULT_SUCCESS;
-	default:
-		printk(BIOS_INFO, "unknown %u\n", resp.requested_actions);
-		return CSE_CMD_RESULT_ERROR;
-	}
-}
-
-static enum cse_cmd_result cse_send_eop(void)
-{
-	enum cse_tx_rx_status ret;
 	struct end_of_post_msg {
 		struct mkhi_hdr hdr;
 	} __packed msg = {
@@ -123,6 +82,11 @@
 			.command = MKHI_END_OF_POST,
 		},
 	};
+	struct end_of_post_resp {
+		struct mkhi_hdr hdr;
+		uint32_t requested_actions;
+	} __packed resp = {};
+	size_t resp_size = sizeof(resp);
 
 	/* For a CSE-Lite SKU, if the CSE is running RO FW and the board is
 	   running vboot in recovery mode, the CSE is expected to be in SOFT
@@ -155,22 +119,28 @@
 
 	printk(BIOS_INFO, "HECI: Sending End-of-Post\n");
 
-	ret = heci_send(&msg, sizeof(msg), BIOS_HOST_ADDR, HECI_MKHI_ADDR);
+	ret = heci_send_receive(&msg, sizeof(msg), &resp, &resp_size, HECI_MKHI_ADDR);
 	if (ret)
 		return decode_heci_send_receive_error(ret);
 
-	return CSE_CMD_RESULT_SUCCESS;
-}
+	if (resp.hdr.result) {
+		printk(BIOS_ERR, "HECI: EOP Resp Failed: %u\n", resp.hdr.result);
+		return CSE_CMD_RESULT_ERROR;
+	}
 
-static enum cse_cmd_result cse_send_and_receive_eop(void)
-{
-	enum cse_cmd_result ret;
+	printk(BIOS_INFO, "CSE: EOP requested action: ");
 
-	ret = cse_send_eop();
-	if (ret != CSE_CMD_RESULT_SUCCESS)
-		return ret;
-
-	return cse_receive_eop();
+	switch (resp.requested_actions) {
+	case EOP_REQUESTED_ACTION_GLOBAL_RESET:
+		printk(BIOS_INFO, "global reset\n");
+		return CSE_CMD_RESULT_GLOBAL_RESET_REQUESTED;
+	case EOP_REQUESTED_ACTION_CONTINUE:
+		printk(BIOS_INFO, "continue boot\n");
+		return CSE_CMD_RESULT_SUCCESS;
+	default:
+		printk(BIOS_INFO, "unknown %u\n", resp.requested_actions);
+		return CSE_CMD_RESULT_ERROR;
+	}
 }
 
 static enum cse_cmd_result cse_send_cmd_retries(enum cse_cmd_result (*cse_send_command)(void))
@@ -229,12 +199,11 @@
 	}
 }
 
-static void do_send_end_of_post(bool wait_for_completion)
+static void do_send_end_of_post(void)
 {
-	static bool eop_sent = false, eop_complete = false;
-	enum cse_cmd_result ret;
+	static bool eop_sent = false;
 
-	if (eop_complete) {
+	if (eop_sent) {
 		printk(BIOS_WARNING, "EOP already sent\n");
 		return;
 	}
@@ -253,40 +222,26 @@
 		return;
 	}
 
-	if (!eop_sent) {
-		set_cse_device_state(PCH_DEVFN_CSE, DEV_ACTIVE);
-		timestamp_add_now(TS_ME_END_OF_POST_START);
-		ret = cse_send_cmd_retries(cse_send_eop);
-		if (ret == CSE_CMD_RESULT_SUCCESS)
-			eop_sent = true;
-	}
-
-	if (!wait_for_completion)
-		return;
-
 	set_cse_device_state(PCH_DEVFN_CSE, DEV_ACTIVE);
-	ret = cse_receive_eop();
-	if (ret != CSE_CMD_RESULT_SUCCESS) {
-		ret = cse_send_cmd_retries(cse_send_and_receive_eop);
-		handle_cse_eop_result(ret);
-	}
+
+	timestamp_add_now(TS_ME_END_OF_POST_START);
+	handle_cse_eop_result(cse_send_cmd_retries(cse_send_eop));
 	timestamp_add_now(TS_ME_END_OF_POST_END);
 
 	set_cse_device_state(PCH_DEVFN_CSE, DEV_IDLE);
 
-	eop_complete = true;
+	eop_sent = true;
 }
 
 void cse_send_end_of_post(void)
 {
-	return do_send_end_of_post(!CONFIG(SOC_INTEL_CSE_SEND_EOP_ASYNC));
+	return do_send_end_of_post();
 }
 
 static void send_cse_eop_with_late_finalize(void *unused)
 {
-	do_send_end_of_post(true);
-	if (CONFIG(SOC_INTEL_CSE_SEND_EOP_LATE) ||
-	    CONFIG(SOC_INTEL_CSE_SEND_EOP_ASYNC))
+	do_send_end_of_post();
+	if (CONFIG(SOC_INTEL_CSE_SEND_EOP_LATE))
 		cse_late_finalize();
 }
 
