summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2017-07-31 22:47:55 -0500
committerJoshua Hunsberger <jahunsbe@us.ibm.com>2017-10-23 18:41:15 -0500
commitf563c8d413c937ab2c7b1ecef89a120a64151dee (patch)
treebacb9a160de8ff7a9d6bb5c0dfebc49b12995888
parentd47c3d351b061ab18d84f1d0d46b6035b0422d35 (diff)
downloadtalos-hcode-f563c8d413c937ab2c7b1ecef89a120a64151dee.tar.gz
talos-hcode-f563c8d413c937ab2c7b1ecef89a120a64151dee.zip
STOP: Attempt to Fix quad spwu caused incorrect flow
Change-Id: I0f7a6e45842fc79d89b4685badbd5c4e1e7f9e61 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43962 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Juan R. Medina <jrmedina@us.ibm.com> Reviewed-by: BRIAN D. VICTOR <brian.d.victor1@ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c1
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c6
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c8
3 files changed, 12 insertions, 3 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c
index d1ac193a..955c29e1 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c
@@ -70,6 +70,7 @@ p9_sgpe_stop_entry()
MARK_TAG(BEGINSCOPE_STOP_ENTRY, 0)
//================================
+ G_sgpe_stop_record.group.core[VECTOR_ENTRY] = 0;
G_sgpe_stop_record.group.quad[VECTOR_ENTRY] = 0;
G_sgpe_stop_record.group.ex01[0] = 0;
G_sgpe_stop_record.group.ex01[1] = 0;
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c
index baaa72e5..e69d2c02 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c
@@ -237,6 +237,7 @@ p9_sgpe_stop_exit_end(uint32_t qloop)
PK_TRACE("Update QSSR: drop stop_exit_ongoing");
out32(OCB_QSSR_CLR, BIT32(qloop + 26));
+ G_sgpe_stop_record.group.quad[VECTOR_ACTIVE] |= BIT32(qloop);
}
//-------------------------------------------------------------------------
@@ -298,9 +299,8 @@ p9_sgpe_stop_exit_handoff_cme(uint32_t cindex)
// From IPC prospective, core is active when handoff to cme
// and if core from quad is active, the quad is active
- G_sgpe_stop_record.group.core[VECTOR_ACTIVE] |= BIT32(cindex);
- G_sgpe_stop_record.group.quad[VECTOR_ACTIVE] |= BIT32((cindex >> 2));
-
+ G_sgpe_stop_record.group.core[VECTOR_EXIT] &= ~BIT32(cindex);
+ G_sgpe_stop_record.group.core[VECTOR_ACTIVE] |= BIT32(cindex);
}
//------------------------------------------------------------------------------
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c
index b7fcfb9d..8c3a33c4 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c
@@ -714,6 +714,7 @@ p9_sgpe_pig_type3_handler(void* arg, PkIrqId irq)
// block both type3 and type6
// so another doesnt interrupt until next round
out32(OCB_OIMR1_OR, (BIT32(16) | BIT32(19)));
+ g_oimr_override |= (BIT64(48) | BIT64(51));
if (G_sgpe_stop_record.group.core[VECTOR_PIGX])
{
@@ -787,6 +788,12 @@ p9_sgpe_pig_type6_handler(void* arg, PkIrqId irq)
{
PK_TRACE_DBG("Quad Already in Special Wakeup");
}
+ else if (G_sgpe_stop_record.group.quad[VECTOR_ACTIVE] & BIT32(qloop))
+ {
+ PK_TRACE_DBG("Quad Already Waken up, Assert SPWU_DONE");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_GPMMR_OR, qloop), BIT64(0));
+ G_sgpe_stop_record.group.qswu[VECTOR_ACTIVE] |= BIT32(qloop);
+ }
else if (G_sgpe_stop_record.group.quad[VECTOR_BLOCKX] & BIT32(qloop))
{
PK_TRACE_DBG("Quad is in Block Wakeup Mode, Ignore Now");
@@ -825,6 +832,7 @@ p9_sgpe_pig_type6_handler(void* arg, PkIrqId irq)
// block both type3 and type6
// so another doesnt interrupt until next round
out32(OCB_OIMR1_OR, (BIT32(16) | BIT32(19)));
+ g_oimr_override |= (BIT64(48) | BIT64(51));
if (G_sgpe_stop_record.group.qswu[VECTOR_EXIT])
{
OpenPOWER on IntegriCloud