diff options
| author | Yue Du <daviddu@us.ibm.com> | 2016-01-25 02:48:28 -0600 |
|---|---|---|
| committer | hostboot <hostboot@us.ibm.com> | 2018-08-22 17:54:03 -0500 |
| commit | 5f2e6f8d81d69ae73bf922ca5dc9fd8e618df79d (patch) | |
| tree | ddd96c90af58c91b5f9a564e778b603013c4e19d | |
| parent | 64616b74284eb608ad1173716192fdfdf8a2352e (diff) | |
| download | talos-hcode-5f2e6f8d81d69ae73bf922ca5dc9fd8e618df79d.tar.gz talos-hcode-5f2e6f8d81d69ae73bf922ca5dc9fd8e618df79d.zip | |
CME/SGPE: STOP11 CME/SGPE Images Snapshot
Change-Id: I551f77be3f1b77191b6ef9bdb2233b7ea52b8378
Original-Change-Id: I13d6c747e7b4b0b19e317ba7a5b74f852dee6ddf
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/23571
Tested-by: Jenkins Server
Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
3 files changed, 52 insertions, 17 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 bb0c164f..b3b55b7d 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 @@ -234,6 +234,7 @@ p9_cme_stop_entry() PK_TRACE("SE2.j"); // Raise Core Chiplet Fence + CME_PUTSCOM(C_CPLT_CTRL0_OR, core, BIT64(2)); CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(18)); PK_TRACE("SE2.k"); @@ -280,10 +281,14 @@ p9_cme_stop_entry() PK_TRACE("SE2.p"); // Switch glsmux to refclk to save clock grid power - CME_PUTSCOM(C_PPM_CGCR, core, BIT64(3)); + CME_PUTSCOM(C_PPM_CGCR, core, 0); // Assert PCB Fence - CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(25)); + //CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(25)); + // Assert Vital Fence + CME_PUTSCOM(C_CPLT_CTRL1_OR, core, BIT64(3)); + // Assert Regional Fences + CME_PUTSCOM(C_CPLT_CTRL1_OR, core, 0xFFFF700000000000); PK_TRACE("SE2.q"); // Update Stop History: In Core Stop Level 2 @@ -500,11 +505,14 @@ p9_cme_stop_entry() MARK_TAG(SE_POWER_OFF_CORE, core) //=============================== -#if !STOP_PRIME - // Assert Cores Electrical Fences + // DD: Assert Cores Vital Thold/PCB Fence/Electrical Fence PK_TRACE("SE4.a"); + CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(25)); CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(26)); + CME_PUTSCOM(CPPM_NC0INDIR_OR, core, BIT64(16)); +#if !STOP_PRIME +#if !EPM_P9_TUNING // Make sure we are not forcing PFET for VDD off // vdd_pfet_force_state == 00 (Nop) PK_TRACE("SE4.b"); @@ -515,6 +523,8 @@ p9_cme_stop_entry() return CME_STOP_ENTRY_VDD_PFET_NOT_IDLE; } +#endif + // Prepare PFET Controls // vdd_pfet_val/sel_override = 0 (disbaled) // vdd_pfet_regulation_finger_en = 0 (controled by FSM) @@ -546,7 +556,6 @@ p9_cme_stop_entry() while(!(scom_data & BIT64(46))); #endif - // Turn Off Force Voff // vdd_pfet_force_state = 00 (Nop) PK_TRACE("SE4.g"); @@ -695,7 +704,7 @@ p9_cme_stop_entry() //=========================== do { -#if !SKIP_ABORT +#if !SKIP_L2_PURGE_ABORT if(in32(CME_LCL_EINR) & BITS32(12, 6)) { diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop.h b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop.h index 359f8fe9..499e7b4d 100644 --- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop.h +++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop.h @@ -49,6 +49,7 @@ #include "p9_stop_common.h" +#define EQ_SYNC_CONFIG 0x10030000 #define EQ_OPCG_ALIGN 0x10030001 #define EQ_SCAN_REGION_TYPE 0x10030005 #define EQ_CLK_REGION 0x10030006 @@ -57,11 +58,14 @@ #define EQ_BIST 0x100F000B #define EQ_NET_CTRL0_WAND 0x100F0041 #define EQ_NET_CTRL0_WOR 0x100F0042 +#define EQ_NET_CTRL1_WAND 0x100F0045 +#define EQ_NET_CTRL1_WOR 0x100F0046 #define EQ_CPLT_CTRL0_OR 0x10000010 #define EQ_CPLT_CTRL0_CLEAR 0x10000020 #define EQ_CPLT_CTRL1_OR 0x10000011 #define EQ_CPLT_CTRL1_CLEAR 0x10000021 +#define EQ_CPLT_STAT0 0x10000100 #define EQ_QPPM_DPLL_CTRL_CLEAR 0x100F0153 #define EQ_QPPM_DPLL_CTRL_OR 0x100F0154 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 875c33be..fce32aff 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 @@ -97,6 +97,9 @@ p9_sgpe_stop_entry() //======================== PK_TRACE("SE8.a"); + // Assert L2 Regional Fences + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL1_OR, qloop), + ((uint64_t)ex << SHIFT64(9))); // Disable L2 Snoop(quiesce L2-L3 interface, what about NCU?) GPE_PUTSCOM(GPE_SCOM_ADDR_EX(EX_PM_L2_RCMD_DIS_REG, qloop, ex), BIT64(0)); PPE_WAIT_CORE_CYCLES(loop, 256) @@ -273,6 +276,7 @@ p9_sgpe_stop_entry() if (in32(OCB_OPIT2CN(((qloop << 2) + cloop))) & TYPE2_PAYLOAD_STOP_EVENT) { + MARK_TRAP(SE_PURGE_L3_ABORT) // Assert Purge L3 Abort GPE_PUTSCOM(GPE_SCOM_ADDR_EX(EX_PM_PURGE_REG, qloop, ex), BIT64(2)); @@ -285,6 +289,8 @@ p9_sgpe_stop_entry() } while(scom_data & (BIT64(0) | BIT64(2))); + MARK_TRAP(SE_PURGE_L3_ABORT_DONE) + // Deassert LCO Disable GPE_PUTSCOM(GPE_SCOM_ADDR_EX(EX_PM_LCO_DIS_REG, qloop, ex), 0); @@ -369,6 +375,8 @@ p9_sgpe_stop_entry() // todo: check NCU_SATUS_REG[0:3] for all zeros PK_TRACE("SE11.k"); + // Assert flush_inhibit + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL0_OR, qloop), BIT64(2)); // Raise Cache Logical fence GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(18)); @@ -379,7 +387,8 @@ p9_sgpe_stop_entry() PK_TRACE("SE11.m"); // Stop Cache Clocks - GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CLK_REGION, qloop), 0x9F3E00000000E000); + //GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CLK_REGION, qloop), 0x9F3E00000000E000); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CLK_REGION, qloop), 0x9E3E00000000E000); PK_TRACE("SE11.n"); @@ -388,7 +397,9 @@ p9_sgpe_stop_entry() { GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_CLOCK_STAT_SL, qloop), scom_data); } - while((scom_data & BITS64(4, 10)) != BITS64(4, 10)); + + //while((scom_data & (BITS64(4, 4) | BITS64(10, 4))) != (BITS64(4, 4) | BITS64(10, 4))); + while((scom_data & (BITS64(4, 3) | BITS64(10, 5))) != (BITS64(4, 3) | BITS64(10, 5))); // MF: verify compiler generate single rlwmni // MF: delay may be needed for stage latch to propagate thold @@ -397,7 +408,12 @@ p9_sgpe_stop_entry() PK_TRACE("SE11.o"); // Switch glsmux to refclk to save clock grid power - GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_PPM_CGCR, qloop), BIT64(3)); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_PPM_CGCR, qloop), 0); + // Assert Vital Fence + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL1_OR, qloop), BIT64(3)); + // Raise Partial Good Fences + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL1_OR, qloop), + 0xFFFF700000000000); // Update QSSR: quad_stopped out32(OCB_QSSR_OR, BIT32(qloop + 14)); @@ -414,22 +430,27 @@ p9_sgpe_stop_entry() MARK_TAG(SE_POWER_OFF_CACHE, (32 >> qloop)) //======================================== - // Assert Cache Electrical Fence + // DD: Assert Cache Vital Thold/PCB Fence/Electrical Fence PK_TRACE("SE11.q"); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(25)); GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(26)); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(16)); -#if !STOP_PRIME // L3 edram shutdown PK_TRACE("SE11.r"); - GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(7)); - GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(6)); - GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(5)); - GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(4)); + /* + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(7)); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(6)); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(5)); + GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(4)); + */ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(3)); GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(2)); GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(1)); GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(0)); +#if !STOP_PRIME +#if !EPM_P9_TUNING // Make sure we are not forcing PFET for VDD or VCS off // vdd_pfet_force_state == 00 (Nop) // vcs_pfet_force_state == 00 (Nop) @@ -441,6 +462,8 @@ p9_sgpe_stop_entry() return SGPE_STOP_ENTRY_VDD_PFET_NOT_IDLE; } +#endif + // Prepare PFET Controls // vdd_pfet_val/sel_override = 0 (disbaled) // vcs_pfet_val/sel_override = 0 (disbaled) @@ -448,12 +471,11 @@ p9_sgpe_stop_entry() PK_TRACE("SE11.t"); GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_PFCS_CLR, qloop), BITS64(4, 4) | BIT64(8)); - // Power Off Core VDD + // Power Off Cache VDD/VDS // vdd_pfet_force_state = 01 (Force Voff) // vcs_pfet_force_state = 01 (Force Voff) PK_TRACE("SE11.u"); GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_PFCS_OR, qloop), BIT64(1) | BIT64(3)); - // Poll for power gate sequencer state: 0x8 (FSM Idle) PK_TRACE("SE11.v"); |

