diff options
author | Rahul Batra <rbatra@us.ibm.com> | 2019-03-25 13:24:31 -0400 |
---|---|---|
committer | hostboot <hostboot@us.ibm.com> | 2019-04-25 11:07:07 -0500 |
commit | 793c77ef0f8bf646858ee53ce6d379c1c45aebdc (patch) | |
tree | ee7da1a90e0f0cfc50424afc145852228aa3ba88 /import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c | |
parent | 2f40a0bc37ee4627f1748059fdb3167aa7ee7f29 (diff) | |
download | talos-hcode-793c77ef0f8bf646858ee53ce6d379c1c45aebdc.tar.gz talos-hcode-793c77ef0f8bf646858ee53ce6d379c1c45aebdc.zip |
PM: Fix Clip Update Timeout
Key_Cronus_Test=PM_REGRESS
Change-Id: Ia943cdd3bb646104bfd686356cd3f23bc5876a7d
CQ: SW452077
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/74964
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: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com>
Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Diffstat (limited to 'import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c')
-rw-r--r-- | import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c | 71 |
1 files changed, 70 insertions, 1 deletions
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 4038626b..72ba30ef 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 @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HCODE Project */ /* */ -/* COPYRIGHT 2016,2018 */ +/* COPYRIGHT 2016,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -297,6 +297,75 @@ void p9_cme_pstate_db3_handler(void) } } + else if (db3.fields.cme_message_numbern == MSGID_DB3_CLIP_BROADCAST) + { + PK_TRACE_INF("PSTATE: DB3 Clip Enter"); + + uint32_t dbQuadInfo, dbBit8_15; + cppm_cmedb0_t dbData; + CME_GETSCOM(CPPM_CMEDB0, G_cme_pstate_record.firstGoodCoreMask, dbData.value); + dbBit8_15 = (dbData.value & BITS64(8, 8)) >> SHIFT64(15); + dbQuadInfo = (dbData.value >> (in32(G_CME_LCL_SRTCH0) & + (BITS32(CME_SCRATCH_LOCAL_PSTATE_IDX_START, CME_SCRATCH_LOCAL_PSTATE_IDX_LENGTH) + ))) & 0xFF; + + //Quad Manager + if(G_cme_pstate_record.qmFlag) + { + //Sync up with sibling CME + p9_cme_pstate_notify_sib(INTERCME_DIRECT_IN2); + + if (dbBit8_15 == DB0_CLIP_BCAST_TYPE_PMIN) + { + G_cme_pstate_record.pmin = dbQuadInfo; + } + else + { + G_cme_pstate_record.pmax = dbQuadInfo; + } + + PK_TRACE_INF("PSTATE: Pmin=0x%x,Pmax=0x%x", G_cme_pstate_record.pmin, G_cme_pstate_record.pmax); + + + p9_cme_pstate_pmsr_updt(); + + //Sync up with the sibling CME before ACKing back to PGPE + p9_cme_pstate_notify_sib(INTERCME_DIRECT_IN2); //Notify sibling + + //Send type4(ack doorbell) + send_ack_to_pgpe(MSGID_PCB_TYPE4_ACK_PSTATE_PROTO_ACK); + + } + //On Sibling, poll on intercme_in2 direct msg. + else + { + //Wait to receive a notify from Quad Manager + //and then ACK back to quad manager + while(!(in32_sh(CME_LCL_EISR) & BIT64SH(39))); + + intercme_direct(INTERCME_DIRECT_IN2, INTERCME_DIRECT_ACK, 0); + + if (dbBit8_15 == DB0_CLIP_BCAST_TYPE_PMIN) + { + G_cme_pstate_record.pmin = dbQuadInfo; + } + else + { + G_cme_pstate_record.pmax = dbQuadInfo; + } + + p9_cme_pstate_pmsr_updt(); + + //Wait to receive a notify from Quad Manager + //and then ACK back to quad manager + while(!(in32_sh(CME_LCL_EISR) & BIT64SH(39))); + + intercme_direct(INTERCME_DIRECT_IN2, INTERCME_DIRECT_ACK, 0); + } + + PK_TRACE_INF("PSTATE: DB3 Clip Exit"); + } + else { //\todo Will be done as part of 41947 |