summaryrefslogtreecommitdiffstats
path: root/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2018-02-28 10:10:48 -0600
committerhostboot <hostboot@us.ibm.com>2018-03-22 14:04:18 -0500
commit7cba0de6a952e06c2070fe513b25f28e7110d4c1 (patch)
treea10ec792c99b5946243a32e89121367ff78c0fec /import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
parent3aa7c890e50ed5761dbdb21b0156b4418da13f91 (diff)
downloadtalos-hcode-7cba0de6a952e06c2070fe513b25f28e7110d4c1.tar.gz
talos-hcode-7cba0de6a952e06c2070fe513b25f28e7110d4c1.zip
STOP: Fix Wakeup terminate prematurely with mixed stop2 and stop4
This bug only impact when one core engages the error path As one core detects xstop or fail to startclocks, while we intend to bypass the error core and move on with the good remaining core, whose wakeup will be lost due to the bug Key_Cronus_Test=PM_REGRESS Change-Id: I27012164095b99429d8c46dca5b1c8b3da62e135 CQ: SW420556 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/54833 Tested-by: Cronus HW CI <cronushw-ci+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Dev-Ready: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Diffstat (limited to 'import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c')
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
index f4fe6a1e..9c327afe 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
@@ -125,6 +125,18 @@ p9_cme_stop_spwu_handler(void)
// if falling edge == spwu drop:
if (G_cme_stop_record.core_in_spwu & core_mask)
{
+ if (in32(CME_LCL_FLAGS) & BIT32(CME_FLAGS_SPWU_CHECK_ENABLE))
+ {
+ CME_GETSCOM(PPM_SSHSRC, core_mask, scom_data);
+
+ if ((scom_data & BIT64(0)) || ((~scom_data) & BIT64(1)))
+ {
+ PK_TRACE_ERR("Protocol Error[0]: SPWU Dropped when STOP_GATED=1/SPWU_DONE=0, SSH[%d][%x]",
+ core_mask, (uint32_t)(scom_data >> 32));
+ PK_PANIC(CME_STOP_SPWU_PROTOCOL_ERROR);
+ }
+ }
+
PK_TRACE("Falling edge of spwu, first clearing EISR");
out32(CME_LCL_EISR_CLR, BIT32((14 + core_index)));
@@ -134,7 +146,7 @@ p9_cme_stop_spwu_handler(void)
PK_TRACE("SPWU drop confirmed, now dropping spwu_done");
out32(CME_LCL_SICR_CLR, BIT32((16 + core_index)));
- CME_GETSCOM(PPM_GPMMR, core_mask, scom_data);
+ CME_GETSCOM(PPM_GPMMR, core_mask, scom_data);
// if spwu has been re-asserted after spwu_done is dropped:
if (scom_data & BIT64(1))
OpenPOWER on IntegriCloud