summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormbroyles <mbroyles@us.ibm.com>2018-03-30 16:17:12 -0500
committerMartha Broyles <mbroyles@us.ibm.com>2018-04-02 09:34:43 -0400
commitb57b1a9333a52fb728c14fd3c56633494b64b05b (patch)
tree6eda1626375380729ff72a756906c12e233baedf
parent1bbbfec92b3a3744a6ffbc5e9f4a4eb46ca4abd1 (diff)
downloadtalos-occ-b57b1a9333a52fb728c14fd3c56633494b64b05b.tar.gz
talos-occ-b57b1a9333a52fb728c14fd3c56633494b64b05b.zip
Prevent Nimbus tasks from running prior to knowing memory type
Change-Id: I8c4a3566f111235a50066a06f3b4f9153f9fcd3b Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/56539 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Christopher J. Cain <cjcain@us.ibm.com> Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com> Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
-rwxr-xr-xsrc/occ_405/amec/amec_slave_smh.c2
-rwxr-xr-xsrc/occ_405/cmdh/cmdh_fsp_cmds.c3
-rw-r--r--src/occ_405/dimm/dimm.h5
-rwxr-xr-xsrc/occ_405/occ_sys_config.c2
-rwxr-xr-xsrc/occ_405/timer/timer.c20
5 files changed, 17 insertions, 15 deletions
diff --git a/src/occ_405/amec/amec_slave_smh.c b/src/occ_405/amec/amec_slave_smh.c
index 703c9a2..d6fdcdf 100755
--- a/src/occ_405/amec/amec_slave_smh.c
+++ b/src/occ_405/amec/amec_slave_smh.c
@@ -429,7 +429,7 @@ void amec_slv_common_tasks_post(void)
// Call amec_power_control
amec_power_control();
- if (MEM_TYPE_CUMULUS != G_sysConfigData.mem_type)
+ if (MEM_TYPE_NIMBUS == G_sysConfigData.mem_type)
{
// Nimbus only
// Apply memory power control, if needed.
diff --git a/src/occ_405/cmdh/cmdh_fsp_cmds.c b/src/occ_405/cmdh/cmdh_fsp_cmds.c
index c1cfd8e..3249962 100755
--- a/src/occ_405/cmdh/cmdh_fsp_cmds.c
+++ b/src/occ_405/cmdh/cmdh_fsp_cmds.c
@@ -2098,9 +2098,6 @@ errlHndl_t cmdh_tmgt_get_field_debug_data(const cmdh_fsp_cmd_t * i_cmd_ptr,
}
else
{
- TRAC_INFO("get_field_debug_data: Numbers of sensors found[%u]",
- l_num_of_sensors);
-
// Populate the response data packet
l_resp_ptr->num_sensors = l_num_of_sensors;
for (i=0; i<l_num_of_sensors; i++)
diff --git a/src/occ_405/dimm/dimm.h b/src/occ_405/dimm/dimm.h
index 894fc4d..431338f 100644
--- a/src/occ_405/dimm/dimm.h
+++ b/src/occ_405/dimm/dimm.h
@@ -74,8 +74,9 @@ typedef enum
typedef enum
{
- MEM_TYPE_CUMULUS = 0x00,
- MEM_TYPE_NIMBUS = 0xFF
+ MEM_TYPE_UNKNOWN = 0x00,
+ MEM_TYPE_CUMULUS = 0xCC,
+ MEM_TYPE_NIMBUS = 0xFF // Nimbus must be 0xFF per interface with (H)TMGT
} MEMORY_TYPE;
// Generic memory initialization to handle init for all memory types
diff --git a/src/occ_405/occ_sys_config.c b/src/occ_405/occ_sys_config.c
index 93f0805..c3b5839 100755
--- a/src/occ_405/occ_sys_config.c
+++ b/src/occ_405/occ_sys_config.c
@@ -203,7 +203,7 @@ occSysConfigData_t G_sysConfigData =
// -----------------------------------------------------------
.centaur_huids = {0},
.dimm_huids = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}},
- .mem_type = MEM_TYPE_NIMBUS,
+ .mem_type = MEM_TYPE_UNKNOWN,
.dimm_i2c_engine = PIB_I2C_ENGINE_E,
.ips_mem_pwr_ctl = MEM_PWR_CTL_OFF,
.default_mem_pwr_ctl = MEM_PWR_CTL_OFF,
diff --git a/src/occ_405/timer/timer.c b/src/occ_405/timer/timer.c
index 17194b2..6716858 100755
--- a/src/occ_405/timer/timer.c
+++ b/src/occ_405/timer/timer.c
@@ -144,12 +144,8 @@ void initWatchdogTimers()
commitErrl(&l_err);
}
- // initialize memory deadman timer's IPC task
- if(G_sysConfigData.mem_type == MEM_TYPE_NIMBUS)
- {
- // Initialize the GPE1 IPC task that resets the deadman timer.
- init_mem_deadman_reset_task();
- }
+ // We can't initialize memory here since we do not know what type of memory we have
+ // until comm is established with (H)TMGT to tell us
}
// Function Specification
@@ -208,7 +204,7 @@ void init_mem_deadman_reset_task(void)
0 //userdata2
);
- CHECKPOINT_FAIL_AND_HALT(l_err);
+ REQUEST_RESET(l_err); //This will add a firmware callout for us
}
}
@@ -272,7 +268,7 @@ void task_poke_watchdogs(struct task * i_self)
// then it is completed. Then if there is a new task to be scheduled
// for this cycle, then schedule it on the GPE1 engine. This task
// is also used to collect memory performance measurements.
-// Called every 500us.
+// Called every 500us. This should only be called on NIMBUS!
//
// End Function Specification
@@ -293,6 +289,14 @@ void manage_mem_deadman_task(void)
static bool L_gpe_idle_traced = false;
static bool L_gpe_timeout_logged = false;
static bool L_gpe_had_1_tick = false;
+ static bool L_init_complete = false;
+
+ if(!L_init_complete)
+ {
+ // Initialize the GPE1 IPC task that resets the deadman timer.
+ init_mem_deadman_reset_task();
+ L_init_complete = true;
+ }
// There is no way to synchronously start or stop the counter, so must
// take the difference between two readings.
OpenPOWER on IntegriCloud