summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Vanderpool <vanderp@us.ibm.com>2017-11-04 16:34:54 -0500
committerJoshua Hunsberger <jahunsbe@us.ibm.com>2017-11-17 15:06:46 -0600
commit6ec15f3d2d8fd652e1ce89cf105220a0a8274092 (patch)
tree71dd02e34fea39cccd032ed883f4530d86a3aec2
parent533c7251d97b2565d90c70c113e53f9e3b9f5e88 (diff)
downloadtalos-hcode-6ec15f3d2d8fd652e1ce89cf105220a0a8274092.tar.gz
talos-hcode-6ec15f3d2d8fd652e1ce89cf105220a0a8274092.zip
PM: Retry DIRECT_CONTROLS write of PLS after stop 2 exit
Key_Cronus_Test=PM_REGRESS Change-Id: I6870df4ffb75fe3342c6a42dcc40fa867245fe1b CQ: SW404478 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/49272 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Cronus HW CI <cronushw-ci+hostboot@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-by: 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/cme/stop_cme/p9_cme_stop_exit.c20
1 files changed, 20 insertions, 0 deletions
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 ad5286a8..5ebbda95 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
@@ -68,8 +68,11 @@ p9_cme_stop_exit_end(uint32_t core, uint32_t spwu_stop)
uint32_t thread = 0;
uint32_t temp_dsl = 0;
uint32_t core_index = 0;
+#else
+ uint32_t saved_msr = 0;
#endif
+
//--------------------------------------------------------------------------
PK_TRACE_PERF("+++++ +++++ END OF STOP EXIT +++++ +++++");
//--------------------------------------------------------------------------
@@ -222,7 +225,24 @@ p9_cme_stop_exit_end(uint32_t core, uint32_t spwu_stop)
SOME_STATE_LOSS_BUT_NOT_TIMEBASE : NO_STATE_LOSS)));
}
+
+ // Treat the first write with suspicion due to a bug in the PSCOM macro when a previous scom has timed out
+ saved_msr = mfmsr();
+ mtmsr( saved_msr | MSR_SEM4); // Mask off timeout
+
CME_PUTSCOM(DIRECT_CONTROLS, core_mask, scom_data.value);
+
+ if ((mfmsr() & MSR_SIBRC) != 0)
+ {
+ // The second write should never fail. Unmask the error
+ mtmsr(saved_msr);
+ CME_PUTSCOM(DIRECT_CONTROLS, core_mask, scom_data.value);
+ }
+ else
+ {
+ mtmsr(saved_msr);
+ }
+
}
}
OpenPOWER on IntegriCloud