diff options
| -rw-r--r-- | import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_pstate.c | 8 | ||||
| -rwxr-xr-x | import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_pstate.c b/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_pstate.c index 6af4b250..8d15ecdc 100644 --- a/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_pstate.c +++ b/import/chips/p9/procedures/ppe_closed/cme/pstate_cme/p9_cme_pstate.c @@ -353,14 +353,16 @@ void p9_cme_analog_control(uint32_t core_mask, ANALOG_CONTROL enable) if(enable) { PK_TRACE_INF("vdm | enabling vdms"); - // Clear Disable (Poweron is set earlier in Exit flow) + // Clear Disable + // (Poweron is set earlier in Stop4 Exit flow + // due to delay required between poweron and enable) CME_PUTSCOM(PPM_VDMCR_CLR, core_mask, BIT64(1)); } else { PK_TRACE_INF("vdm | disabling vdms"); - // Clear Poweron and set Disable in one operation - CME_PUTSCOM(PPM_VDMCR, core_mask, BIT64(1)); + // Set Disable (Poweron is cleared in Stop4 Entry) + CME_PUTSCOM(PPM_VDMCR_OR, core_mask, BIT64(1)); } } diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c index d9023556..7725f552 100755 --- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c +++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c @@ -1124,6 +1124,12 @@ p9_cme_stop_entry() } else { + if(in32(CME_LCL_FLAGS) & BIT32(CME_FLAGS_VDM_OPERABLE)) + { + PK_TRACE_INF("Clear Poweron bit in VDMCR"); + CME_PUTSCOM(PPM_VDMCR_CLR, core, BIT64(0)); + } + PK_TRACE("Drop vdd_pfet_val/sel_override/regulation_finger_en via PFCS[4,5,8]"); // vdd_pfet_val/sel_override = 0 (disbaled) // vdd_pfet_regulation_finger_en = 0 (controled by FSM) |

