summaryrefslogtreecommitdiffstats
path: root/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c
diff options
context:
space:
mode:
authorRahul Batra <rbatra@us.ibm.com>2019-03-25 13:24:31 -0400
committerhostboot <hostboot@us.ibm.com>2019-04-25 11:07:07 -0500
commit793c77ef0f8bf646858ee53ce6d379c1c45aebdc (patch)
treeee7da1a90e0f0cfc50424afc145852228aa3ba88 /import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_thread_db.c
parent2f40a0bc37ee4627f1748059fdb3167aa7ee7f29 (diff)
downloadtalos-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.c71
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
OpenPOWER on IntegriCloud