summaryrefslogtreecommitdiff
path: root/src/soc
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc')
-rw-r--r--src/soc/intel/meteorlake/chip.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/soc/intel/meteorlake/chip.c b/src/soc/intel/meteorlake/chip.c
index 036c126d45..d249dd4489 100644
--- a/src/soc/intel/meteorlake/chip.c
+++ b/src/soc/intel/meteorlake/chip.c
@@ -15,6 +15,7 @@
#include <intelblocks/systemagent.h>
#include <intelblocks/tcss.h>
#include <intelblocks/xdci.h>
+#include <soc/intel/common/reset.h>
#include <soc/intel/common/vbt.h>
#include <soc/iomap.h>
#include <soc/itss.h>
@@ -226,8 +227,24 @@ static void soc_enable(struct device *dev)
block_gpio_enable(dev);
}
+static void soc_init_final_device(void *chip_info)
+{
+ uint32_t reset_status = fsp_get_pch_reset_status();
+
+ if (reset_status == FSP_SUCCESS)
+ return;
+
+ /* Handle any pending reset request from previously executed FSP APIs */
+ fsp_handle_reset(reset_status);
+
+ /* Control shouldn't return here */
+ die_with_post_code(POST_HW_INIT_FAILURE,
+ "Failed to handle the FSP reset request with error 0x%08x\n", reset_status);
+}
+
struct chip_operations soc_intel_meteorlake_ops = {
CHIP_NAME("Intel Meteorlake")
.enable_dev = &soc_enable,
.init = &soc_init_pre_device,
+ .final = &soc_init_final_device,
};