summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2016-10-13 09:13:42 -0500
committerhostboot <hostboot@us.ibm.com>2018-08-22 17:54:12 -0500
commit43ed89a56b77f8c02d16766f3b1a32fa835ce1c5 (patch)
tree8f1b8ba07da699c3bbf9c90b66efef1077c4d38f
parent03a1c325e27f398f234e9e01ad21aa4346fecf0b (diff)
downloadtalos-hcode-43ed89a56b77f8c02d16766f3b1a32fa835ce1c5.tar.gz
talos-hcode-43ed89a56b77f8c02d16766f3b1a32fa835ce1c5.zip
HB: fix HB core boot resulting cme boot
Change-Id: Ic2b36106a2423cdad267a8e54e9cd8f021487455 Original-Change-Id: I18f7c24dc84536126a90a251ae770b0498b5d3d0 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/31138 Dev-Ready: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Reviewed-by: AMIT KUMAR <akumar3@us.ibm.com> Reviewed-by: Michael S. Floyd <mfloyd@us.ibm.com> Dev-Ready: Michael S. Floyd <mfloyd@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop.h17
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c18
2 files changed, 24 insertions, 11 deletions
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 b4a61034..827dd7a2 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
@@ -95,6 +95,7 @@ extern "C" {
#define EQ_QPPM_QCCR_WOR 0x100F01BF
#define EX_NCU_STATUS_REG 0x1001100F
+#define EX_L3_MODE_REG0 0x1001182B
#define EX_L3_MODE_REG1 0x1001180A
#define EX_DRAM_REF_REG 0x1001180F
#define EX_PM_PURGE_REG 0x10011813
@@ -155,11 +156,12 @@ enum SGPE_STOP_EVENT_LEVELS
enum SGPE_STOP_CME_FLAGS
{
+ CME_EX1_INDICATOR = BIT64(26),
+ CME_SIBLING_FUNCTIONAL = BIT64(27),
CME_CORE0_ENTRY_FIRST = BIT64(28),
CME_CORE1_ENTRY_FIRST = BIT64(29),
CME_CORE0_ENABLE = BIT64(30),
- CME_CORE1_ENABLE = BIT64(31),
- CME_EX1_INDICATOR = BIT64(26)
+ CME_CORE1_ENABLE = BIT64(31)
};
enum SGPE_STOP_PSCOM_MASK
@@ -184,6 +186,17 @@ enum SGPE_STOP_VECTOR_INDEX
#define RESTORE_RING_BITS(mask, ring, save) ring = (((ring) & (~mask)) | (save));
#endif
+/// 64bits data
+typedef union
+{
+ uint64_t value;
+ struct
+ {
+ uint32_t upper;
+ uint32_t lower;
+ } words;
+} data64_t;
+
typedef struct
{
// requested stop state calculated from core stop levels
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 ebbbeed3..26e85115 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
@@ -665,6 +665,9 @@ p9_sgpe_stop_entry()
PK_TRACE("Assert cache chiplet fence via NET_CTRL0[18]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(18));
+ PK_TRACE("Switch glsmux to refclk to save clock grid power via CGCR[3]");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_PPM_CGCR, qloop), 0);
+
PK_TRACE("Clear SCAN_REGION prior to stop cache clocks");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_SCAN_REGION_TYPE, qloop), 0);
@@ -694,12 +697,6 @@ p9_sgpe_stop_entry()
pk_halt();
}
- // MF: verify compiler generate single rlwmni
- // MF: delay may be needed for stage latch to propagate thold
-
- PK_TRACE("Switch glsmux to refclk to save clock grid power via CGCR[3]");
- GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_PPM_CGCR, qloop), 0);
-
PK_TRACE("Assert vital fence via CPLT_CTRL1[3]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL1_OR, qloop), BIT64(3));
@@ -712,6 +709,9 @@ p9_sgpe_stop_entry()
((uint64_t)ex << SHIFT64(9)) |
((uint64_t)ex << SHIFT64(13))));
+ PK_TRACE("Drop CME_INTERPPM_DPLL_ENABLE after DPLL is stopped via QPMMR[26]");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(QPPM_QPMMR_CLR, qloop), BIT64(20) | BIT64(22) | BIT64(24) | BIT64(26));
+
/// @todo add VDM_ENABLE attribute control
PK_TRACE("Drop vdm enable via CPPM_VDMCR[0]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_VDMCR_CLR, qloop), BIT64(0));
@@ -787,6 +787,9 @@ p9_sgpe_stop_entry()
PK_TRACE("Assert electrical fence via NET_CTRL0[26]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(26));
+ PK_TRACE("Drop sram_enable via NET_CTRL0[23]");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WAND, qloop), ~BIT64(23));
+
PK_TRACE("Assert vital thold via NET_CTRL0[16]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_NET_CTRL0_WOR, qloop), BIT64(16));
@@ -864,9 +867,6 @@ p9_sgpe_stop_entry()
#endif
- PK_TRACE("Drop CME_INTERPPM_DPLL_ENABLE after DPLL is stopped via QPMMR[26]");
- GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(QPPM_QPMMR_CLR, qloop), BIT64(20) | BIT64(22) | BIT64(24) | BIT64(26));
-
G_sgpe_stop_record.state[qloop].act_state_q = STOP_LEVEL_11;
for(cloop = 0; cloop < CORES_PER_QUAD; cloop++)
OpenPOWER on IntegriCloud