summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-ximport/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_entry.c81
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_exit.c122
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c12
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_gptr_time_initf.c4
-rw-r--r--import/chips/p9/procedures/ppe_closed/cme/utils/p9_putringutils.c5
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c4
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_entry.c120
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c92
-rw-r--r--import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c36
9 files changed, 223 insertions, 253 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 aa91de4b..4aaf008c 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
@@ -115,7 +115,7 @@ uint16_t ram_read_lpid( uint32_t core, uint32_t thread )
if (scom_data > 0xFFF )
{
- PKTRACE("RAMMING ERROR Unexpected LPID core %d : 0x%lX 0xFFF", core, scom_data);
+ PK_TRACE("RAMMING ERROR Unexpected LPID core %d : 0x%lX 0xFFF", core, scom_data);
PK_PANIC(CME_STOP_ENTRY_BAD_LPID_ERROR);
}
@@ -288,7 +288,7 @@ p9_cme_stop_entry()
#endif // tlbie stop workaround
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ BEGIN OF STOP ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ BEGIN OF STOP ENTRY +++++ +++++");
//--------------------------------------------------------------------------
// First we need to determine which of the two STOP interrupts fired.
@@ -416,7 +416,7 @@ p9_cme_stop_entry()
#if HW386841_DD1_DSL_STOP1_FIX
//----------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 1 ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 1 ENTRY +++++ +++++");
//----------------------------------------------------------------------
PK_TRACE("Pulse STOP entry acknowledgement to PC via SICR[0/1]");
@@ -447,7 +447,7 @@ p9_cme_stop_entry()
}
//----------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 2 ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 2 ENTRY +++++ +++++");
//----------------------------------------------------------------------
p9_cme_acquire_pcbmux(core, 1);
@@ -480,14 +480,16 @@ p9_cme_stop_entry()
PK_TRACE("Update STOP history: in transition of entry");
// Set req_level_level to target_level of either both or just one core
scom_data.words.lower = 0;
- scom_data.words.upper = (SSH_REQ_LEVEL_UPDATE | (target_level << SHIFT32(7)));
+ scom_data.words.upper = (SSH_REQ_LEVEL_UPDATE |
+ (((uint32_t)target_level) << SHIFT32(7)));
CME_PUTSCOM(PPM_SSHSRC, core, scom_data.value);
// Set req_level_level to deeper_level for deeper core
if (deeper_core)
{
scom_data.words.lower = 0;
- scom_data.words.upper = (SSH_REQ_LEVEL_UPDATE | (deeper_level << SHIFT32(7)));
+ scom_data.words.upper = (SSH_REQ_LEVEL_UPDATE |
+ (((uint32_t)deeper_level) << SHIFT32(7)));
CME_PUTSCOM(PPM_SSHSRC, deeper_core, scom_data.value);
}
@@ -504,13 +506,13 @@ p9_cme_stop_entry()
if (core & CME_MASK_C0)
{
lpid_c0[thread] = ram_read_lpid(CME_MASK_C0, thread);
- PKTRACE("c0lpid %X thread %X", (uint32_t) lpid_c0[thread], thread);
+ PK_TRACE("c0lpid %X thread %X", (uint32_t) lpid_c0[thread], thread);
}
if (core & CME_MASK_C1)
{
lpid_c1[thread] = ram_read_lpid(CME_MASK_C1, thread);
- PKTRACE("c1lpid %X thread %X", (uint32_t) lpid_c1[thread], thread);
+ PK_TRACE("c1lpid %X thread %X", (uint32_t) lpid_c1[thread], thread);
}
}
@@ -524,8 +526,8 @@ p9_cme_stop_entry()
if (ram_read_lpid(CME_MASK_C0, thread) != POWMAN_RESERVED_LPID)
{
- PKTRACE("READ LPID not equal to expected value");
- asm("trap");
+ PK_TRACE("READ LPID not equal to expected value");
+ PK_PANIC(CME_STOP_ENTRY_BAD_LPID_ERROR);
}
#endif
@@ -539,8 +541,8 @@ p9_cme_stop_entry()
if (ram_read_lpid(CME_MASK_C1, thread) != POWMAN_RESERVED_LPID)
{
- PKTRACE("READ LPID not equal to expected value");
- asm("trap");
+ PK_TRACE("READ LPID not equal to expected value");
+ PK_PANIC(CME_STOP_ENTRY_BAD_LPID_ERROR);
}
#endif
@@ -552,6 +554,8 @@ p9_cme_stop_entry()
#endif // tlbie stop workaround
+ PK_TRACE_INF("SE.2A: Core[%d] PCB Mux Granted", core);
+
//=============================
MARK_TRAP(SE_QUIESCE_CORE_INTF)
//=============================
@@ -579,7 +583,7 @@ p9_cme_stop_entry()
// MF: verify generate FCB otherwise math is wrong.
PPE_WAIT_CORE_CYCLES(512)
- PK_TRACE_INF("SE2.B: Interfaces Quiesced");
+ PK_TRACE_INF("SE.2B: Interfaces Quiesced");
#if HW402407_NDD1_TLBIE_STOP_WORKAROUND
@@ -609,8 +613,8 @@ p9_cme_stop_entry()
{
if (ram_read_lpid(CME_MASK_C0, thread) != lpid_c0[thread])
{
- PKTRACE("READ LPID not equal to expected value");
- asm("trap");
+ PK_TRACE("READ LPID not equal to expected value");
+ PK_PANIC(CME_STOP_ENTRY_BAD_LPID_ERROR);
}
}
@@ -618,8 +622,8 @@ p9_cme_stop_entry()
{
if (ram_read_lpid(CME_MASK_C1, thread) != lpid_c1[thread])
{
- PKTRACE("READ LPID not equal to expected value");
- asm("trap");
+ PK_TRACE("READ LPID not equal to expected value");
+ PK_PANIC(CME_STOP_ENTRY_BAD_LPID_ERROR);
}
}
}
@@ -693,7 +697,7 @@ p9_cme_stop_entry()
// MF: verify compiler generate single rlwmni
// MF: delay may be needed for stage latch to propagate thold
- PK_TRACE_INF("SE2.C: Core Clock Stopped");
+ PK_TRACE_INF("SE.2C: Core Clock Stopped");
//==============================
MARK_TRAP(SE_STOP_CORE_GRID)
@@ -750,7 +754,7 @@ p9_cme_stop_entry()
G_cme_stop_record.act_level[1] = STOP_LEVEL_2;
}
- PK_TRACE_INF("SE2.D: Clock Sync Dropped");
+ PK_TRACE_INF("SE.2D: Clock Sync Dropped");
//===========================
MARK_TAG(SE_STOP2_DONE, core)
@@ -763,7 +767,8 @@ p9_cme_stop_entry()
STOP_TRANS_COMPLETE : STOP_TRANS_ENTRY;
scom_data.words.lower = 0;
- scom_data.words.upper = (SSH_ACT_LV2_COMPLETE | (entry_ongoing << SHIFT32(3)));
+ scom_data.words.upper = (SSH_ACT_LV2_COMPLETE |
+ (((uint32_t)entry_ongoing) << SHIFT32(3)));
CME_PUTSCOM(PPM_SSHSRC, core, scom_data.value);
// If both cores targeting different levels
@@ -904,7 +909,7 @@ p9_cme_stop_entry()
core, deeper_core, target_level, deeper_level);
//----------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 3 ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 3 ENTRY +++++ +++++");
//----------------------------------------------------------------------
if (target_level == 3)
@@ -970,7 +975,7 @@ p9_cme_stop_entry()
}
//----------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 4 ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 4 ENTRY +++++ +++++");
//----------------------------------------------------------------------
//===============================
@@ -1022,7 +1027,7 @@ p9_cme_stop_entry()
// vdd_pfet_force_state = 00 (Nop)
CME_PUTSCOM(PPM_PFCS_CLR, core, BITS64(0, 2));
- PK_TRACE_INF("SE4.A: Core Powered Off");
+ PK_TRACE_INF("SE.4A: Core[%d] Powered Off", core);
}
#endif
@@ -1048,7 +1053,8 @@ p9_cme_stop_entry()
STOP_TRANS_ENTRY;
scom_data.words.lower = 0;
- scom_data.words.upper = (SSH_ACT_LV4_COMPLETE | (entry_ongoing << SHIFT32(3)));
+ scom_data.words.upper = (SSH_ACT_LV4_COMPLETE |
+ (((uint32_t)entry_ongoing) << SHIFT32(3)));
CME_PUTSCOM(PPM_SSHSRC, core, scom_data.value);
// If both cores targeting different levels
@@ -1117,7 +1123,7 @@ p9_cme_stop_entry()
core, deeper_core, target_level, deeper_level);
//----------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 5-7 ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 5-7 ENTRY +++++ +++++");
//----------------------------------------------------------------------
if ((G_cme_stop_record.req_level[0] >= STOP_LEVEL_8) &&
@@ -1163,7 +1169,7 @@ p9_cme_stop_entry()
MARK_TAG(SE_PURGE_L2_ABORT, core_aborted)
//=======================================
- PK_TRACE_DBG("Abort: L2+NCU purge aborted by core[%d]", core_aborted);
+ PK_TRACE_INF("Abort: L2+NCU purge aborted by core[%d]", core_aborted);
out32(CME_LCL_SICR_OR, BIT32(19) | BIT32(23));
}
}
@@ -1176,7 +1182,7 @@ p9_cme_stop_entry()
PK_TRACE("Drop L2+NCU purges and their possible aborts via SICR[18,19,22,23]");
out32(CME_LCL_SICR_CLR, (BITS32(18, 2) | BITS32(22, 2)));
- PK_TRACE_INF("SE5.A: L2 and NCU Purged");
+ PK_TRACE_INF("SE.5A: L2 and NCU Purged");
//===================================================================
MARK_TAG(SE_PURGE_L2_DONE, core_aborted ? core_aborted : CME_MASK_BC)
@@ -1220,7 +1226,7 @@ p9_cme_stop_entry()
if ((scom_data.words.upper & BIT32(13)))
{
- PKTRACE("ERROR: C0 notify was already set?");
+ PKTRACE("ERROR.A0: C0 notify was already set?");
pk_halt();
}
@@ -1232,7 +1238,7 @@ p9_cme_stop_entry()
if ((scom_data.words.upper & BIT32(13)))
{
- PKTRACE("ERROR: C1 notify was already set?");
+ PKTRACE("ERROR.A1: C1 notify was already set?");
pk_halt();
}
}
@@ -1247,7 +1253,7 @@ p9_cme_stop_entry()
{
core_index = core_mask & 1;
- if (G_cme_stop_record.req_level[core_index] < STOP_LEVEL_11)
+ if (G_cme_stop_record.req_level[core_index] >= STOP_LEVEL_8)
{
CME_PUTSCOM(CPPM_CPMMR_OR, core_mask, BIT64(10));
pig.fields.req_intr_type = PIG_TYPE3;
@@ -1272,6 +1278,9 @@ p9_cme_stop_entry()
#endif
+ PK_TRACE_DBG("Switch Core PPM wakeup to STOP-GPE via CPMMR[13]");
+ CME_PUTSCOM(CPPM_CPMMR_OR, core, BIT64(13));
+
#if DEBUG_RUNTIME_STATE_CHECK
if (core & CME_MASK_C0)
@@ -1280,7 +1289,7 @@ p9_cme_stop_entry()
if (!(scom_data.words.upper & BIT32(13)))
{
- PKTRACE("ERROR: C0 notify fail to set");
+ PKTRACE("ERROR.B0: C0 notify fail to set");
pk_halt();
}
@@ -1292,23 +1301,23 @@ p9_cme_stop_entry()
if (!(scom_data.words.upper & BIT32(13)))
{
- PKTRACE("ERROR: C1 notify fail to set");
+ PKTRACE("ERROR.B1: C1 notify fail to set");
pk_halt();
}
}
#endif
- PKTRACE("Switch Core%d PPM wakeup to STOP-GPE via CPMMR[13]", core);
- CME_PUTSCOM(CPPM_CPMMR_OR, core, BIT64(13));
+ PK_TRACE("Clear special wakeup after wakeup_notify = 1 since it is edge triggered");
+ out32(CME_LCL_EISR_CLR, core << SHIFT32(15));
- PK_TRACE_INF("SE5.B: Handed off to SGPE");
+ PK_TRACE_INF("SE.5B: Core[%d] Handed off to SGPE", core);
}
while(0);
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ END OF STOP ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ END OF STOP ENTRY +++++ +++++");
//--------------------------------------------------------------------------
//============================
diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_exit.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_exit.c
index 85d6a724..41a370b4 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_exit.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_exit.c
@@ -85,7 +85,7 @@ p9_cme_stop_exit_catchup(uint32_t* core,
*spwu_stop |= (core_catchup) & (wakeup >> 2);
- PK_TRACE_INF("Catch: core[%d] running[%d] \
+ PK_TRACE_DBG("Catch: core[%d] running[%d] \
core_catchup[%d] catchup_level[%d]",
*core, G_cme_stop_record.core_running,
core_catchup, catchup_level);
@@ -138,7 +138,7 @@ p9_cme_stop_exit()
#endif
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ BEGIN OF STOP EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ BEGIN OF STOP EXIT +++++ +++++");
//--------------------------------------------------------------------------
// extract wakeup signals, clear status, and mask wakeup interrupts
@@ -182,12 +182,10 @@ p9_cme_stop_exit()
if (spwu_wake)
{
// Process special wakeup on a core that is already running
- PK_TRACE_DBG("Check: Core[%d] pm_exit=1/EISR=0/EIPR=0/spwu_done=1", spwu_wake);
+ PK_TRACE_INF("SP.WU: Core[%d] Assert PM_EXIT and SPWU_DONE via SICR[4/5, 16/17]", spwu_wake);
out32(CME_LCL_SICR_OR, spwu_wake << SHIFT32(5)); // assert pm_exit
out32(CME_LCL_EISR_CLR, spwu_wake << SHIFT32(15)); // clear spwu in EISR
out32(CME_LCL_EIPR_CLR, spwu_wake << SHIFT32(15)); // flip EIPR to falling edge
-
- PK_TRACE_INF("SX0.A: Assert SPWU Done on Core via SICR[16/17]");
out32(CME_LCL_SICR_OR, spwu_wake << SHIFT32(17)); // assert spwu_done now
G_cme_stop_record.core_in_spwu |= spwu_wake;
@@ -224,7 +222,7 @@ p9_cme_stop_exit()
}
}
- PK_TRACE_DBG("SX0.B: Core[%d] Requested Stop1 Exit", core_stop1);
+ PK_TRACE_INF("SX.1A: Core[%d] Requested Stop1 Exit", core_stop1);
core = core & ~core_stop1;
@@ -264,9 +262,6 @@ p9_cme_stop_exit()
PK_TRACE_DBG("Check: core[%d] target_lv[%d], deeper_lv[%d], deeper_c[%d]",
core, target_level, deeper_level, deeper_core);
-
-
-
PK_TRACE("Clear chtm purge done via ESIR[24/25]");
out32(CME_LCL_EISR_CLR, (core << SHIFT32(25)));
@@ -282,7 +277,7 @@ p9_cme_stop_exit()
{
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 4 EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 4 EXIT +++++ +++++");
//--------------------------------------------------------------------------
// if deeper_core is set, then core must be 0b11
@@ -297,29 +292,29 @@ p9_cme_stop_exit()
#if !SKIP_BCE_SCOM_RESTORE
- PK_TRACE_INF("SX4.A: BCE Runtime Kickoff to Copy Scom Restore");
+ PK_TRACE_DBG("BCE Runtime Kickoff to Copy Scom Restore");
//right now a blocking call. Need to confirm this.
instance_scom_restore();
#endif
- PK_TRACE_DBG("Check: Core[%d] in Progress of SX4FH", core);
// Can't do the read of cplt_stat after flipping the mux before the core is powered on
// catchup to stop4 exit will acquire here
+ PK_TRACE_DBG("Core Acquire Pcb Mux");
p9_cme_acquire_pcbmux(core, 0);
//========================
MARK_TAG(SX_POWERON, core)
//========================
- PK_TRACE_INF("SX4.B: Core Poweron");
+ PK_TRACE_INF("SX.4A: Core[%d] Poweron", core);
p9_hcd_core_poweron(core);
//=========================
MARK_TRAP(SX_CHIPLET_RESET)
//=========================
- PK_TRACE_INF("SX4.C: Core Chiplet Reset");
+ PK_TRACE_INF("SX.4B: Core Chiplet Reset");
p9_hcd_core_chiplet_reset(core);
#if !STOP_PRIME
@@ -352,19 +347,20 @@ p9_cme_stop_exit()
MARK_TAG(SX_CHIPLET_INITS, core)
//==============================
+
#if !SKIP_INITF
- PK_TRACE_INF("SX4.D: Core GPTR Time Initf");
+ PK_TRACE_INF("SX.4C: Core[%d] Gptr/Time Initf after catchup A", core);
p9_hcd_core_gptr_time_initf(core);
#endif
- PK_TRACE_INF("SX4.E: Core Chiplet Init");
+ PK_TRACE_DBG("Core Chiplet Inits");
p9_hcd_core_chiplet_init(core);
#if !SKIP_INITF
- PK_TRACE_INF("SX4.F: Core Repair Initf");
+ PK_TRACE_INF("SX.4D: Core Repair Initf");
p9_hcd_core_repair_initf(core);
#endif
@@ -400,7 +396,7 @@ p9_cme_stop_exit()
#if !SKIP_ARRAYINIT
- PK_TRACE_INF("SX4.G: Core Array Init");
+ PK_TRACE_INF("SX.4E: Core[%d] Array Init after catchup B", core);
p9_hcd_core_arrayinit(core);
#endif
@@ -411,7 +407,7 @@ p9_cme_stop_exit()
#if !SKIP_INITF
- PK_TRACE_INF("SX4.H: Core Func Scan");
+ PK_TRACE_INF("SX.4F: Core Func Scan");
p9_hcd_core_initf(core);
#endif
@@ -430,29 +426,24 @@ p9_cme_stop_exit()
if (deeper_level == STOP_LEVEL_3 || target_level == STOP_LEVEL_3)
{
-
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 3 EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 3 EXIT +++++ +++++");
//--------------------------------------------------------------------------
- PK_TRACE_DBG("Check: Core[%d] Serviced by SX3", core);
-
//======================
MARK_TAG(SX_STOP3, core)
//======================
- //Return to full voltage
+ PK_TRACE_DBG("SX.3A: Core[%d] Return to Full Voltage", core);
//disable ivrm?
}
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 2 EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 2 EXIT +++++ +++++");
//--------------------------------------------------------------------------
- PK_TRACE_INF("Check: Core[%d] Serviced by SX2", core);
-
//============================
MARK_TAG(SX_STARTCLOCKS, core)
//============================
@@ -464,6 +455,7 @@ p9_cme_stop_exit()
// do this after assert glsmux so glitch can have time to resolve
// catchup to stop2 exit will acquire here
+ PK_TRACE_DBG("Core Ensure Pcb Mux");
p9_cme_acquire_pcbmux(core, 1);
PK_TRACE_INF("SX2.A: Start Core Clock");
@@ -474,17 +466,15 @@ p9_cme_stop_exit()
if (target_level < STOP_LEVEL_4)
{
- PK_TRACE("Drop chiplet fence via NC0INDIR[18]");
-
if (deeper_core && deeper_level == STOP_LEVEL_4)
{
- PK_TRACE_DBG("Dropping fence in core%d with deeper_core%d",
+ PK_TRACE_DBG("Core[%d] Dropping Chiplet Fence via NC0INDIR[18] with deeper_core[%d]",
(CME_MASK_BC - deeper_core), deeper_core);
CME_PUTSCOM(CPPM_NC0INDIR_CLR, (CME_MASK_BC - deeper_core), BIT64(18));
}
else
{
- PK_TRACE_DBG("Dropping fence in core%d", core);
+ PK_TRACE_DBG("Core[%d] Dropping Chiplet Fence via NC0INDIR[18]", core);
CME_PUTSCOM(CPPM_NC0INDIR_CLR, core, BIT64(18));
}
}
@@ -495,7 +485,7 @@ p9_cme_stop_exit()
{
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ STOP LEVEL 4 EXIT CONTINUE +++++ +++++");
+ PK_TRACE("+++++ +++++ STOP LEVEL 4 EXIT CONTINUE +++++ +++++");
//--------------------------------------------------------------------------
if (d2u4_flag)
@@ -503,15 +493,13 @@ p9_cme_stop_exit()
core = deeper_core;
}
- PK_TRACE_DBG("Check: Core[%d] Serviced by SX4SH", core);
-
#if !STOP_PRIME
//===========================
MARK_TAG(SX_SCOM_INITS, core)
//===========================
- PK_TRACE_INF("SX4.I: Image Hardcoded Scoms on Core", core);
+ PK_TRACE_INF("SX4.G: Core[%d] Scom Inits", core);
p9_hcd_core_scominit(core);
//==========================
@@ -520,7 +508,7 @@ p9_cme_stop_exit()
#if !SKIP_BCE_SCOM_RESTORE
- PK_TRACE_INF("SX4.J: BCE Runtime Check Scom Restore Copy Completed");
+ PK_TRACE_DBG("BCE Runtime Check Scom Restore Copy Completed");
if( BLOCK_COPY_SUCCESS != isScanRingCopyDone() )
{
@@ -530,17 +518,17 @@ p9_cme_stop_exit()
#endif
- PK_TRACE_INF("SX4.K: XIP Customized Scoms on Core", core);
+ PK_TRACE("Core XIP Customized Scoms");
p9_hcd_core_scomcust(core);
//==============================
MARK_TAG(SX_RUNTIME_INITS, core)
//==============================
- PK_TRACE_INF("SX4.L: RAS Runtime Scom on Core", core);
+ PK_TRACE("RAS Runtime Scom on Core", core);
p9_hcd_core_ras_runtime_scom(core);
- PK_TRACE_INF("SX4.M: OCC Runtime Scom on Core", core);
+ PK_TRACE("OCC Runtime Scom on Core", core);
p9_hcd_core_occ_runtime_scom(core);
#endif
@@ -549,14 +537,12 @@ p9_cme_stop_exit()
MARK_TAG(SX_SELF_RESTORE, core)
//=============================
- PK_TRACE_INF("SX4.N: Core Self Restore");
-
#if !SKIP_SELF_RESTORE
PK_TRACE("Assert block interrupt to PC via SICR[2/3]");
out32(CME_LCL_SICR_OR, core << SHIFT32(3));
- PK_TRACE("Waking up the core(pm_exit=1) via SICR[4/5]");
+ PK_TRACE_INF("SF.RS: Self Restore Prepare, Core Waking up(pm_exit=1) via SICR[4/5]");
out32(CME_LCL_SICR_OR, core << SHIFT32(5));
PK_TRACE("Polling for core wakeup(pm_active=0) via EINR[20/21]");
@@ -569,8 +555,6 @@ p9_cme_stop_exit()
#if NIMBUS_DD_LEVEL == 1
#if !SKIP_RAM_HRMOR
- PK_TRACE_INF("SX4.O: Core Wakes Up, Ramming HRMOR with HOMER address");
-
PK_TRACE("Activate thread0 for RAM via THREAD_INFO[18]");
CME_PUTSCOM(THREAD_INFO, core, BIT64(18));
@@ -587,11 +571,11 @@ p9_cme_stop_exit()
PK_TRACE_DBG("Set SPRC to scratch for core[%d] via SCOM_SPRC", core_mask);
CME_PUTSCOM(SCOM_SPRC, core_mask, ((core_mask & 1) ? BIT64(60) : 0));
- PK_TRACE_DBG("Load SCRACTH with HOMER+2MB for core[%d]", core_mask);
+ PK_TRACE_DBG("Load SCRACTH with HOMER+2MB address %x", scom_data.value);
#if EPM_P9_TUNING
- CME_PUTSCOM((SCRACTH0 + (core_mask & 1)), core_mask, 0x200000);
+ CME_PUTSCOM((SCRACTH0 + (core_mask & 1)), core_mask, 0xA200000);
#else
@@ -631,14 +615,14 @@ p9_cme_stop_exit()
// Nimbus DD2+
#else
- PK_TRACE_INF("SX4.O: Core Wakes Up, Write HRMOR with HOMER address");
#if EPM_P9_TUNING
- CME_PUTSCOM(HRMOR, core, 0x200000);
+ CME_PUTSCOM(HRMOR, core, 0xA200000);
#else
+ PK_TRACE_DBG("Core Wakes Up, Write HRMOR with HOMER address %x", scom_data.value);
CME_PUTSCOM(HRMOR, core, scom_data.value);
#endif
@@ -649,7 +633,7 @@ p9_cme_stop_exit()
CME_GETSCOM(SPATTN_MASK, core, CME_SCOM_AND, scom_data.value);
CME_PUTSCOM(SPATTN_MASK, core, BITS64(0, 64));
- PK_TRACE_INF("SX4.P: S-Reset All Core Threads to Run Self Restore Image");
+ PK_TRACE_INF("SF.RS: Self Restore Kickoff, S-Reset All Core Threads");
CME_PUTSCOM(DIRECT_CONTROLS, core,
BIT64(4) | BIT64(12) | BIT64(20) | BIT64(28));
sync();
@@ -677,7 +661,7 @@ p9_cme_stop_exit()
}
}
- PK_TRACE_INF("SX4.Q: Self Restore Completed, Core is Stopped Again");
+ PK_TRACE_INF("SF.RS: Self Restore Completed, Core Stopped Again(pm_exit=0/pm_active=1)");
PK_TRACE("Restore SPATTN after self-restore");
CME_PUTSCOM(SPATTN_MASK, core, scom_data.value);
@@ -701,22 +685,21 @@ p9_cme_stop_exit()
//=========================
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ END OF STOP EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ END OF STOP EXIT +++++ +++++");
//--------------------------------------------------------------------------
+ PK_TRACE_DBG("Restore PSSCR.PLS+SRR1 back to actual level");
+
#if HW386841_DD1_DSL_STOP1_FIX
STOP1_EXIT:
core = core | core_stop1;
- PK_TRACE_INF("SX0.D: Restore PSSCR.PLS+SRR1 back to actual level");
-
for (core_mask = 2; core_mask; core_mask--)
{
if (core & core_mask)
{
- PK_TRACE_DBG("Set PLS+SRR1 for Core[%d]", core_mask);
CME_GETSCOM(PPM_SSHSRC, core_mask, CME_SCOM_AND, scom_data.value);
core_index = core_mask & 1;
@@ -731,7 +714,7 @@ STOP1_EXIT:
// address are 0x20 apart between threads and 0x80 apart between cores
pscrs = in32((CME_LCL_PSCRS00 + (core_index << 7) + (thread << 5)));
- PK_TRACE_DBG("Old dsl%d of Core%d Thread%d, current PSCRS%x",
+ PK_TRACE_DBG("Old DSL[%d] of Core[%d] Thread[%d], current PSCRS[%x]",
G_dsl[core_index][thread], core_index, thread, pscrs);
// Calculate new DSL
@@ -764,7 +747,7 @@ STOP1_EXIT:
G_dsl[core_index][thread] =
MIN(temp_dsl, MAX(act_stop_level, G_dsl[core_index][thread]));
- PK_TRACE_DBG("New dsl%d", G_dsl[core_index][thread]);
+ PK_TRACE_DBG("New DSL[%d]", G_dsl[core_index][thread]);
// Calculate new SRR1
if (G_dsl[core_index][thread] >= STOP_LEVEL_8)
@@ -780,7 +763,7 @@ STOP1_EXIT:
srr1[thread] = temp_srr1;
}
- PK_TRACE_DBG("Srr1%d", srr1[thread]);
+ PK_TRACE_DBG("Srr1[%d]", srr1[thread]);
// 36-39|44-47|52-55|60-63
scom_data.words.lower |=
@@ -795,13 +778,10 @@ STOP1_EXIT:
#else
- PK_TRACE_INF("SX0.E: Restore PSSCR.PLS+SRR1 back to actual level");
-
for (core_mask = 2; core_mask; core_mask--)
{
if (core & core_mask)
{
- PK_TRACE_DBG("Set PLS+SRR1 for Core[%d]", core_mask);
CME_GETSCOM(PPM_SSHSRC, core_mask, CME_SCOM_AND, scom_data.value);
act_stop_level = (scom_data.words.upper & BITS32(8, 4)) >> SHIFT32(11);
@@ -854,12 +834,10 @@ STOP1_EXIT:
#endif
- PK_TRACE_DBG("Check: Core[%d] Serviced by SX0", core);
-
- PK_TRACE_INF("SX0.F: Now Wakeup the Core (pm_exit=1) via SICR[4/5]");
+ PK_TRACE_INF("SX.0A: Core[%d] Waking up(pm_exit=1) via SICR[4/5]", core);
out32(CME_LCL_SICR_OR, core << SHIFT32(5));
- PK_TRACE_INF("SX0.G: Polling for Core Waking up(pm_active=0) via EINR[20/21]");
+ PK_TRACE_DBG("Polling for Core Waking up(pm_active=0) via EINR[20/21]");
while((in32(CME_LCL_EINR)) & (core << SHIFT32(21)));
@@ -870,8 +848,9 @@ STOP1_EXIT:
#endif
- PK_TRACE_INF("SX0.H: Release PCB Mux back to Core via SICR[10/11]");
+ PK_TRACE_INF("Core Release PCB Mux via SICR[10/11]");
p9_cme_release_pcbmux(core);
+
PK_TRACE("Update STOP history: STOP exit completed, core ready");
scom_data.words.lower = 0;
scom_data.words.upper = SSH_EXIT_COMPLETE;
@@ -889,15 +868,15 @@ STOP1_EXIT:
G_cme_stop_record.core_running |= core;
G_cme_stop_record.core_stopgpe &= ~core;
- PK_TRACE("Drop halt STOP override disable via LMCR[14/15]");
+ PK_TRACE_DBG("Drop halt STOP override disable via LMCR[14/15]");
out32(CME_LCL_LMCR_CLR, (core << SHIFT32(15)));
#if SPWU_AUTO
- PK_TRACE_INF("SX0.I: Drop auto spwu disable, enable auto spwu via LMCR[12/13]");
+ PK_TRACE_DBG("Drop auto spwu disable, enable auto spwu via LMCR[12/13]");
out32(CME_LCL_LMCR_CLR, core << SHIFT32(13));
- PK_TRACE_INF("SX0.J: Drop pm_exit via SICR[4/5]");
+ PK_TRACE_INF("SX.0B: Core Drop PM_EXIT via SICR[4/5]");
out32(CME_LCL_SICR_CLR, core << SHIFT32(5));
#else
@@ -907,19 +886,16 @@ STOP1_EXIT:
// done = spwu + !pm_active + !core_chiplet_fence + !pcbmux_req + !pcbmux_grant
// chiplet fence forces pm_active to zero
// Note: pm_exit is asserted above for every core waking up including spwu
- PK_TRACE_DBG("Check: Core[%d] EISR=0/EIPR=0/spwu_done=1", spwu_stop);
+ PK_TRACE_INF("SX.0B: Core[%d] Assert SPWU_DONE via SICR[16/17]", spwu_stop);
out32(CME_LCL_EISR_CLR, spwu_stop << SHIFT32(15)); // clear spwu in EISR
out32(CME_LCL_EIPR_CLR, spwu_stop << SHIFT32(15)); // flip EIPR to falling edge
-
- PK_TRACE_INF("SX0.K: Assert SPWU Done on Core via SICR[16/17]");
out32(CME_LCL_SICR_OR, spwu_stop << SHIFT32(17)); // assert spwu_done now
G_cme_stop_record.core_in_spwu |= spwu_stop;
}
if ((core = (core & (~spwu_stop))))
{
- PK_TRACE_DBG("Check: Core[%d] isnt SPWUed, Drop PM_EXIT", core);
- PK_TRACE_INF("SX0.L: Drop PM_EXIT for NOT SPWU Core via SICR[4/5]");
+ PK_TRACE_INF("SX.0C: Core[%d] isnt SPWUed, Drop PM_EXIT via SICR[4/5]", core);
out32(CME_LCL_SICR_CLR, core << SHIFT32(5));
}
diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
index 3e16a0d7..709489f9 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_cme_stop_irq_handlers.c
@@ -42,7 +42,6 @@ p9_cme_stop_spwu_handler(void* arg, PkIrqId irq)
{
MARK_TRAP(STOP_SPWU_HANDLER)
//PK_TRACE_INF("SPWU Handler");
- PK_TRACE_INF("SPWU Trigger %d", irq);
PkMachineContext ctx;
int sem_post = 0;
@@ -51,6 +50,9 @@ p9_cme_stop_spwu_handler(void* arg, PkIrqId irq)
uint32_t raw_spwu = (in32(CME_LCL_EISR) & BITS32(14, 2)) >> SHIFT32(15);
uint64_t scom_data = 0;
+ PK_TRACE_INF("SPWU Trigger %d Level %x State %x",
+ irq, raw_spwu, G_cme_stop_record.core_in_spwu);
+
for(core_mask = 2; core_mask; core_mask--)
{
if (raw_spwu & core_mask)
@@ -118,8 +120,8 @@ void
p9_cme_stop_exit_handler(void* arg, PkIrqId irq)
{
MARK_TRAP(STOP_EXIT_HANDLER)
- //PK_TRACE_INF("SX Handler");
- PK_TRACE_INF("SX Trigger %d", irq);
+ PK_TRACE_INF("SX Handler");
+ PK_TRACE_DBG("SX Trigger %d", irq);
out32(CME_LCL_EIMR_OR, BITS32(12, 6) | BITS32(20, 2));
pk_semaphore_post((PkSemaphore*)arg);
}
@@ -130,8 +132,8 @@ void
p9_cme_stop_enter_handler(void* arg, PkIrqId irq)
{
MARK_TRAP(STOP_ENTER_HANDLER)
- //PK_TRACE_INF("SE Handler");
- PK_TRACE_INF("SE Trigger %d", irq);
+ PK_TRACE_INF("SE Handler");
+ PK_TRACE_DBG("SE Trigger %d", irq);
out32(CME_LCL_EIMR_OR, BITS32(12, 6) | BITS32(20, 2));
pk_semaphore_post((PkSemaphore*)arg);
}
diff --git a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_gptr_time_initf.c b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_gptr_time_initf.c
index 38a60669..5cc11f26 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_gptr_time_initf.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/stop_cme/p9_hcd_core_gptr_time_initf.c
@@ -33,10 +33,10 @@ p9_hcd_core_gptr_time_initf(uint32_t core)
{
int rc = CME_STOP_SUCCESS;
- PK_TRACE_DBG("Scan ec_gptr ring core value %d", core);
+ PK_TRACE("Scan ec_gptr ring core value %d", core);
putRing(core, CME_SCOM_EQ, ec_gptr);
- PK_TRACE_DBG("Scan ec_time ring core value %d", core);
+ PK_TRACE("Scan ec_time ring core value %d", core);
putRing(core, CME_SCOM_EQ, ec_time);
return rc;
diff --git a/import/chips/p9/procedures/ppe_closed/cme/utils/p9_putringutils.c b/import/chips/p9/procedures/ppe_closed/cme/utils/p9_putringutils.c
index d94b0768..3ea9f47f 100644
--- a/import/chips/p9/procedures/ppe_closed/cme/utils/p9_putringutils.c
+++ b/import/chips/p9/procedures/ppe_closed/cme/utils/p9_putringutils.c
@@ -451,7 +451,7 @@ int rs4DecompressionSvc(
}
else
{
- PK_TRACE_INF("OVERRIDE !!!!!!");
+ PK_TRACE_DBG("OVERRIDE !!!!!!");
if(0x8 & l_nibble) // We are parsing RS4 for override rings
{
@@ -533,10 +533,9 @@ int rs4DecompressionSvc(
getscom(0, CME_SCOM_ADDR(0x0003E000, i_core, l_scomOp), &l_readHeader);
- PK_TRACE_DBG ("l_readHeader %08X %08X", l_readHeader >> 32, l_readHeader);
-
if(l_readHeader != 0xa5a5a5a5a5a5a5a5)
{
+ PK_TRACE_INF("l_readHeader %08X %08X", l_readHeader >> 32, l_readHeader);
//In EDR: ring Id (8b),core value(4b) and number of latches that went thru rotate
//and scan.
// In SPRG0: First 32 bits of header data read from the hw
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c
index 223a9fed..39415c09 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_hcd_cache_scomcust.c
@@ -30,7 +30,8 @@ int
p9_hcd_cache_scomcust(uint32_t quad, uint32_t m_ex, int is_stop8)
{
- int rc = SGPE_STOP_SUCCESS;
+ int rc = SGPE_STOP_SUCCESS;
+ data64_t scom_data = {0};
#if !SKIP_HOMER_ACCESS
@@ -39,7 +40,6 @@ p9_hcd_cache_scomcust(uint32_t quad, uint32_t m_ex, int is_stop8)
uint32_t qaddr = 0;
uint64_t qdata = 0;
uint32_t rid = 0;
- data64_t scom_data = {0};
// doing this instead of multiply since there is no multiply instruction with ppe.
for(i = 0; i < quad; i++)
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 4c8d2d92..5ae7c1f7 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
@@ -69,7 +69,7 @@ p9_sgpe_stop_entry()
#endif
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ BEGIN OF STOP ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ BEGIN OF STOP ENTRY +++++ +++++");
//--------------------------------------------------------------------------
//================================
@@ -290,10 +290,10 @@ p9_sgpe_stop_entry()
}
// ------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ EX STOP ENTRY [LEVEL 8-10] +++++ +++++");
+ PK_TRACE("+++++ +++++ EX STOP ENTRY [LEVEL 8-10] +++++ +++++");
// ------------------------------------------------------------------------
- PK_TRACE_DBG("Check: q[%d]ex[%d] start ex entry", qloop, ex);
+ PK_TRACE_INF("SX.8A: Quad[%d] EX_L2[%d] Stopping L2 Clocks", qloop, ex);
PK_TRACE("Acquire cache clock controller atomic lock");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CC_ATOMIC_LOCK, qloop), BITS64(0, 5));
@@ -301,8 +301,8 @@ p9_sgpe_stop_entry()
if ((scom_data.words.upper & BITS32(0, 5)) != 0xC0000000)
{
- PKTRACE("ERROR: Failed to Obtain Cache %d Clk Ctrl Atomic Lock. Register Content: %x",
- qloop, scom_data.words.upper);
+ PK_TRACE_INF("ERROR: Failed to Obtain Cache %d Clk Ctrl Atomic Lock. Register Content: %x",
+ qloop, scom_data.words.upper);
PK_PANIC(SGPE_STOP_ENTRY_GET_CLK_LOCK_FAILED);
}
@@ -413,7 +413,7 @@ p9_sgpe_stop_entry()
// MF: verify compiler generate single rlwmni
// MF: delay may be needed for stage latch to propagate thold
- PK_TRACE_INF("SE8.A: L2 Clock Stopped");
+ PK_TRACE_INF("SE.8B: L2 Clock Stopped");
//========================
MARK_TRAP(SE_STOP_L2_GRID)
@@ -489,7 +489,7 @@ p9_sgpe_stop_entry()
((qloop << 2) + cloop));
scom_data.words.lower = 0;
scom_data.words.upper = (SSH_ACT_LV8_COMPLETE |
- ((entry_ongoing[cloop >> 1]) << SHIFT32(3)));
+ (((uint32_t)entry_ongoing[cloop >> 1]) << SHIFT32(3)));
GPE_PUTSCOM_VAR(PPM_SSHSRC, CORE_ADDR_BASE, ((qloop << 2) + cloop), 0,
scom_data.value);
}
@@ -498,7 +498,7 @@ p9_sgpe_stop_entry()
out32(OCB_QSSR_CLR, BIT32(qloop + 20));
out32(OCB_QSSR_OR, (ex << SHIFT32((qloop << 1) + 1)));
- PK_TRACE_INF("SE8.B: L2 Clock Sync Dropped");
+ PK_TRACE_INF("SE.8C: L2 Clock Sync Dropped");
//==================================================
MARK_TAG(SE_STOP8_DONE, ((ex << 6) | (32 >> qloop)))
@@ -532,7 +532,7 @@ p9_sgpe_stop_entry()
ex |= SND_EX_IN_QUAD;
}
- PK_TRACE_DBG("Check: q[%d]ex[%d] starts quad entry", qloop, ex);
+ PK_TRACE_INF("SX.11A: Quad[%d] EX_PG[%d] Shutting Cache Down", qloop, ex);
PK_TRACE("Acquire cache PCB slave atomic lock");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_ATOMIC_LOCK, qloop), BITS64(0, 5));
@@ -540,8 +540,8 @@ p9_sgpe_stop_entry()
if ((scom_data.words.upper & BITS32(0, 5)) != 0xC0000000)
{
- PKTRACE("ERROR: Failed to Obtain Cache %d PCB Slave Atomic Lock. Register Content: %x",
- qloop, scom_data.words.upper);
+ PK_TRACE_INF("ERROR: Failed to Obtain Cache %d PCB Slave Atomic Lock. Register Content: %x",
+ qloop, scom_data.words.upper);
PK_PANIC(SGPE_STOP_ENTRY_GET_SLV_LOCK_FAILED);
}
@@ -551,7 +551,7 @@ p9_sgpe_stop_entry()
PK_TRACE("Update STOP history on quad[%d]: update request stop level", qloop);
scom_data.words.lower = 0;
scom_data.words.upper = (SSH_REQ_LEVEL_UPDATE |
- (G_sgpe_stop_record.state[qloop].req_state_q << SHIFT32(7)));
+ ((uint32_t)G_sgpe_stop_record.state[qloop].req_state_q << SHIFT32(7)));
GPE_PUTSCOM_VAR(PPM_SSHSRC, QUAD_ADDR_BASE, qloop, 0, scom_data.value);
//==================================
@@ -618,7 +618,7 @@ p9_sgpe_stop_entry()
(in32(OCB_OPIT3CN(((qloop << 2) + cloop))) &
TYPE3_PAYLOAD_EXIT_EVENT))
{
- PK_TRACE_INF("Abort: core wakeup detected");
+ PK_TRACE_DBG("Abort: core wakeup detected");
l3_purge_aborted = 1;
break;
}
@@ -628,7 +628,7 @@ p9_sgpe_stop_entry()
if ((in32(OCB_OPIT6PRB) & BIT32(qloop)) &&
(in32(OCB_OPIT6QN(qloop)) & TYPE6_PAYLOAD_EXIT_EVENT))
{
- PK_TRACE_INF("Abort: quad wakeup detected");
+ PK_TRACE_DBG("Abort: quad wakeup detected");
l3_purge_aborted = 1;
}
@@ -639,7 +639,7 @@ p9_sgpe_stop_entry()
MARK_TAG(SE_PURGE_L3_ABORT, (32 >> qloop))
//========================================
- PK_TRACE_INF("Abort: assert purge L3 abort");
+ PK_TRACE_DBG("Abort: assert purge L3 abort");
if (ex & FST_EX_IN_QUAD)
GPE_PUTSCOM(GPE_SCOM_ADDR_EX(EX_PM_PURGE_REG, qloop, 0),
@@ -649,7 +649,7 @@ p9_sgpe_stop_entry()
GPE_PUTSCOM(GPE_SCOM_ADDR_EX(EX_PM_PURGE_REG, qloop, 1),
BIT64(2));
- PK_TRACE_INF("Abort: poll for abort done");
+ PK_TRACE_DBG("Abort: poll for abort done");
if(ex & FST_EX_IN_QUAD)
{
@@ -675,7 +675,7 @@ p9_sgpe_stop_entry()
MARK_TAG(SE_PURGE_L3_ABORT_DONE, (32 >> qloop))
//=============================================
- PK_TRACE_INF("Abort: Drop LCO Disable");
+ PK_TRACE("Abort: Drop LCO Disable");
if (ex & FST_EX_IN_QUAD)
GPE_PUTSCOM(GPE_SCOM_ADDR_EX(EX_PM_LCO_DIS_REG,
@@ -713,7 +713,7 @@ p9_sgpe_stop_entry()
continue;
}
- PK_TRACE_INF("SE11.A: L3 Purged");
+ PK_TRACE_INF("SE.11B: L3 Purged");
#endif
@@ -721,32 +721,7 @@ p9_sgpe_stop_entry()
MARK_TAG(SE_PURGE_PB, (32 >> qloop))
//==================================
- PK_TRACE("Assert powerbus purge via QCCR[30]");
- GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WOR, qloop), BIT64(30));
-
- PK_TRACE("Poll PowerBus purge done via QCCR[31]");
-
- do
- {
- GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR, qloop), scom_data.value);
- }
- while(!(scom_data.words.upper & BIT32(31)));
-
- PK_TRACE("Drop powerbus purge via QCCR[30]");
- GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(30));
-
- PK_TRACE_INF("SE11.B: PowerBus Purged");
-
- //===========================================
- MARK_TAG(SE_WAIT_PGPE_SUSPEND, (32 >> qloop))
- //===========================================
-
- /// @todo RTC166577
- /// IPC poll will move to here when multicast
-
- //======================================
- MARK_TAG(SE_QUIESCE_QUAD, (32 >> qloop))
- //======================================
+ // Stopping CME first in case CME initiates Powerbus Traffic
if (ex & FST_EX_IN_QUAD)
{
@@ -784,6 +759,36 @@ p9_sgpe_stop_entry()
PK_TRACE("CME1 Halted");
}
+ PK_TRACE_DBG("CME Halted");
+
+
+ PK_TRACE("Assert powerbus purge via QCCR[30]");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WOR, qloop), BIT64(30));
+
+ PK_TRACE("Poll PowerBus purge done via QCCR[31]");
+
+ do
+ {
+ GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR, qloop), scom_data.value);
+ }
+ while(!(scom_data.words.upper & BIT32(31)));
+
+ PK_TRACE("Drop powerbus purge via QCCR[30]");
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_QCCR_WCLEAR, qloop), BIT64(30));
+
+ PK_TRACE_INF("SE.11C: PowerBus Purged");
+
+ //===========================================
+ MARK_TAG(SE_WAIT_PGPE_SUSPEND, (32 >> qloop))
+ //===========================================
+
+ /// @todo RTC166577
+ /// IPC poll will move to here when multicast
+
+ //======================================
+ MARK_TAG(SE_QUIESCE_QUAD, (32 >> qloop))
+ //======================================
+
PK_TRACE("Assert refresh quiesce prior to L3 (refresh domain) stop clk via EX_DRAM_REF_REG[7]");
// Assert refresh quiesce prior to L3 (refresh domain) stop clk
@@ -824,7 +829,7 @@ p9_sgpe_stop_entry()
while(((~(scom_data.words.upper)) & BITS32(0, 4)) != BITS32(0, 4));
}
- PK_TRACE_INF("SE11.C: NCU Status Clean");
+ PK_TRACE_DBG("NCU Status Clean");
// In order to preserve state for PRD,
// skip power off if host attn or local xstop present
@@ -851,10 +856,7 @@ p9_sgpe_stop_entry()
PK_TRACE("Stop cache clocks via CLK_REGION");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CLK_REGION, qloop),
- (CLK_STOP_CMD | CLK_THOLD_ALL |
- CLK_REGION_ALL_BUT_EX |
- ((uint64_t)ex << SHIFT64(7)) |
- ((uint64_t)ex << SHIFT64(13))));
+ (CLK_STOP_CMD | CLK_THOLD_ALL | CLK_REGION_ALL));
PK_TRACE("Poll for cache clocks stopped via CPLT_STAT0[8]");
@@ -864,12 +866,10 @@ p9_sgpe_stop_entry()
}
while(!(scom_data.words.upper & BIT32(8)));
- PK_TRACE("Check core clock is stopped via CLOCK_STAT_SL[4-13]");
+ PK_TRACE("Check cache clock is stopped via CLOCK_STAT_SL[4-13]");
GPE_GETSCOM(GPE_SCOM_ADDR_QUAD(EQ_CLOCK_STAT_SL, qloop), scom_data.value);
- if (((~scom_data.value) & (CLK_REGION_ALL_BUT_EX |
- ((uint64_t)ex << SHIFT64(7)) |
- ((uint64_t)ex << SHIFT64(13)))) != 0)
+ if (((~scom_data.value) & CLK_REGION_ALL) != 0)
{
PK_TRACE("ERROR: Cache clock stop failed. HALT SGPE!");
PK_PANIC(SGPE_STOP_ENTRY_EQ_STOPCLK_FAILED);
@@ -881,11 +881,7 @@ p9_sgpe_stop_entry()
PK_TRACE("Assert partial good regional fences via CPLT_CTRL1[4-14]");
// Must cover partial bad fences as well or powerbus error will raise
// Note: Stop11 will lose all the fences so here needs to assert them
- GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL1_OR, qloop),
- (CLK_REGION_ALL_BUT_EX |
- ((uint64_t)ex << SHIFT64(7)) |
- ((uint64_t)ex << SHIFT64(9)) |
- ((uint64_t)ex << SHIFT64(13))));
+ GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_CPLT_CTRL1_OR, qloop), CLK_REGION_ALL);
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));
@@ -894,7 +890,7 @@ p9_sgpe_stop_entry()
PK_TRACE("Drop vdm enable via CPPM_VDMCR[0]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_VDMCR_CLR, qloop), BIT64(0));
- PK_TRACE_INF("SE11.D: Cache Clock Stopped");
+ PK_TRACE_INF("SE.11D: Cache Clock Stopped");
#if HW405292_NDD1_PCBMUX_FENCE_FIX
// Gate the PCBMux request so scanning doesn't cause random requests
@@ -907,7 +903,7 @@ p9_sgpe_stop_entry()
#if HW386311_DD1_PBIE_RW_PTR_STOP11_FIX
- PK_TRACE_INF("PBRW: Engage with PBIE Read/Write Pointer Scan Workaround");
+ PK_TRACE_DBG("PBRW: Engage with PBIE Read/Write Pointer Scan Workaround");
// bit4,5,11 = perv/eqpb/pbieq, bit59 = inex
PK_TRACE("PBRW: Setup scan register to select the ring");
@@ -1045,7 +1041,7 @@ p9_sgpe_stop_entry()
// vcs_pfet_force_state = 00 (Nop)
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_PFCS_CLR, qloop), BITS64(0, 4));
- PK_TRACE_INF("SE11.E: Cache Powered Off");
+ PK_TRACE_INF("SE.11E: Cache Powered Off");
}
#endif
@@ -1086,7 +1082,7 @@ p9_sgpe_stop_entry()
}
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ END OF STOP ENTRY +++++ +++++");
+ PK_TRACE("+++++ +++++ END OF STOP ENTRY +++++ +++++");
//--------------------------------------------------------------------------
//loop quad to clear qswu record
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c
index 1556aed1..f277d070 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_exit.c
@@ -50,6 +50,7 @@ extern SgpeStopRecord G_sgpe_stop_record;
void p9_sgpe_set_slvcfg_pm_disable(uint32_t qloop)
{
+ PK_TRACE_INF("Assert PM_DISABLE in SLAVE_CONFIG");
uint64_t l_scomData = 0;
uint32_t l_scomAddr = 0;
@@ -62,10 +63,11 @@ void p9_sgpe_set_slvcfg_pm_disable(uint32_t qloop)
l_scomData |= SLAVE_CONFIG_PM_DISABLE | SLAVE_CONFIG_PM_MUX_DISABLE;
GPE_PUTSCOM(l_scomAddr, l_scomData);
}
-
}
+
void p9_sgpe_clear_slvcfg_pm_disable(uint32_t qloop)
{
+ PK_TRACE_INF("Clear PM_DISABLE in SLAVE_CONFIG");
uint64_t l_scomData = 0;
uint32_t l_scomAddr = 0;
@@ -78,7 +80,6 @@ void p9_sgpe_clear_slvcfg_pm_disable(uint32_t qloop)
l_scomData &= ~SLAVE_CONFIG_PM_DISABLE & ~SLAVE_CONFIG_PM_MUX_DISABLE;
GPE_PUTSCOM(l_scomAddr, l_scomData);
}
-
}
#endif
@@ -299,7 +300,7 @@ p9_sgpe_stop_exit()
}
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ BEGIN OF STOP EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ BEGIN OF STOP EXIT +++++ +++++");
//--------------------------------------------------------------------------
if (G_sgpe_stop_record.group.ex_l[VECTOR_CONFIG] & BIT32(qloop))
@@ -350,12 +351,9 @@ p9_sgpe_stop_exit()
{
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ QUAD STOP EXIT [LEVEL 11-15] +++++ +++++");
+ PK_TRACE("+++++ +++++ QUAD STOP EXIT [LEVEL 11-15] +++++ +++++");
//--------------------------------------------------------------------------
- PK_TRACE_DBG("Check: quad[%d] m_l2[%d] m_pg[%d] Serviced by SX11FH",
- qloop, m_l2, m_pg);
-
PK_TRACE("Update STOP history on quad[%d]: in transition of exit",
qloop);
scom_data.words.lower = 0;
@@ -363,7 +361,6 @@ p9_sgpe_stop_exit()
GPE_PUTSCOM_VAR(PPM_SSHSRC, QUAD_ADDR_BASE, qloop, 0, scom_data.value);
#if HW405292_NDD1_PCBMUX_FENCE_FIX
- PK_TRACE_INF("Setting slvcfg %d", qloop);
// Gate the PCBMux request so scanning doesn't cause random requests
p9_sgpe_set_slvcfg_pm_disable(qloop);
#endif
@@ -373,19 +370,19 @@ p9_sgpe_stop_exit()
//=================================
// NOTE: it is required to serialize power on quad PFETs to prevent droop
- PK_TRACE_INF("SX11.A: Cache Poweron");
+ PK_TRACE_INF("SX.11A: Cache[%d] EX_PG[%d] Poweron", qloop, m_pg);
p9_hcd_cache_poweron(qloop);
//=========================
MARK_TRAP(SX_CHIPLET_RESET)
//=========================
- PK_TRACE_INF("SX11.B: Cache Chiplet Reset");
+ PK_TRACE_INF("SX.11B: Cache Chiplet Reset");
p9_hcd_cache_chiplet_reset(qloop, m_pg);
#if !SKIP_INITF
- PK_TRACE_INF("SX11.C: Cache Chiplet L3 DCC Setup");
+ PK_TRACE_DBG("Cache Chiplet L3 DCC Setup");
p9_hcd_cache_chiplet_l3_dcc_setup(qloop);
#endif
@@ -394,7 +391,7 @@ p9_sgpe_stop_exit()
#if !STOP_PRIME
#if !SKIP_INITF
- PK_TRACE_INF("SX11.D: Cache Gptr Time Initf");
+ PK_TRACE_INF("SX.11C: Cache Gptr/Time Initf");
p9_hcd_cache_gptr_time_initf(qloop);
#endif
@@ -405,17 +402,17 @@ p9_sgpe_stop_exit()
#if !SKIP_INITF
- PK_TRACE_INF("SX11.E: Cache Dpll Initf");
+ PK_TRACE_DBG("Cache Dpll Initf");
p9_hcd_cache_dpll_initf(qloop);
#endif
- PK_TRACE_INF("SX11.F: Cache Dpll Setup");
+ PK_TRACE_INF("SX.11D: Cache Dpll Setup");
p9_hcd_cache_dpll_setup(qloop);
#if !SKIP_INITF
- PK_TRACE_INF("SX11.G: Cache DCC Skewadjust Setup");
+ PK_TRACE_DBG("Cache DCC Skewadjust Setup");
p9_hcd_cache_dcc_skewadjust_setup(qloop);
#endif
@@ -437,12 +434,12 @@ p9_sgpe_stop_exit()
MARK_TAG(SX_CHIPLET_INITS, (32 >> qloop))
//=======================================
- PK_TRACE_INF("SX11.H: Cache Chiplet Init");
+ PK_TRACE_DBG("Cache Chiplet Init");
p9_hcd_cache_chiplet_init(qloop);
#if !SKIP_INITF
- PK_TRACE_INF("SX11.I: Cache Repair Initf");
+ PK_TRACE_INF("SX.11E: Cache Repair Initf");
p9_hcd_cache_repair_initf(qloop);
#endif
@@ -453,7 +450,7 @@ p9_sgpe_stop_exit()
#if !SKIP_ARRAYINIT
- PK_TRACE_INF("SX11.J: Cache Arrayinit");
+ PK_TRACE_INF("SX.11F: Cache Arrayinit");
p9_hcd_cache_arrayinit(qloop, m_pg);
#endif
@@ -471,7 +468,7 @@ p9_sgpe_stop_exit()
if (pCpmrHdrAddr->fusedModeStatus == 0xBB)
{
- PK_TRACE_INF("FUSED_CORE_MODE Flag is set in CPMR Header");
+ PK_TRACE_INF("WARNING: FUSED_CORE_MODE Flag is Set in CPMR Header");
for(cloop = 0; cloop < CORES_PER_QUAD; cloop++)
{
@@ -486,7 +483,7 @@ p9_sgpe_stop_exit()
#if FUSED_CORE_MODE_SCAN_FIX
- PK_TRACE_INF("FCMS: Engage with Fused Mode Scan Workaround");
+ PK_TRACE_DBG("FCMS: Engage with Fused Mode Scan Workaround");
if (m_pg & FST_EX_IN_QUAD)
{
@@ -507,7 +504,7 @@ p9_sgpe_stop_exit()
#if HW386311_DD1_PBIE_RW_PTR_STOP11_FIX
- PK_TRACE_INF("FCMS: Engage with PBIE Read/Write Pointer Scan Workaround");
+ PK_TRACE_DBG("PBRW: Engage with PBIE Read/Write Pointer Scan Workaround");
// bit4,5,11 = perv/eqpb/pbieq, bit59 = inex
PK_TRACE("PBRW: Setup scan register to select the ring");
@@ -581,7 +578,7 @@ p9_sgpe_stop_exit()
#if !SKIP_INITF
- PK_TRACE_INF("SX11.K: Cache Func Scan");
+ PK_TRACE_INF("SX.11G: Cache Func Scan");
p9_hcd_cache_initf(qloop);
#endif
@@ -591,7 +588,7 @@ p9_sgpe_stop_exit()
MARK_TAG(SX_CACHE_STARTCLOCKS, (32 >> qloop))
//===========================================
- PK_TRACE_INF("SX11.L: Cache Startclocks");
+ PK_TRACE_INF("SX.11H: Cache Startclocks");
p9_hcd_cache_startclocks(qloop, m_pg);
}
@@ -600,12 +597,9 @@ p9_sgpe_stop_exit()
{
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ EX STOP EXIT [LEVEL 8-10] +++++ +++++");
+ PK_TRACE("+++++ +++++ EX STOP EXIT [LEVEL 8-10] +++++ +++++");
//--------------------------------------------------------------------------
- PK_TRACE_DBG("Check: quad[%d] m_l2[%d] m_pg[%d] Serviced by SX8",
- qloop, m_l2, m_pg);
-
//========================================================
MARK_TAG(SX_L2_STARTCLOCKS, ((m_l2 << 6) | (32 >> qloop)))
//========================================================
@@ -614,16 +608,17 @@ p9_sgpe_stop_exit()
PK_TRACE("Switch L2 glsmux select to DPLL output via EXCGCR[34,35]");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(EQ_QPPM_EXCGCR_OR, qloop), BITS64(34, 2));
- PK_TRACE_INF("SX8.A: Cache L2 Startclocks");
+ PK_TRACE_INF("SX.8A: Cache[%d] EX_PG[%d] Start L2[%d] Clocks",
+ qloop, m_pg, m_l2);
p9_hcd_cache_l2_startclocks(qloop, m_l2, m_pg);
// for l2 scom init and restore that cannot be done via stop11
// as if that certain l2 wasnt exiting(thus lack of clock for scom)
- PK_TRACE_INF("SX8.B: Cache L2 Scominit");
+ PK_TRACE_INF("SX.8B: Cache L2 Scominit");
p9_hcd_cache_scominit(qloop, m_l2, 1);
- PK_TRACE_INF("SX8.C: Cache L2 Scomcust");
+ PK_TRACE_DBG("Cache L2 Scomcust");
p9_hcd_cache_scomcust(qloop, m_l2, 1);
// reset ex actual state if ex is exited.
@@ -646,8 +641,8 @@ p9_sgpe_stop_exit()
if (scom_data.words.upper & BIT32(0))
{
- PKTRACE("ERROR: Failed to Release Cache %d Clk Ctrl Atomic Lock. Register Content: %x",
- qloop, scom_data.words.upper);
+ PK_TRACE_INF("ERROR: Failed to Release Cache %d Clk Ctrl Atomic Lock. Register Content: %x",
+ qloop, scom_data.words.upper);
PK_PANIC(SGPE_STOP_EXIT_DROP_CLK_LOCK_FAILED);
}
}
@@ -660,12 +655,9 @@ p9_sgpe_stop_exit()
{
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ QUAD STOP EXIT CONTINUE +++++ +++++");
+ PK_TRACE("+++++ +++++ QUAD STOP EXIT CONTINUE +++++ +++++");
//--------------------------------------------------------------------------
- PK_TRACE_DBG("Check: quad[%d] m_l2[%d] m_pg[%d] Serviced by SX11SH",
- qloop, m_l2, m_pg);
-
for (ec_index = 0; ec_index < CORES_PER_QUAD; ec_index += 2)
{
@@ -701,15 +693,14 @@ p9_sgpe_stop_exit()
MARK_TAG(SX_SCOM_INITS, (32 >> qloop))
//====================================
- PK_TRACE_INF("SX11.M: Cache Scom Init");
+ PK_TRACE_INF("SX.11I: Cache Scom Init");
p9_hcd_cache_scominit(qloop, m_pg, 0);
- PK_TRACE_INF("SX11.N: Cache Scom Cust");
+ PK_TRACE_DBG("Cache Scom Cust");
p9_hcd_cache_scomcust(qloop, m_pg, 0);
#if HW405292_NDD1_PCBMUX_FENCE_FIX
- PK_TRACE_INF("Clearing SLVCNFG %d", qloop);
// Allow the CME to access the PCB Slave NET_CTRL registers
p9_sgpe_clear_slvcfg_pm_disable(qloop);
#endif
@@ -732,7 +723,6 @@ p9_sgpe_stop_exit()
// workaround has to use base address as read on OR/CLR leads to error
p9_dd1_db_unicast_wr(GPE_SCOM_ADDR_CORE(CPPM_CMEDB1,
((qloop << 2) + cloop)), BIT64(7));
- PK_TRACE_INF("SX11.O: Core DB1 to CME");
}
// Setting up cme_flags
@@ -899,9 +889,8 @@ p9_sgpe_stop_exit()
#if !SKIP_CME_BOOT_STOP11
uint16_t cmeBootList = (m_pg << SHIFT16(((qloop << 1) + 1)));
- PK_TRACE_DBG("Check: CmeBootList[%x]", cmeBootList);
+ PK_TRACE_INF("SX.CME: Booting Cme[%x]", cmeBootList);
boot_cme( cmeBootList );
- PK_TRACE_INF("SX11.P: Cmes booted");
#endif
@@ -909,10 +898,10 @@ p9_sgpe_stop_exit()
MARK_TAG(SX_RUNTIME_INITS, (32 >> qloop))
//=======================================
- PK_TRACE_INF("SX11.Q: Cache RAS Runtime Scom");
+ PK_TRACE_DBG("Cache RAS Runtime Scom");
p9_hcd_cache_ras_runtime_scom(qloop);
- PK_TRACE_INF("SX11.R: Cache OCC Runtime Scom");
+ PK_TRACE_DBG("Cache OCC Runtime Scom");
p9_hcd_cache_occ_runtime_scom(qloop);
//=========================
@@ -927,8 +916,8 @@ p9_sgpe_stop_exit()
if (scom_data.words.upper & BIT32(0))
{
- PKTRACE("ERROR: Failed to Release Cache %d PCB Slave Atomic Lock. Register Content: %x",
- qloop, scom_data.words.upper);
+ PK_TRACE_INF("ERROR: Failed to Release Cache %d PCB Slave Atomic Lock. Register Content: %x",
+ qloop, scom_data.words.upper);
PK_PANIC(SGPE_STOP_EXIT_DROP_SLV_LOCK_FAILED);
}
@@ -945,17 +934,15 @@ p9_sgpe_stop_exit()
}
//--------------------------------------------------------------------------
- PK_TRACE_INF("+++++ +++++ END OF STOP EXIT +++++ +++++");
+ PK_TRACE("+++++ +++++ END OF STOP EXIT +++++ +++++");
//--------------------------------------------------------------------------
if (qspwu & BIT32(0))
{
- PK_TRACE_DBG("Check: Quad[%d] will assert SPWU Done", qloop);
+ PK_TRACE_INF("SP.WU: Quad[%d] Assert SPWU_DONE", qloop);
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_GPMMR_OR, qloop), BIT64(0));
-
G_sgpe_stop_record.group.qswu[VECTOR_CONFIG] |= BIT32(qloop);
G_sgpe_stop_record.group.qswu[VECTOR_EXIT] &= ~BIT32(qloop);
- PK_TRACE_INF("SX0.A: Assert Quad SPWU Done");
}
// process core portion of core request
@@ -975,7 +962,7 @@ p9_sgpe_stop_exit()
if (!(scom_data.value & BIT64(13)))
{
- PKTRACE("ERROR.Q: core[%d] was not set before release",
+ PKTRACE("ERROR.A: core[%d] was not set before release",
((qloop << 2) + cloop));
pk_halt();
}
@@ -995,13 +982,12 @@ p9_sgpe_stop_exit()
#endif
- PK_TRACE_DBG("Check: Core[%d] will clear wakeup_notify_select",
+ PK_TRACE_INF("SX.CME: Core[%d] Switch CorePPM Wakeup Back to CME via CPMMR[13]",
((qloop << 2) + cloop));
p9_dd1_cppm_unicast_wr(
GPE_SCOM_ADDR_CORE(CPPM_CPMMR, ((qloop << 2) + cloop)),
GPE_SCOM_ADDR_CORE(CPPM_CPMMR_CLR, ((qloop << 2) + cloop)),
BIT64(13), CLR_OP);
- PK_TRACE_INF("SX0.B: Switch CorePPM Wakeup back to CME via CPMMR[13] qloop[%d] cloop[%d]", qloop, cloop);
}
PK_TRACE("Update QSSR: drop stop_exit_ongoing");
diff --git a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c
index 866993d9..7f9aed83 100644
--- a/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c
+++ b/import/chips/p9/procedures/ppe_closed/sgpe/stop_gpe/p9_sgpe_stop_irq_handlers.c
@@ -106,8 +106,9 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
// Disable type2/3/6 interrupt
out32(OCB_OIMR1_OR, (BITS32(15, 2) | BIT32(19)));
// Read type2/3/6 interrupt status
- cirq = (in32(OCB_OISR1) & BITS32(15, 2));
- qirq = (in32(OCB_OISR1) & BIT32(19));
+ qirq = in32(OCB_OISR1);
+ cirq = qirq & BITS32(15, 2);
+ qirq = qirq & BIT32(19);
// Clear type2/3/6 interrupt status
out32(OCB_OISR1_CLR, (cirq | qirq));
@@ -117,14 +118,14 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
{
cpending_t2 = in32(OCB_OPITNPRA(2));
out32(OCB_OPITNPRA_CLR(2), cpending_t2);
- PKTRACE("Type2: %x", cpending_t2);
+ PK_TRACE("Type2: %x", cpending_t2);
}
if (cirq & BIT32(16))
{
cpending_t3 = in32(OCB_OPITNPRA(3));
out32(OCB_OPITNPRA_CLR(3), cpending_t3);
- PKTRACE("Type3: %x", cpending_t3);
+ PK_TRACE("Type3: %x", cpending_t3);
}
if (qirq)
@@ -155,15 +156,15 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
// read payload on quad has interrupt pending
qpayload_t6 = in32(OCB_OPIT6QN(qloop));
- PK_TRACE_DBG("Q[%d] Payload [%x]", qloop, qpayload_t6);
+ PK_TRACE_DBG("Quad[%d] Payload [%x]", qloop, qpayload_t6);
if (qpayload_t6 & TYPE6_PAYLOAD_EXIT_EVENT)
{
- PK_TRACE_DBG("Q[%d] Request Special Wakeup", qloop);
+ PK_TRACE_DBG("Quad Request Special Wakeup");
if (G_sgpe_stop_record.group.qswu[VECTOR_CONFIG] & BIT32(qloop))
{
- PK_TRACE_DBG("Q[%d] Already in Special Wakeup", qloop);
+ PK_TRACE_DBG("Quad Already in Special Wakeup");
}
else
{
@@ -177,7 +178,7 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
}
else
{
- PK_TRACE_DBG("Q[%d] Drop Special Wakeup, Clearing Done", qloop);
+ PK_TRACE_DBG("Quad Drop Special Wakeup, Clearing Done");
GPE_PUTSCOM(GPE_SCOM_ADDR_QUAD(PPM_GPMMR_CLR, qloop), BIT64(0));
G_sgpe_stop_record.group.qswu[VECTOR_ENTRY] |= BIT32(qloop);
@@ -192,7 +193,7 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
continue;
}
- PK_TRACE_DBG("Q[%d] Has Core Request:", qloop);
+ PK_TRACE_DBG("Quad[%d] Has Core Request:", qloop);
PK_TRACE_DBG("Now clv[%d][%d][%d][%d]",
G_sgpe_stop_record.level[qloop][0],
G_sgpe_stop_record.level[qloop][1],
@@ -223,7 +224,7 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
cpayload_t3 = in32(OCB_OPIT3CN(((qloop << 2) + cloop)));
}
- PK_TRACE_INF("C[%d] Type2 Payload [%x] Type3 Payload [%x]",
+ PK_TRACE_INF("Core[%d] Type2 Payload [%x] Type3 Payload [%x]",
cloop, cpayload_t2, cpayload_t3);
GPE_GETSCOM(GPE_SCOM_ADDR_CORE(CPPM_CPMMR,
@@ -269,14 +270,13 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
// if t2 entry (t3 exit or empty)
else if (cpayload_t2 && (!(cpayload_t2 & TYPE2_PAYLOAD_EXIT_EVENT)))
{
-
if (!(scom_data & BIT64(13)))
{
PK_TRACE_INF("ERROR: Received Type2 Entry PIG When Wakeup_notify_select = 0");
PK_PANIC(SGPE_PIG_TYPE2_ENTRY_WNS_CME);
}
- PK_TRACE_INF("C[%d] Request Entry via Type2", cloop);
+ PK_TRACE_INF("Core[%d] Request Entry via Type2", cloop);
G_sgpe_stop_record.level[qloop][cloop] =
(cpayload_t2 & TYPE2_PAYLOAD_STOP_LEVEL);
G_sgpe_stop_record.group.core[VECTOR_ENTRY] |=
@@ -291,7 +291,7 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
PK_PANIC(SGPE_PIG_TYPE3_ENTRY_WNS_CME);
}
- PK_TRACE_INF("C[%d] Request Entry via Type3", cloop);
+ PK_TRACE_INF("Core[%d] Request Entry via Type3", cloop);
G_sgpe_stop_record.level[qloop][cloop] =
(cpayload_t3 & TYPE2_PAYLOAD_STOP_LEVEL);
G_sgpe_stop_record.group.core[VECTOR_ENTRY] |=
@@ -308,10 +308,14 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
PK_TRACE_INF("ERROR: Received Both Types of Exit PIG When Wakeup_notify_select = 0");
PK_PANIC(SGPE_PIG_TYPE23_EXIT_WNS_CME);
}
+ else
+ {
+ PK_TRACE_INF("WARNING: Received Phantom Exit PIG When Wakeup_notify_select = 0");
+ }
}
else
{
- PK_TRACE_INF("C[%d] Request Exit", cloop);
+ PK_TRACE_INF("Core[%d] Request Exit", cloop);
if (cloop < CORES_PER_EX)
{
@@ -336,7 +340,7 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
}
}
- PK_TRACE_DBG("New clv[%d][%d][%d][%d]",
+ PK_TRACE_DBG("New Core Levels[%d][%d][%d][%d]",
G_sgpe_stop_record.level[qloop][0],
G_sgpe_stop_record.level[qloop][1],
G_sgpe_stop_record.level[qloop][2],
@@ -381,7 +385,5 @@ p9_sgpe_stop_pig_handler(void* arg, PkIrqId irq)
PK_TRACE_INF("Unblock Entry");
pk_semaphore_post(&(G_sgpe_stop_record.sem[0]));
}
-
- PK_TRACE_INF("RFI");
}
}
OpenPOWER on IntegriCloud