summaryrefslogtreecommitdiff
path: root/src/soc/intel/common/block
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/common/block')
-rw-r--r--src/soc/intel/common/block/cse/cse_lite.c9
-rw-r--r--src/soc/intel/common/block/include/intelblocks/cse.h4
2 files changed, 13 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/cse/cse_lite.c b/src/soc/intel/common/block/cse/cse_lite.c
index ff489af9b5..d89044f2ba 100644
--- a/src/soc/intel/common/block/cse/cse_lite.c
+++ b/src/soc/intel/common/block/cse/cse_lite.c
@@ -364,12 +364,21 @@ static bool cse_set_next_boot_partition(enum boot_partition_id bp)
return true;
}
+__weak void cse_board_reset(void)
+{
+ /* Default weak implementation, does nothing. */
+}
+
/* Set the CSE's next boot partition and issues system reset */
static bool cse_set_and_boot_from_next_bp(enum boot_partition_id bp)
{
if (!cse_set_next_boot_partition(bp))
return false;
+ /* Allow the board to perform a reset for CSE RO<->RW jump */
+ cse_board_reset();
+
+ /* If board does not perform the reset, then perform global_reset */
do_global_reset();
die("cse_lite: Failed to reset the system\n");
diff --git a/src/soc/intel/common/block/include/intelblocks/cse.h b/src/soc/intel/common/block/include/intelblocks/cse.h
index a1dc3d9d56..5466ba6a74 100644
--- a/src/soc/intel/common/block/include/intelblocks/cse.h
+++ b/src/soc/intel/common/block/include/intelblocks/cse.h
@@ -219,4 +219,8 @@ uint8_t cse_wait_com_soft_temp_disable(void);
* currently selected partition.
*/
void cse_fw_sync(void *unused);
+
+/* Perform a board-specific reset sequence for CSE RO<->RW jump */
+void cse_board_reset(void);
+
#endif // SOC_INTEL_COMMON_CSE_H