summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRahul Batra <rbatra@us.ibm.com>2018-01-22 16:11:56 -0600
committerhostboot <hostboot@us.ibm.com>2018-03-22 14:04:30 -0500
commite877c046104eedaa97e616f492a837b79884cbb4 (patch)
tree9948380b227983dfae9c8087183782c22201686f
parentfb7e7a302989bf55d9437c6252962f14315463b9 (diff)
downloadtalos-hcode-e877c046104eedaa97e616f492a837b79884cbb4.tar.gz
talos-hcode-e877c046104eedaa97e616f492a837b79884cbb4.zip
PGPE: WOF Fix Pack
Fixes Clip Update hang if (WofClip and Pmin) > Psafe(Phase1&2) Fix init of activeCores/reqQuads in PGPE WOF State(Phase1+STOP) Fixes WOF Phase 2 Enable PGPE Hang(wait on Ctrl Stop Updt ACK) Use DB3 for making High Priority Pstate Request(Phase 2) Key_Cronus_Test=PM_REGRESS Change-Id: I1f5c5c131004415d772584a47a6cdf2e91febea2 CQ: SW416205 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/52400 Tested-by: Cronus HW CI <cronushw-ci+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Michael S. Floyd <mfloyd@us.ibm.com> Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
-rw-r--r--import/chips/p9/common/pmlib/include/pstate_pgpe_cme_api.h27
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c35
2 files changed, 26 insertions, 36 deletions
diff --git a/import/chips/p9/common/pmlib/include/pstate_pgpe_cme_api.h b/import/chips/p9/common/pmlib/include/pstate_pgpe_cme_api.h
index b0785f57..87e49c9b 100644
--- a/import/chips/p9/common/pmlib/include/pstate_pgpe_cme_api.h
+++ b/import/chips/p9/common/pmlib/include/pstate_pgpe_cme_api.h
@@ -91,27 +91,26 @@ enum PMSR_DEFS
//
enum MESSAGE_ID_DB0
{
- MSGID_DB0_INVALID = 0,
- MSGID_DB0_RESERVED = 1,
- MSGID_DB0_VALID_START = 2, //This for error checking
- MSGID_DB0_GLOBAL_ACTUAL_BROADCAST = 2,
- MSGID_DB0_START_PSTATE_BROADCAST = 3,
- MSGID_DB0_STOP_PSTATE_BROADCAST = 4,
- MSGID_DB0_CLIP_BROADCAST = 5,
- MSGID_DB0_PMSR_UPDT = 6,
- MSGID_DB0_VALID_END = 6 //This for error checking
+ MSGID_DB0_VALID_START = 0, //This is for error checking
+ MSGID_DB0_DB3_GLOBAL_ACTUAL_BROADCAST = 0,
+ MSGID_DB0_RESERVED = 1,
+ MSGID_DB0_GLOBAL_ACTUAL_BROADCAST = 2,
+ MSGID_DB0_START_PSTATE_BROADCAST = 3,
+ MSGID_DB0_STOP_PSTATE_BROADCAST = 4,
+ MSGID_DB0_CLIP_BROADCAST = 5,
+ MSGID_DB0_PMSR_UPDT = 6,
+ MSGID_DB0_VALID_END = 6 //This is for error checking
};
enum MESSAGE_ID_DB3
{
- MSGID_DB3_RESERVED = 0,
- MSGID_DB3_VALID_START = 1, //This for error checking
- MSGID_DB3_PSTATE_START = 1,
- MSGID_DB3_PSTATE_END = 0xF0,
+ MSGID_DB3_INVALID = 0,
+ MSGID_DB3_VALID_START = 1, //This is for error checking
+ MSGID_DB3_HIGH_PRIORITY_PSTATE = 1,
MSGID_DB3_IMMEDIATE_HALT = 0xF1,
MSGID_DB3_RESTORE_STATE_AND_HALT = 0xF2,
MSGID_DB3_REPLAY_DB0 = 0xF3,
- MSGID_DB3_VALID_END = 0xF3 //This for error checking
+ MSGID_DB3_VALID_END = 0xF3 //This is for error checking
};
enum MESSAGEID_PCB_TYPE4_ACK_TYPES
diff --git a/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c b/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c
index dabc0b3c..37e61b83 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c
@@ -125,10 +125,9 @@ void p9_cme_pstate_db3_handler(void* arg, PkIrqId irq)
CME_GETSCOM(CPPM_CMEDB3, CME_MASK_C1, db3.value);
}
- if((db3.fields.cme_message_numbern >= MSGID_DB3_PSTATE_START) &&
- (db3.fields.cme_message_numbern <= MSGID_DB3_PSTATE_END))
+ if(db3.fields.cme_message_numbern >= MSGID_DB3_HIGH_PRIORITY_PSTATE)
{
- p9_cme_pstate_db3_handler_high_priority_pstate(db3.fields.cme_message_numbern);
+ p9_cme_pstate_db3_handler_high_priority_pstate();
}
else if (db3.fields.cme_message_numbern == MSGID_DB3_REPLAY_DB0)
{
@@ -155,38 +154,29 @@ void p9_cme_pstate_db3_handler_replay_db0()
{
p9_cme_pstate_process_db0();
}
- //On Sibling poll on intercme_msg "LOCK_SIBLING", then
+ //On Sibling, poll on intercme_msg "LOCK_SIBLING", then
//poll on intercme_in0/1 direct msg.
else
{
- p9_cme_pstate_sibling_lock_and_intercme_protocol(1, 1, 0);
+ p9_cme_pstate_sibling_lock_and_intercme_protocol(1);
}
}
//
-//Doorbell3 Handler Replay DB0
+//Doorbell3 Handler High Priority Pstate
//
-void p9_cme_pstate_db3_handler_high_priority_pstate(uint32_t pstate)
+void p9_cme_pstate_db3_handler_high_priority_pstate()
{
- //QuadManager
- G_dbData.fields.cme_message_number0 = MSGID_DB0_START_PSTATE_BROADCAST;
- G_dbData.value |= (uint64_t)pstate;
- G_dbData.value |= ((uint64_t)pstate << 8);
- G_dbData.value |= ((uint64_t)pstate << 16);
- G_dbData.value |= ((uint64_t)pstate << 24);
- G_dbData.value |= ((uint64_t)pstate << 32);
- G_dbData.value |= ((uint64_t)pstate << 40);
- G_dbData.value |= ((uint64_t)pstate << 48);
-
+ //Quad Manager
if(G_cme_pstate_record.qmFlag)
{
- p9_cme_pstate_db0_glb_bcast();
+ p9_cme_pstate_process_db0();
}
- //On Sibling poll on intercme_msg "LOCK_SIBLING", then
+ //On Sibling poll, on intercme_msg "LOCK_SIBLING", then
//poll on intercme_in0/1 direct msg.
else
{
- p9_cme_pstate_sibling_lock_and_intercme_protocol(1, 0, G_dbData.value);
+ p9_cme_pstate_sibling_lock_and_intercme_protocol(1);
}
}
@@ -528,7 +518,8 @@ void p9_cme_pstate_process_db0()
p9_cme_pstate_db0_start();
}
//Global Actual Broadcast and Pstates enabled
- else if(G_dbData.fields.cme_message_number0 == MSGID_DB0_GLOBAL_ACTUAL_BROADCAST)
+ else if((G_dbData.fields.cme_message_number0 == MSGID_DB0_GLOBAL_ACTUAL_BROADCAST) ||
+ (G_dbData.fields.cme_message_number0 == MSGID_DB0_DB3_GLOBAL_ACTUAL_BROADCAST))
{
//Process Global Bcast only if Pstates are enabled.
//Otherwise, ignore. The reason is PGPE multicasts Global Bcast, and doorbell0
@@ -664,7 +655,7 @@ inline void p9_cme_pstate_register()
while(msgCnt != 3)
{
PK_TRACE_INF("DB_TH: Sib Register MsgCnt=0x%xt", msgCnt);
- p9_cme_pstate_sibling_lock_and_intercme_protocol(1, 1, 0);
+ p9_cme_pstate_sibling_lock_and_intercme_protocol(1);
msgCnt++;
}
}
OpenPOWER on IntegriCloud