diff options
| author | Yue Du <daviddu@us.ibm.com> | 2017-05-17 14:24:01 -0500 |
|---|---|---|
| committer | hostboot <hostboot@us.ibm.com> | 2018-08-22 17:54:55 -0500 |
| commit | e1b9fa3165f7bebfd97856ef4b505909a32c6286 (patch) | |
| tree | 67f8b04a17382f54123b56067dcd0951e54856b0 /import | |
| parent | a7817cd22ca3726c21cc7b25ba60469346be710e (diff) | |
| download | talos-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-x | import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c | 5 | ||||
| -rw-r--r-- | import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c | 50 |
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))) { |

