summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/cme_panic_codes.h4
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_scomcust.c23
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_startclocks.c2
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c15
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_startclocks.c6
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/sgpe_panic_codes.h4
6 files changed, 46 insertions, 8 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/cme/cme_panic_codes.h b/import/chips/p9/procedures/ppe_closed/cme/cme_panic_codes.h
index dff06a63..49419494 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/cme_panic_codes.h
+++ b/import/chips/p9/procedures/ppe_closed/cme/cme_panic_codes.h
@@ -63,8 +63,8 @@ CME_STOP_EXIT_PHANTOM_WAKEUP = 0x1d00, // Stop Error
CME_STOP_EXIT_BCE_SCOM_FAILED = 0x1d01,
CME_STOP_EXIT_SELF_RES_SPATTN = 0x1d02,
CME_STOP_EXIT_STARTCLK_FAILED = 0x1d03,
-CME_STOP_EXIT_XSTOP_ERROR = 0x1d04,
-//_UNUSED_1d05 = 0x1d05,
+CME_STOP_EXIT_STARTCLK_XSTOP_ERROR = 0x1d04,
+CME_STOP_EXIT_SCOM_RES_XSTOP_ERROR = 0x1d05,
//_UNUSED_1d06 = 0x1d06,
//_UNUSED_1d07 = 0x1d07,
CME_STOP_ENTRY_STOPCLK_FAILED = 0x1d08,
diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_scomcust.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_scomcust.c
index 478dadb5..7c30d96c 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_scomcust.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_scomcust.c
@@ -59,4 +59,27 @@ p9_hcd_core_scomcust(uint32_t core)
PK_TRACE("Drop chiplet fence via NC0INDIR[18]");
CME_PUTSCOM(CPPM_NC0INDIR_CLR, core, BIT64(18));
+
+#if !EPM_P9_TUNING
+
+ data64_t scom_data = {0};
+
+ for(core_mask = 2; core_mask; core_mask--)
+ {
+ if (core & core_mask)
+ {
+ PK_TRACE("Check Global Xstop FIR of Core Chiplet After Scom Restore");
+ CME_GETSCOM(C_XFIR, core_mask, scom_data.value);
+
+ if (scom_data.words.upper & BITS32(0, 27))
+ {
+ PK_TRACE_ERR("Core[%d] Chiplet Global Xstop FIR[%x] Detected After Scom Restore. HALT CME!",
+ core_mask, scom_data.words.upper);
+ PK_PANIC(CME_STOP_EXIT_SCOM_RES_XSTOP_ERROR);
+ }
+ }
+ }
+
+#endif
+
}
diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_startclocks.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_startclocks.c
index 296d0a56..fc15dc31 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_startclocks.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_startclocks.c
@@ -155,7 +155,7 @@ p9_hcd_core_startclocks(uint32_t core)
{
PK_TRACE_ERR("Core[%d] Chiplet Global Xstop FIR[%x] Detected. HALT CME!",
core_mask, scom_data.words.upper);
- PK_PANIC(CME_STOP_EXIT_XSTOP_ERROR);
+ PK_PANIC(CME_STOP_EXIT_STARTCLK_XSTOP_ERROR);
}
}
}
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c
index 8ebb10d4..3cf970d2 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c
@@ -133,5 +133,20 @@ p9_hcd_cache_scomcust(uint32_t quad, uint32_t m_ex, int is_stop8)
PK_TRACE("Drop chiplet fence via NET_CTRL0[18]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WAND, quad), ~BIT64(18));
+
+#if !EPM_P9_TUNING
+
+ PK_TRACE("Check Global Xstop FIR of Cache Chiplet After Scom Restore");
+ GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_XFIR, quad), scom_data.value);
+
+ if (scom_data.words.upper & BITS32(0, 27))
+ {
+ PK_TRACE_ERR("Cache[%d] Chiplet Global Xstop FIR[%x] Detected After Scom Restore. HALT SGPE!",
+ quad, scom_data.words.upper);
+ PK_PANIC(SGPE_STOP_EXIT_SCOM_RES_XSTOP_ERROR);
+ }
+
+#endif
+
}
}
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_startclocks.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_startclocks.c
index 6429b493..eeaf6764 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_startclocks.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_startclocks.c
@@ -173,14 +173,14 @@ p9_hcd_cache_startclocks(uint32_t quad, uint32_t ex)
#if !EPM_P9_TUNING
- PK_TRACE("Check Global Xstop FIR of Cache Chiplet");
+ PK_TRACE("Check Global Xstop FIR of Cache Chiplet After Start Clock");
GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_XFIR, quad), scom_data.value);
if (scom_data.words.upper & BITS32(0, 27))
{
- PK_TRACE_ERR("Cache[%d] Chiplet Global Xstop FIR[%x] Detected. HALT SGPE!",
+ PK_TRACE_ERR("Cache[%d] Chiplet Global Xstop FIR[%x] Detected After Start Clock. HALT SGPE!",
quad, scom_data.words.upper);
- PK_PANIC(SGPE_STOP_EXIT_XSTOP_ERROR);
+ PK_PANIC(SGPE_STOP_EXIT_STARTCLK_XSTOP_ERROR);
}
#endif
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/sgpe_panic_codes.h b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/sgpe_panic_codes.h
index f811ddf1..4e963ec4 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/sgpe_panic_codes.h
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/sgpe_panic_codes.h
@@ -71,8 +71,8 @@ SGPE_STOP_EXIT_DROP_SLV_LOCK_FAILED = 0x1d06,
SGPE_STOP_EXIT_DPLL_STARTCLK_FAILED = 0x1d07,
SGPE_STOP_EXIT_L2_STARTCLK_FAILED = 0x1d08,
SGPE_STOP_EXIT_EQ_STARTCLK_FAILED = 0x1d09,
-SGPE_STOP_EXIT_XSTOP_ERROR = 0x1d0a,
-//_UNUSED_1d0d = 0x1d0d,
+SGPE_STOP_EXIT_STARTCLK_XSTOP_ERROR = 0x1d0a,
+SGPE_STOP_EXIT_SCOM_RES_XSTOP_ERROR = 0x1d0d,
//_UNUSED_1d1c = 0x1d1c,
//_UNUSED_1d1d = 0x1d1d,
//_UNUSED_1d1e = 0x1d1e,
OpenPOWER on IntegriCloud