aboutsummaryrefslogtreecommitdiff
path: root/src/soc/intel/apollolake/cse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/apollolake/cse.c')
-rw-r--r--src/soc/intel/apollolake/cse.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/soc/intel/apollolake/cse.c b/src/soc/intel/apollolake/cse.c
index 9051dc3304..cfb3b8a841 100644
--- a/src/soc/intel/apollolake/cse.c
+++ b/src/soc/intel/apollolake/cse.c
@@ -19,6 +19,11 @@
#include <console/console.h>
#include <fmap.h>
#include <intelblocks/cse.h>
+#include <intelblocks/p2sb.h>
+#include <intelblocks/pcr.h>
+#include <soc/heci.h>
+#include <soc/iomap.h>
+#include <soc/pcr_ids.h>
#include <soc/pci_devs.h>
#include <device/pci_ops.h>
#include <stdint.h>
@@ -187,7 +192,7 @@ static uint32_t dump_status(int index, int reg_addr)
return reg;
}
-static void dump_cse_state(void *unused)
+static void dump_cse_state(void)
{
uint32_t fwsts1;
@@ -218,6 +223,25 @@ static void dump_cse_state(void *unused)
}
printk(BIOS_DEBUG, "\n");
}
+
+#define PCR_PSFX_T0_SHDW_PCIEN 0x1C
+#define PCR_PSFX_T0_SHDW_PCIEN_FUNDIS (1 << 8)
+
+static void disable_heci1(void)
+{
+ pcr_or32(PID_PSF3, PSF3_BASE_ADDRESS + PCR_PSFX_T0_SHDW_PCIEN,
+ PCR_PSFX_T0_SHDW_PCIEN_FUNDIS);
+}
+
+void heci_cse_lockdown(void)
+{
+ dump_cse_state();
+
+ /*
+ * It is safe to disable HECI1 now since we won't be talking to the ME
+ * anymore.
+ */
+ disable_heci1();
+}
+
BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, fpf_blown, NULL);
-BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, dump_cse_state, NULL);
-BOOT_STATE_INIT_ENTRY(BS_PAYLOAD_LOAD, BS_ON_EXIT, dump_cse_state, NULL);