diff options
author | Yue Du <daviddu@us.ibm.com> | 2018-02-28 10:10:48 -0600 |
---|---|---|
committer | hostboot <hostboot@us.ibm.com> | 2018-03-22 14:04:18 -0500 |
commit | 7cba0de6a952e06c2070fe513b25f28e7110d4c1 (patch) | |
tree | a10ec792c99b5946243a32e89121367ff78c0fec /import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c | |
parent | 3aa7c890e50ed5761dbdb21b0156b4418da13f91 (diff) | |
download | talos-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.c | 14 |
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)) |