From 2f993351fce406c803f2e1bcc70e7c55fdfc49cb Mon Sep 17 00:00:00 2001 From: Yue Du Date: Fri, 24 Mar 2017 14:08:02 -0500 Subject: STOP: writing all 1s to lpid of each thread regardless fuse or not Change-Id: Id73f59173107e99d8637c58310a958526ea9b9df Original-Change-Id: I9b38af86e1d11167137d4c6a64a1229eb9ab4f59 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38423 Tested-by: Jenkins Server Reviewed-by: Michael S. Floyd Reviewed-by: Brian T. Vanderpool Reviewed-by: AMIT KUMAR Reviewed-by: ASHISH A. MORE Reviewed-by: Jennifer A. Stofer --- .../ppe_closed/cme/stop_cme/p9_cme_stop_entry.c | 46 ++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c index 9be3f7ab..ea0ae211 100755 --- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c +++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c @@ -504,7 +504,20 @@ p9_cme_stop_entry() if (core & CME_MASK_C0) { lpid_c0[thread] = ram_read_lpid(CME_MASK_C0, thread); - PK_TRACE("c0lpid %X thread %X", (uint32_t) lpid_c0[thread], thread); + PKTRACE("c0lpid %X thread %X", (uint32_t) lpid_c0[thread], thread); + } + + if (core & CME_MASK_C1) + { + lpid_c1[thread] = ram_read_lpid(CME_MASK_C1, thread); + PKTRACE("c1lpid %X thread %X", (uint32_t) lpid_c1[thread], thread); + } + } + + for (thread = 0; thread < 4; thread++ ) + { + if (core & CME_MASK_C0) + { ram_write_lpid(CME_MASK_C0, thread, POWMAN_RESERVED_LPID); #if HW402407_PARANOID_LPID_MODE @@ -520,8 +533,6 @@ p9_cme_stop_entry() if (core & CME_MASK_C1) { - lpid_c1[thread] = ram_read_lpid(CME_MASK_C1, thread); - PK_TRACE("c1lpid %X thread %X", (uint32_t) lpid_c1[thread], thread); ram_write_lpid(CME_MASK_C1, thread, POWMAN_RESERVED_LPID); #if HW402407_PARANOID_LPID_MODE @@ -629,6 +640,35 @@ p9_cme_stop_entry() PK_TRACE("Clear SCAN_REGION_TYPE prior to stop core clocks"); CME_PUTSCOM(C_SCAN_REGION_TYPE, core, 0); +#if NIMBUS_DD_LEVEL == 1 + + // NDD1: Core Global Xstop FIR + if (core & CME_MASK_C0) + { + CME_GETSCOM(0x20040000, CME_MASK_C0, CME_SCOM_AND, scom_data.value); + + if (scom_data.value) + { + PK_TRACE_INF("ERROR: Core[%d] GLOBAL XSTOP[%x] DETECTED. HALT CME!", + core, scom_data.words.upper); + pk_halt(); + } + } + + if (core & CME_MASK_C1) + { + CME_GETSCOM(0x20040000, CME_MASK_C1, CME_SCOM_AND, scom_data.value); + + if (scom_data.value) + { + PK_TRACE_INF("ERROR: Core[%d] GLOBAL XSTOP[%x] DETECTED. HALT CME!", + core, scom_data.words.upper); + pk_halt(); + } + } + +#endif + PK_TRACE("Stop Core Clocks via CLK_REGION"); CME_PUTSCOM(C_CLK_REGION, core, (CLK_STOP_CMD | CLK_REGION_ALL_BUT_PLL | CLK_THOLD_ALL)); -- cgit v1.2.3