summaryrefslogtreecommitdiffstats
path: root/import
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2017-05-17 14:24:01 -0500
committerhostboot <hostboot@us.ibm.com>2018-08-22 17:54:55 -0500
commite1b9fa3165f7bebfd97856ef4b505909a32c6286 (patch)
tree67f8b04a17382f54123b56067dcd0951e54856b0 /import
parenta7817cd22ca3726c21cc7b25ba60469346be710e (diff)
downloadtalos-hcode-e1b9fa3165f7bebfd97856ef4b505909a32c6286.tar.gz
talos-hcode-e1b9fa3165f7bebfd97856ef4b505909a32c6286.zip
STOP: Move Stop 8 code from CME to SGPE for CME space savings
Change-Id: I98d46b4bd4e5271da867e511f91de9accc908929 Original-Change-Id: I8ef3a2bb61d562462a7594275ea219597d7e519c Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40667 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Juan R. Medina <jrmedina@us.ibm.com> Reviewed-by: Brian T. Vanderpool <vanderp@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
Diffstat (limited to 'import')
-rwxr-xr-ximport/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c5
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c50
2 files changed, 54 insertions, 1 deletions
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 9f5ddd62..de7f10b6 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
@@ -1146,6 +1146,9 @@ p9_cme_stop_entry()
PK_TRACE("+++++ +++++ STOP LEVEL 5-7 ENTRY +++++ +++++");
//----------------------------------------------------------------------
+// NDD1 workaround to save cme image size
+#if NIMBUS_DD_LEVEL != 1
+
if ((G_cme_stop_record.req_level[0] >= STOP_LEVEL_8) &&
(G_cme_stop_record.req_level[1] >= STOP_LEVEL_8))
{
@@ -1229,6 +1232,8 @@ p9_cme_stop_entry()
}
}
+#endif
+
//=============================
MARK_TAG(SE_SGPE_HANDOFF, core)
//=============================
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 1b095949..218dfb15 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
@@ -342,6 +342,54 @@ p9_sgpe_stop_entry()
scom_data.value);
}
+// NDD1 workaround to save cme image size
+#if NIMBUS_DD_LEVEL == 1
+
+ PK_TRACE("Assert L2+NCU purge and NCU tlbie quiesce via SICR[18,21,22]");
+ // insert tlbie quiesce before ncu purge to avoid window condition
+ // of ncu traffic still happening when purging starts
+ // Note: chtm purge and drop tlbie quiesce will be done in SGPE
+
+ if (ex & FST_EX_IN_QUAD)
+ {
+ GPE_PUTSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_SICR_OR, qloop, 0), (BIT64(18) | BIT64(21)));
+ GPE_PUTSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_SICR_OR, qloop, 0), BIT64(22));
+ }
+
+ if (ex & SND_EX_IN_QUAD)
+ {
+ GPE_PUTSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_SICR_OR, qloop, 1), (BIT64(18) | BIT64(21)));
+ GPE_PUTSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_SICR_OR, qloop, 1), BIT64(22));
+ }
+
+ PK_TRACE("Poll for purged done via EISR[22,23] then Drop L2+NCU purges via SICR[18,22]");
+
+ if (ex & FST_EX_IN_QUAD)
+ {
+ do
+ {
+ GPE_GETSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_EISR, qloop, 0), scom_data.value);
+ }
+ while((scom_data.words.upper & BITS32(22, 2)) != BITS32(22, 2));
+
+ GPE_PUTSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_SICR_CLR, qloop, 0), (BIT64(18) | BIT64(22)));
+ }
+
+ if (ex & SND_EX_IN_QUAD)
+ {
+ do
+ {
+ GPE_GETSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_EISR, qloop, 1), scom_data.value);
+ }
+ while((scom_data.words.upper & BITS32(22, 2)) != BITS32(22, 2));
+
+ GPE_PUTSCOM(GPE_SCOM_ADDR_CME(CME_SCOM_SICR_CLR, qloop, 1), (BIT64(18) | BIT64(22)));
+ }
+
+ PK_TRACE_INF("NDD1: L2 and NCU Purged by SGPE");
+
+#endif
+
//====================================================
MARK_TAG(SE_STOP_L2_CLKS, ((ex << 6) | (32 >> qloop)))
//====================================================
@@ -359,7 +407,7 @@ p9_sgpe_stop_entry()
PPE_WAIT_CORE_CYCLES(256)
PK_TRACE("Assert partial bad L2/L3 and stopping/stoped l2 pscom masks via RING_FENCE_MASK_LATCH");
- scom_data.words.lower = 0;
+ scom_data.value = 0;
if (!(G_sgpe_stop_record.group.ex_l[VECTOR_CONFIG] & BIT32(qloop)))
{
OpenPOWER on IntegriCloud