summaryrefslogtreecommitdiffstats
path: root/src/include/usr/sbe
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2018-06-28 16:54:16 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-07-19 15:35:30 -0500
commitbe6ed717c7a1de17f3934ed229b64c30f7a9e58b (patch)
tree6db151f880ded4fce78a9314ea256e886213ebe6 /src/include/usr/sbe
parentba8d9b8321dd40f157753247111b0a969152af34 (diff)
downloadblackbird-hostboot-be6ed717c7a1de17f3934ed229b64c30f7a9e58b.tar.gz
blackbird-hostboot-be6ed717c7a1de17f3934ed229b64c30f7a9e58b.zip
Only switch sides and perform hreset if SEEPROM side versions match
In the event that the SBE fails hostboot will attempt to recover it. During runtime hostboot will attempt an HRESET if the SBE is in a failed state. When the SBE performs the HRESET it will save some important information that will persist through the reset. If one side is failing to recover the retry code will attempt to switch sides and do the hreset. If the SBE seeproms have different versions of the SBE code the data that was supposed to persist through the HRESET will be in incorrect places because the version mismatch. Because of this we cannot switch seeprom sides and perform a hreset if the seeproms have different level of the SBE code. CQ: SW438029 Change-Id: Ic7078a886088cc4d5355cc076e72d0fc36f85027 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/61605 Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/include/usr/sbe')
-rw-r--r--src/include/usr/sbe/sbe_update.H12
-rw-r--r--src/include/usr/sbe/sbeif.H12
2 files changed, 24 insertions, 0 deletions
diff --git a/src/include/usr/sbe/sbe_update.H b/src/include/usr/sbe/sbe_update.H
index d907e57c9..f4dc648b7 100644
--- a/src/include/usr/sbe/sbe_update.H
+++ b/src/include/usr/sbe/sbe_update.H
@@ -541,6 +541,18 @@ namespace SBE
const uint64_t i_boundary,
uint8_t* o_dst);
+ /**
+ * @brief Read the version of code found on each of the SBE's seeproms
+ * and store values in sbeTargetState_t type
+ *
+ * @param[in] io_sbeState Struct holding SBE related information
+ * @pre it is expected that the member 'target' in the
+ * sbeTargetState_t struct is set prior to calling this function
+ *
+ * @return errlHndl_t if error, nullptr if no error
+ */
+ errlHndl_t getSeepromVersions(sbeTargetState_t& io_sbeState);
+
/**
* @brief Removes ECC from a block of code or data. Removes padding at
diff --git a/src/include/usr/sbe/sbeif.H b/src/include/usr/sbe/sbeif.H
index 0a5985253..3f69d8ff1 100644
--- a/src/include/usr/sbe/sbeif.H
+++ b/src/include/usr/sbe/sbeif.H
@@ -136,6 +136,18 @@ namespace SBE
SHA512_t o_hash,
const void * i_image_ptr = nullptr);
+ /**
+ * @brief Loop through all active processor targets and compare both sides of
+ * the processor's SBE's seeprom versions. Mark down in the attribute
+ * ATTR_HB_SBE_SEEPROM_VERSION_MATCH whether or not the versions match.
+ * This value is used later on to determine if it is safe to switch
+ * seeprom sides in the event that we attempt to recover the SBE from
+ * a failed state.
+ *
+ * @return errlHndl_t Error log handle on failure; otherwise nullptr
+ */
+ errlHndl_t querySbeSeepromVersions();
+
} //end namespace SBE
#endif /* _SBEIF_H */
OpenPOWER on IntegriCloud