summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2018-02-06 21:40:06 -0600
committerhostboot <hostboot@us.ibm.com>2018-03-22 14:06:02 -0500
commite96d64fbd63c6f5728167141f51ea1703777d11b (patch)
tree52c32bb3b758d424f05924f87907ecc11e327861
parentbd66f63b24a2bd36c171f14599d0b076d94055ce (diff)
downloadtalos-hcode-e96d64fbd63c6f5728167141f51ea1703777d11b.tar.gz
talos-hcode-e96d64fbd63c6f5728167141f51ea1703777d11b.zip
STOP: Block Wakeup Mode Fixes for Phyp
1) fix L3 Purge Abort in Block Wakeup mode put quad in undefined state 2) fix stop11 wakeup being converted to stop5 wakeup during Block Wakeup 3) fix some bugs between Special Wakeup and Block Wakeup mode. 4) fix racing decrementor wakeup being serviced in Block Wakeup mode Key_Cronus_Test=PM_REGRESS Change-Id: Ia1d10cc9af14ecc592f42116f916deca3ae56b86 Original-Change-Id: I391e6f820c0e9842fc737a1aa5e2ece8e94105bc CQ: SW416538 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53514 Reviewed-by: Michael S. Floyd <mfloyd@us.ibm.com> Reviewed-by: YUE DU <daviddu@us.ibm.com> Reviewed-by: Brian T. Vanderpool <vanderp@us.ibm.com> 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>
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_ipc_handlers.c6
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c4
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c4
3 files changed, 8 insertions, 6 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_ipc_handlers.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_ipc_handlers.c
index 27a721db..7ce6fdd2 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_ipc_handlers.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_ipc_handlers.c
@@ -295,7 +295,7 @@ p9_sgpe_stop_suspend_all_cmes()
uint32_t qloop = 0;
uint32_t xloop = 0;
uint32_t cloop = 0;
- uint32_t cpayload_t2 = 0;
+ uint32_t cpayload_t3 = 0;
uint32_t cme_list = 0;
for(qloop = 0; qloop < MAX_QUADS; qloop++)
@@ -309,9 +309,9 @@ p9_sgpe_stop_suspend_all_cmes()
{
for(cloop = 0; cloop < CORES_PER_EX; cloop++)
{
- cpayload_t2 = in32(OCB_OPIT2CN(((xloop << 1) + cloop)));
+ cpayload_t3 = in32(OCB_OPIT3CN(((xloop << 1) + cloop)));
- if (cpayload_t2 == 0x780)
+ if (cpayload_t3 == 0x780)
{
cme_list |= BIT32(xloop);
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 8128b59f..e5f19ce5 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
@@ -699,7 +699,9 @@ p9_sgpe_stop_entry()
#if !SKIP_L3_PURGE_ABORT
- if (in32(OCB_OISR1) & (BITS32(15, 2) | BIT32(19)))
+ if ((in32(OCB_OISR1) & (BITS32(15, 2) | BIT32(19))) &&
+ // Skip L3 Purge Abort check if in Block Wakeup mode
+ (!(G_sgpe_stop_record.group.quad[VECTOR_BLOCKX] & BIT32(qloop))))
{
PK_TRACE("Abort: interrupt detected");
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 875bcc12..59ecefbf 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
@@ -194,7 +194,7 @@ p9_sgpe_stop_suspend_db1_cme(uint32_t qloop, uint32_t msgid)
pig.fields.req_intr_payload = msgid >> 16;
pig.fields.req_intr_payload |= TYPE2_PAYLOAD_SUSPEND_ACK_MASK;
- pig.fields.req_intr_type = PIG_TYPE2;
+ pig.fields.req_intr_type = PIG_TYPE3;
GPE_PUTSCOM(GPE_SCOM_ADDR_CORE(PPM_PIG, cindex), pig.value);
}
}
@@ -450,7 +450,7 @@ p9_sgpe_pig_cpayload_parser(const uint32_t type)
}
// if not hardware pig and is an suspend ack pig
- if ((type == PIG_TYPE2) &&
+ if ((type == PIG_TYPE3) &&
((~cpayload) & TYPE2_PAYLOAD_HARDWARE_WAKEUP) &&
(cpayload & TYPE2_PAYLOAD_SUSPEND_ACK_MASK))
{
OpenPOWER on IntegriCloud