summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRahul Batra <rbatra@us.ibm.com>2017-08-04 12:06:12 -0500
committerhostboot <hostboot@us.ibm.com>2018-08-22 17:55:14 -0500
commitb87f07ac673aa06c620d6639bfe2b174b30bb2c5 (patch)
treeea168cc299682f784ac042c21e58da56eadc3761
parent5663ad1a0a6e74eff407fae3e9cd4ccb9d7138aa (diff)
downloadtalos-hcode-b87f07ac673aa06c620d6639bfe2b174b30bb2c5.tar.gz
talos-hcode-b87f07ac673aa06c620d6639bfe2b174b30bb2c5.zip
PM: Inter-PPM controls enablement and VDMCFG
-Splits up code b/w SGPE and PGPE for interppm controls -PGPE code to write VDMCFG register Change-Id: I979e812e2a9d023d6dc47398d41b8206eba76d16 Original-Change-Id: If263d1e5ce0f892bba9b6d28b882db01058dd404 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44253 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: YUE DU <daviddu@us.ibm.com> Reviewed-by: BRIAN D. VICTOR <brian.d.victor1@ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c89
1 files changed, 41 insertions, 48 deletions
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c
index 9a13760e..7fc92170 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c
@@ -232,41 +232,6 @@ p9_sgpe_stop_entry()
-#if !SKIP_IPC
-
- // Upon entry into STOP 11, right before stopping the clocks to the cache chiplet
- // the SGPE must communicate to the PGPE to
- // allow it to know which CME Quad Managers will no longer be active; and
- // if WOF is enabled,
- // to perform VRFT calculations to take advantage of the core/cache power.
- // If Pstates are disabled, SGPE does nothing.
- // If Pstates are enabled, the SGPE:
- // 1. sends Suspend Pstates IPC to PGPE and waits for the response IPC .
- // PGPE completes any current Pstate operations and responses to the Suspend Pstates IPC.
- // 2. stops the clocks (and optionally finishes the entry)
- // 3. sends Update Active Quads IPC to PGPE and waits for the response IPC.
- // PGPE, as a side effect of processing the Update Active Quads IPC,
- // will resume Pstate protocol operations.
- // 4. optionally finishes the entry (if not done above)
-
- if ((in32(OCB_OCCS2) & BIT32(PGPE_ACTIVE)) &&
- G_sgpe_stop_record.group.quad[VECTOR_ENTRY]) // entry into STOP11
- {
- //===============================
- MARK_TRAP(SE_STOP_SUSPEND_PSTATE)
- //===============================
-
- ipc_quad_entry = 1;
-
- p9_sgpe_ipc_pgpe_update_active_quads(UPDATE_ACTIVE_QUADS_TYPE_ENTRY,
- UPDATE_ACTIVE_QUADS_ENTRY_TYPE_NOTIFY);
-
- // poll for ack is located at SE_WAIT_PGPE_SUSPEND mark below
- // to parallel latency with pgpe processing
- }
-
-#endif
-
// NDD1 workaround to save cme image size
@@ -816,6 +781,44 @@ p9_sgpe_stop_entry()
PK_TRACE("+++++ +++++ QUAD STOP ENTRY [LEVEL 11-15, CONTINUE] +++++ +++++");
// ------------------------------------------------------------------------------
+#if !SKIP_IPC
+
+ // Upon entry into STOP 11, right before stopping the clocks to the cache chiplet
+ // the SGPE must communicate to the PGPE to
+ // allow it to know which CME Quad Managers will no longer be active; and
+ // if WOF is enabled,
+ // to perform VRFT calculations to take advantage of the core/cache power.
+ // If Pstates are disabled, SGPE does nothing.
+ // If Pstates are enabled, the SGPE:
+ // 1. sends Suspend Pstates IPC to PGPE and waits for the response IPC .
+ // PGPE completes any current Pstate operations and responses to the Suspend Pstates IPC.
+ // 2. stops the clocks (and optionally finishes the entry)
+ // 3. sends Update Active Quads IPC to PGPE and waits for the response IPC.
+ // PGPE, as a side effect of processing the Update Active Quads IPC,
+ // will resume Pstate protocol operations.
+ // 4. optionally finishes the entry (if not done above)
+
+ if ((!ipc_quad_entry) &&
+ (in32(OCB_OCCS2) & BIT32(PGPE_ACTIVE)) &&
+ G_sgpe_stop_record.group.quad[VECTOR_ENTRY]) // entry into STOP11
+ {
+ //============================
+ MARK_TRAP(SE_PGPE_QUAD_NOTIFY)
+ //============================
+
+ p9_sgpe_ipc_pgpe_update_active_quads(UPDATE_ACTIVE_QUADS_TYPE_ENTRY,
+ UPDATE_ACTIVE_QUADS_ENTRY_TYPE_NOTIFY);
+
+ //===============================================
+ MARK_TAG(SE_WAIT_PGPE_QUAD_NOTIFY, (32 >> qloop))
+ //===============================================
+
+ p9_sgpe_ipc_pgpe_update_active_quads_poll_ack();
+ ipc_quad_entry = 1;
+ }
+
+#endif
+
//==================================
MARK_TAG(SE_PURGE_PB, (32 >> qloop))
//==================================
@@ -877,16 +880,6 @@ p9_sgpe_stop_entry()
PK_TRACE_INF("SE.11C: PowerBus Purged");
- //===========================================
- MARK_TAG(SE_WAIT_PGPE_SUSPEND, (32 >> qloop))
- //===========================================
-
- if (ipc_quad_entry)
- {
- p9_sgpe_ipc_pgpe_update_active_quads_poll_ack();
- ipc_quad_entry = 0;
- }
-
//======================================
MARK_TAG(SE_QUIESCE_QUAD, (32 >> qloop))
//======================================
@@ -946,9 +939,9 @@ p9_sgpe_stop_entry()
PK_TRACE("Checking status of Local Checkstop");
GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_LOCAL_XSTOP_ERR, qloop), local_xstop);
- PK_TRACE("Drop CME_INTERPPM_IVRM/ACLK/VDATA/DPLL_ENABLE QPMMR[20,22,24,26]");
- GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(QPPM_QPMMR_CLR, qloop), BIT64(20) | BIT64(22) | BIT64(24) | BIT64(26));
-
+ // PGPE is in charge of bit26: DPLL_ENABLE
+ PK_TRACE("Drop CME_INTERPPM_IVRM/ACLK/VDATA_ENABLE via QPMMR[20,22,24]");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(QPPM_QPMMR_CLR, qloop), BIT64(20) | BIT64(22) | BIT64(24));
if(pSgpeImgHdr->g_sgpe_reserve_flags & SGPE_VDM_ENABLE_BIT_POS)
{
OpenPOWER on IntegriCloud