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-03-13 16:10:22 -0500
committerhostboot <hostboot@us.ibm.com>2018-03-22 14:04:24 -0500
commitfb7e7a302989bf55d9437c6252962f14315463b9 (patch)
treec9fdc3070bdc583a446956f088c3e011e66556c9 /import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
parent7cba0de6a952e06c2070fe513b25f28e7110d4c1 (diff)
downloadtalos-hcode-fb7e7a302989bf55d9437c6252962f14315463b9.tar.gz
talos-hcode-fb7e7a302989bf55d9437c6252962f14315463b9.zip
STOP: Fix Infinite Stacking up Stop Processing led by Entry Abort
Key_Cronus_Test=PM_REGRESS Change-Id: Ib55a367b7e4e1c8b66e7473c696dceaa373b9a84 CQ: SW420964 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/55802 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Cronus HW CI <cronushw-ci+hostboot@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: RAHUL BATRA <rbatra@us.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.c47
1 files changed, 37 insertions, 10 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 9c327afe..e64e6950 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
@@ -83,13 +83,20 @@ p9_cme_stop_pcwu_handler(void)
{
PK_TRACE_INF("PCWU Launching exit thread");
- out32(CME_LCL_EIMR_OR, BITS32(10, 12));
+ out32(CME_LCL_EIMR_OR, BITS32(12, 10));
+ g_eimr_override |= BITS64(12, 10);
wrteei(1);
+
+ // The actual exit sequence
p9_cme_stop_exit();
}
- // re-evaluate stop entry & exit enables
- p9_cme_stop_eval_eimr_override();
+ // in case abort, complete pending entry first
+ if (!G_cme_stop_record.entry_pending)
+ {
+ // re-evaluate stop entry & exit enables
+ p9_cme_stop_eval_eimr_override();
+ }
}
@@ -181,13 +188,20 @@ p9_cme_stop_spwu_handler(void)
{
PK_TRACE_INF("SPWU Launching exit thread");
- out32(CME_LCL_EIMR_OR, BITS32(10, 12));
+ out32(CME_LCL_EIMR_OR, BITS32(12, 10));
+ g_eimr_override |= BITS64(12, 10);
wrteei(1);
+
+ // The actual exit sequence
p9_cme_stop_exit();
}
- // re-evaluate stop entry & exit enables
- p9_cme_stop_eval_eimr_override();
+ // in case abort, complete pending entry first
+ if (!G_cme_stop_record.entry_pending)
+ {
+ // re-evaluate stop entry & exit enables
+ p9_cme_stop_eval_eimr_override();
+ }
}
@@ -198,12 +212,19 @@ p9_cme_stop_rgwu_handler(void)
MARK_TRAP(STOP_RGWU_HANDLER)
PK_TRACE_INF("RGWU Handler Trigger");
- out32(CME_LCL_EIMR_OR, BITS32(10, 12));
+ out32(CME_LCL_EIMR_OR, BITS32(12, 10));
+ g_eimr_override |= BITS64(12, 10);
wrteei(1);
+
+ // The actual exit sequence
p9_cme_stop_exit();
- // re-evaluate stop entry & exit enables
- p9_cme_stop_eval_eimr_override();
+ // in case abort, complete pending entry first
+ if (!G_cme_stop_record.entry_pending)
+ {
+ // re-evaluate stop entry & exit enables
+ p9_cme_stop_eval_eimr_override();
+ }
}
@@ -214,12 +235,18 @@ p9_cme_stop_enter_handler(void)
MARK_TRAP(STOP_ENTER_HANDLER)
PK_TRACE_INF("PM_ACTIVE Handler Trigger");
- out32(CME_LCL_EIMR_OR, BITS32(10, 12));
+ // Abort Protection
+ out32(CME_LCL_EIMR_OR, BITS32(12, 10));
+ g_eimr_override |= BITS64(12, 10);
+ G_cme_stop_record.entry_pending = 1;
wrteei(1);
// The actual entry sequence
p9_cme_stop_entry();
+ // Restore Abort Protection
+ G_cme_stop_record.entry_pending = 0;
+
// re-evaluate stop entry & exit enables
p9_cme_stop_eval_eimr_override();
}
OpenPOWER on IntegriCloud