summaryrefslogtreecommitdiffstats
path: root/import/chips/p9
diff options
context:
space:
mode:
Diffstat (limited to 'import/chips/p9')
-rwxr-xr-ximport/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c9
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c7
2 files changed, 10 insertions, 6 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 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);
OpenPOWER on IntegriCloud