diff options
author | Rahul Batra <rbatra@us.ibm.com> | 2018-01-22 16:11:56 -0600 |
---|---|---|
committer | hostboot <hostboot@us.ibm.com> | 2018-03-22 14:07:26 -0500 |
commit | 06545ad9c2d178b1deed0ae99d605c6ea8d9d397 (patch) | |
tree | a06c174da7a5ec8c3195fe1a397f85425a682175 /import/chips/p9/procedures/ppe_closed/cme/pstate_cme | |
parent | 14700adcfce35ba61a20cc2b7a36bdcbbe76d26c (diff) | |
download | talos-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.c | 58 |
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; |