From 554ec892997079d31d094a9eba17c987ef5e2690 Mon Sep 17 00:00:00 2001 From: Yue Du Date: Fri, 5 Jan 2018 15:16:14 -0600 Subject: STOP: Fix Phantom PCWU causing CME IOTA to halt Key_Cronus_Test=PM_REGRESS Change-Id: I6d87f34d2fb9be52f0221be3d7dd682aeca652ce CQ: SW413313 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/51568 Tested-by: Jenkins Server Tested-by: Cronus HW CI Reviewed-by: Michael S. Floyd Tested-by: FSP CI Jenkins Reviewed-by: Gregory S. Still Reviewed-by: Jennifer A. Stofer --- .../p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c | 9 ++++++--- .../ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c | 7 ++++--- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'import/chips/p9/procedures/ppe_closed') 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 009be29f..d17097f7 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 @@ -962,6 +962,8 @@ p9_cme_stop_entry() MARK_TRAP(SE_STOP_CORE_CLKS) //========================== + sync(); + PK_TRACE("Assert core chiplet fence via NET_CTRL0[18]"); CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(18)); @@ -1612,14 +1614,15 @@ p9_cme_stop_entry() CME_PUTSCOM(CPPM_CPMMR_OR, core_mask, BIT64(13)); PK_TRACE_DBG("Switch Core[%d] PPM wakeup to STOP-GPE via CPMMR[13]", core_mask); - G_cme_stop_record.core_stopgpe |= core; + G_cme_stop_record.core_stopgpe |= core_mask; G_cme_stop_record.act_level[core_index] = STOP_LEVEL_5; } } sync(); - PK_TRACE("Clear special wakeup after wakeup_notify = 1 since it is edge triggered"); - out32(CME_LCL_EISR_CLR, core << SHIFT32(15)); + + PK_TRACE("Clear special/regular wakeup after wakeup_notify = 1 since it is edge triggered"); + out32(CME_LCL_EISR_CLR, (core << SHIFT32(15)) | (core << SHIFT32(17))); #if NIMBUS_DD_LEVEL != 10 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 e4296eef..f565108b 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 @@ -49,8 +49,9 @@ p9_cme_stop_pcwu_handler(void) MARK_TRAP(STOP_PCWU_HANDLER) PK_TRACE_INF("PCWU Handler Trigger: Core Interrupts %x", core); + out32(CME_LCL_EISR_CLR, (G_cme_stop_record.core_running << SHIFT32(13))); g_eimr_override |= ((uint64_t)G_cme_stop_record.core_running << SHIFT64(13)); - core &= ~(G_cme_stop_record.core_running); + core &= (~G_cme_stop_record.core_running); for (core_mask = 2; core_mask; core_mask--) { @@ -81,7 +82,7 @@ p9_cme_stop_pcwu_handler(void) // if still wakeup for core with notify_select == cme, go exit if (core) { - PK_TRACE_INF("Launching exit thread"); + PK_TRACE_INF("PCWU Launching exit thread"); out32(CME_LCL_EIMR_OR, BITS32(12, 10)); wrteei(1); @@ -172,7 +173,7 @@ p9_cme_stop_spwu_handler(void) if (spwu_rise) { - PK_TRACE_INF("Launching exit thread"); + PK_TRACE_INF("SPWU Launching exit thread"); out32(CME_LCL_EIMR_OR, BITS32(12, 10)); wrteei(1); -- cgit v1.2.1