summaryrefslogtreecommitdiffstats
path: root/src/occ_405/timer
diff options
context:
space:
mode:
authorChris Cain <cjcain@us.ibm.com>2017-04-21 16:10:12 -0500
committerChristopher J. Cain <cjcain@us.ibm.com>2017-04-25 15:45:49 -0400
commit7da6a9afd506f8854972bbf4325b2e88abfcc2ce (patch)
tree0842cf19f77bc036bd42ba9cc9fc40fcb7ddf39b /src/occ_405/timer
parente0db9bf273420ef90e63815a5af2170f5e346cd0 (diff)
downloadtalos-occ-7da6a9afd506f8854972bbf4325b2e88abfcc2ce.tar.gz
talos-occ-7da6a9afd506f8854972bbf4325b2e88abfcc2ce.zip
Enable PGPE support on hardware
Change-Id: Id709ec36d82a2b6c03b1a4b901cf64f45f241d36 RTC: 163934 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39562 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com> Reviewed-by: Andres A. Lugo-Reyes <aalugore@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com>
Diffstat (limited to 'src/occ_405/timer')
-rwxr-xr-xsrc/occ_405/timer/timer.c83
1 files changed, 47 insertions, 36 deletions
diff --git a/src/occ_405/timer/timer.c b/src/occ_405/timer/timer.c
index 9695a18..ba25a54 100755
--- a/src/occ_405/timer/timer.c
+++ b/src/occ_405/timer/timer.c
@@ -22,7 +22,6 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-
//*************************************************************************/
// Includes
//*************************************************************************/
@@ -250,13 +249,10 @@ void task_poke_watchdogs(struct task * i_self)
if(true == L_check_pgpe_beacon)
{
// Examine pgpe Beacon every other call (every 4ms)
- //@TODO: remove when PGPE code is integrated, RTC: 163934
-#ifdef PGPE_SUPPORT
if(!G_simics_environment) // PGPE Beacon is not implemented in simics
{
check_pgpe_beacon();
}
-#endif
}
// toggle pgpe beacon check flag, check only once every other call (every 4ms)
@@ -471,12 +467,14 @@ void check_pgpe_beacon(void)
static bool L_first_pgpe_beacon_check = true; // First time examining Beacon?
static bool L_pgpe_beacon_unchanged_4ms = false; // pgpe beacon unchanged once (4ms)
static bool L_error_logged = false; // trace and error log only once
- errlHndl_t l_err = NULL; // Error handler
+ //errlHndl_t l_err = NULL; // Error handler
+ static bool L_unchanged_traced = false;
+ static int L_unchanged_count = 0;
do
{
- // return PGPE Beacon
- pgpe_beacon = in32(G_pgpe_header.beacon_sram_addr);
+ // return PGPE Beacon (use non-cachable address)
+ pgpe_beacon = in32(G_pgpe_header.beacon_sram_addr & 0xF7FFFFFF);
// in first invocation, just initialize L_prev_pgpe_beacon
// don't check if the PGPE Beacon value changed
@@ -491,51 +489,64 @@ void check_pgpe_beacon(void)
// that PGPE Beacon has changed relative to previous reading
if(pgpe_beacon == L_prev_pgpe_beacon)
{
+ ++L_unchanged_count;
if(false == L_pgpe_beacon_unchanged_4ms)
{
// First time beacon unchaged (4ms), mark flag
L_pgpe_beacon_unchanged_4ms = true;
+ if(L_unchanged_traced == false)
+ {
+ TRAC_ERR("Error PGPE Beacon didnt change for 4ms: 0x%08X", pgpe_beacon);
+ L_unchanged_traced = true;
+ }
break;
}
- else if (false == L_error_logged)
+ else
{
- L_error_logged = true;
-
// Second time beacon unchanged (8ms), log timeout error
- TRAC_ERR("Error PGPE Beacon didn't change for 8 ms: %d",
- pgpe_beacon);
- /*
- * @errortype
- * @moduleid POKE_WD_TIMERS
- * @reasoncode PGPE_FAILURE
- * @userdata1 PGPE Beacon Value
- * @userdata2 PGPE Beacon Address
- * @userdata4 ERC_PGPE_BEACON_TIMEOUT
- * @devdesc PGPE Beacon timeout
- */
- l_err = createErrl(POKE_WD_TIMERS, // mod id
- PGPE_FAILURE, // reason code
- ERC_PGPE_BEACON_TIMEOUT, // Extended reason code
- ERRL_SEV_UNRECOVERABLE, // severity
- NULL, // trace buffer
- DEFAULT_TRACE_SIZE, //Trace Size
- pgpe_beacon, // userdata1
- G_pgpe_header.beacon_sram_addr); // userdata2
-
- // TODO: RTC 170963 - re-enable reset when beacon starts working
+ if (false == L_error_logged)
+ {
+ TRAC_ERR("Error PGPE Beacon didn't change for 8 ms: 0x%08X", pgpe_beacon);
+ L_error_logged = true;
+ // TODO: RTC 170963 - re-enable reset when beacon starts working
#if 0
- // Commit error log and request reset
- REQUEST_RESET(l_err);
-#else
- // Commit error log
- commitErrl(&l_err);
+ /*
+ * @errortype
+ * @moduleid POKE_WD_TIMERS
+ * @reasoncode PGPE_FAILURE
+ * @userdata1 PGPE Beacon Value
+ * @userdata2 PGPE Beacon Address
+ * @userdata4 ERC_PGPE_BEACON_TIMEOUT
+ * @devdesc PGPE Beacon timeout
+ */
+ l_err = createErrl(POKE_WD_TIMERS, // mod id
+ PGPE_FAILURE, // reason code
+ ERC_PGPE_BEACON_TIMEOUT, // Extended reason code
+ ERRL_SEV_UNRECOVERABLE, // severity
+ NULL, // trace buffer
+ DEFAULT_TRACE_SIZE, //Trace Size
+ pgpe_beacon, // userdata1
+ G_pgpe_header.beacon_sram_addr); // userdata2
+
+ // Commit error log and request reset
+ REQUEST_RESET(l_err);
#endif
+ }
}
}
else
{
+ if (L_pgpe_beacon_unchanged_4ms)
+ {
+ if (L_unchanged_traced)
+ {
+ TRAC_ERR("check_pgpe_beacon: PGPE Beacon changed: 0x%08X (after %d calls)", pgpe_beacon, L_unchanged_count);
+ L_unchanged_traced = false;
+ }
+ }
// pgpe beacon changed over the last 4 ms
L_pgpe_beacon_unchanged_4ms = false;
+ L_unchanged_count = 0;
}
} while(0);
OpenPOWER on IntegriCloud