diff options
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, |

