summaryrefslogtreecommitdiffstats
path: root/import/chips/p9/procedures/ppe_closed/cme/pstate_cme
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:07:26 -0500
commit06545ad9c2d178b1deed0ae99d605c6ea8d9d397 (patch)
treea06c174da7a5ec8c3195fe1a397f85425a682175 /import/chips/p9/procedures/ppe_closed/cme/pstate_cme
parent14700adcfce35ba61a20cc2b7a36bdcbbe76d26c (diff)
downloadtalos-hcode-06545ad9c2d178b1deed0ae99d605c6ea8d9d397.tar.gz
talos-hcode-06545ad9c2d178b1deed0ae99d605c6ea8d9d397.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: I92a7e99f846237f0c1b8c7671fa30f6373c81f28 Original-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>
Diffstat (limited to 'import/chips/p9/procedures/ppe_closed/cme/pstate_cme')
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_intercme.c58
1 files changed, 18 insertions, 40 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_intercme.c b/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_intercme.c
index 958ca201..2e08c55f 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_intercme.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_intercme.c
@@ -51,20 +51,7 @@ void p9_cme_pstate_intercme_in0_irq_handler(void* arg, PkIrqId irq)
{
PkMachineContext ctx __attribute__((unused));
- //Read DB0 from first good core since PGPE
- //writes same value for both cores
- uint64_t dbData;
-
- if (in32(CME_LCL_FLAGS) & (BIT32(CME_FLAGS_CORE0_GOOD)))
- {
- CME_GETSCOM(CPPM_CMEDB0, CME_MASK_C0, dbData);
- }
- else
- {
- CME_GETSCOM(CPPM_CMEDB0, CME_MASK_C1, dbData);
- }
-
- p9_cme_pstate_process_db0_sibling(dbData);
+ p9_cme_pstate_process_db0_sibling();
pk_irq_vec_restore(&ctx);
}
@@ -73,16 +60,15 @@ void p9_cme_pstate_intercme_msg_handler(void* arg, PkIrqId irq)
{
PkMachineContext ctx __attribute__((unused));
- p9_cme_pstate_sibling_lock_and_intercme_protocol(0, 1, 0);
+ p9_cme_pstate_sibling_lock_and_intercme_protocol(0);
pk_irq_vec_restore(&ctx);
}
-void p9_cme_pstate_sibling_lock_and_intercme_protocol(uint32_t process_intercme_in0, uint32_t readDB0, uint64_t dbData)
+void p9_cme_pstate_sibling_lock_and_intercme_protocol(uint32_t process_intercme_in0)
{
PK_TRACE("SIBL: Enter\n");
uint32_t msg;
- uint64_t data;
intercme_msg_recv(&msg, IMT_LOCK_SIBLING);
// Block on the intercme0/intercme1 interrupt
@@ -100,36 +86,27 @@ void p9_cme_pstate_sibling_lock_and_intercme_protocol(uint32_t process_intercme_
//If INTERCME_DIRECT_IN0, then process DB0 data
if((in32(CME_LCL_EISR) & BIT32(7)) && (process_intercme_in0 == 1))
{
- if(readDB0)
- {
- //Read DB0 from first good core since PGPE
- //writes same value for both cores
- if (in32(CME_LCL_FLAGS) & (BIT32(CME_FLAGS_CORE0_GOOD)))
- {
- CME_GETSCOM(CPPM_CMEDB0, CME_MASK_C0, data);
- }
- else
- {
- CME_GETSCOM(CPPM_CMEDB0, CME_MASK_C1, data);
- }
- }
- else
- {
- data = dbData;
- }
-
- p9_cme_pstate_process_db0_sibling(data);
+ p9_cme_pstate_process_db0_sibling();
}
PK_TRACE("SIBL: Enter\n");
}
-void p9_cme_pstate_process_db0_sibling(uint64_t data)
+void p9_cme_pstate_process_db0_sibling()
{
cppm_cmedb0_t dbData;
- dbData.value = data;
uint32_t dbQuadInfo, dbBit8_15;
- //uint32_t cme_flags = in32(CME_LCL_FLAGS);
+
+ //Read DB0 from first good core since PGPE
+ //writes same value for both cores
+ if (in32(CME_LCL_FLAGS) & (BIT32(CME_FLAGS_CORE0_GOOD)))
+ {
+ CME_GETSCOM(CPPM_CMEDB0, CME_MASK_C0, dbData.value);
+ }
+ else
+ {
+ CME_GETSCOM(CPPM_CMEDB0, CME_MASK_C1, dbData.value);
+ }
PK_TRACE("INTER0: Enter\n");
@@ -154,7 +131,8 @@ void p9_cme_pstate_process_db0_sibling(uint64_t data)
//Clear Core GPMMR RESET_STATE_INDICATOR bit to show pstates have started
CME_PUTSCOM(PPM_GPMMR_CLR, G_cme_record.core_enabled, BIT64(15));
}
- else if(dbData.fields.cme_message_number0 == MSGID_DB0_GLOBAL_ACTUAL_BROADCAST)
+ else if((dbData.fields.cme_message_number0 == MSGID_DB0_GLOBAL_ACTUAL_BROADCAST) ||
+ (dbData.fields.cme_message_number0 == MSGID_DB0_DB3_GLOBAL_ACTUAL_BROADCAST))
{
PK_TRACE("INTER0: DB0 GlbBcast");
G_cme_pstate_record.quadPstate = dbQuadInfo;
OpenPOWER on IntegriCloud