summaryrefslogtreecommitdiffstats
path: root/src/include/usr
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/usr')
-rw-r--r--src/include/usr/isteps/nvdimm/nvdimm.H70
-rw-r--r--src/include/usr/isteps/nvdimm/nvdimmreasoncodes.H4
-rw-r--r--src/include/usr/targeting/common/util.H16
3 files changed, 74 insertions, 16 deletions
diff --git a/src/include/usr/isteps/nvdimm/nvdimm.H b/src/include/usr/isteps/nvdimm/nvdimm.H
index bfe39fcd0..c1df3033e 100644
--- a/src/include/usr/isteps/nvdimm/nvdimm.H
+++ b/src/include/usr/isteps/nvdimm/nvdimm.H
@@ -55,26 +55,29 @@ enum
void nvdimm_restore(TARGETING::TargetHandleList &i_nvdimmList);
#endif
+
/**
- * @brief This function arms the trigger to enable backup in the event
- * of power loss (DDR Reset_n goes low)
+ * @brief This function erases image on the nvdimm target
*
* @param[in] i_nvdimm - nvdimm target with NV controller
*
* @return errlHndl_t - Null if successful, otherwise a pointer to
* the error log.
*/
-errlHndl_t nvdimmArmResetN(TARGETING::Target *i_nvdimm);
+errlHndl_t nvdimmEraseNF(TARGETING::Target *i_nvdimm);
/**
- * @brief This function erases image on the nvdimm target
+ * @brief Set the status flag
*
- * @param[in] i_nvdimm - nvdimm target with NV controller
+ * @param[in] i_nvdimm - nvdimm target
+ *
+ * @param[in] i_status_flag - status flag to set for each nvdimm
*
- * @return errlHndl_t - Null if successful, otherwise a pointer to
- * the error log.
*/
-errlHndl_t nvdimmEraseNF(TARGETING::Target *i_nvdimm);
+void nvdimmSetStatusFlag(TARGETING::Target *i_nvdimm, const uint8_t i_status_flag);
+
+
+#ifdef __HOSTBOOT_RUNTIME
/**
* @brief Check nvdimm error state
@@ -86,14 +89,57 @@ errlHndl_t nvdimmEraseNF(TARGETING::Target *i_nvdimm);
bool nvdimmInErrorState(TARGETING::Target *i_nvdimm);
/**
- * @brief Set the status flag
+ * @brief This function arms the trigger to enable backup in the event
+ * of power loss (DDR Reset_n goes low)
*
- * @param[in] i_nvdimm - nvdimm target
+ * @param[in] i_nvdimm - nvdimm target with NV controller
*
- * @param[in] i_status_flag - status flag to set for each nvdimm
+ * @return errlHndl_t - Null if successful, otherwise a pointer to
+ * the error log.
+ */
+errlHndl_t nvdimmArmResetN(TARGETING::Target *i_nvdimm);
+
+/**
+ * @brief Arms the trigger to enable backup in the event of a power loss
+ * on each NVDIMM
+ *
+ * The trigger (DDR_RESETN to the DIMM) is used to tell the NVDIMM
+ * that we have an EPOW event, so the NV controller can backup the
+ * data from the DRAM to flash. This will enable the NV controller
+ * to react when it sees the trigger toggles.
*
+ * @param[in] i_nvdimmTargetList : list of dimms that are NVDIMMs
+ * @return true if no errors logged, else false
*/
-void nvdimmSetStatusFlag(TARGETING::Target *i_nvdimm, const uint8_t i_status_flag);
+bool nvdimmArm(TARGETING::TargetHandleList &i_nvdimmTargetList);
+
+
+/**
+ * @brief NVDIMM protection state
+ *
+ * NOT_PROTECTED - default state
+ * PROTECTED - switches to this when armed & OCC is in control
+ * UNPROTECTED_BECAUSE_ERROR - PRD detected error on NV controller
+ * Note: error will stay with target preventing PROTECTED status
+ * until power is cycled again
+ */
+enum nvdimm_protection_t
+{
+ NOT_PROTECTED = 0,
+ PROTECTED = 1,
+ UNPROTECTED_BECAUSE_ERROR = 2
+};
+
+/**
+ * @brief Notify PHYP of NVDIMM protection status
+ *
+ * @param i_target Processor with NVDIMM
+ * @param i_state Protection state of NVDIMM
+ */
+errlHndl_t notifyNvdimmProtectionChange(TARGETING::Target* i_target,
+ const nvdimm_protection_t i_state);
+#endif
+
}
#endif // NVDIMM_EXT_H__
diff --git a/src/include/usr/isteps/nvdimm/nvdimmreasoncodes.H b/src/include/usr/isteps/nvdimm/nvdimmreasoncodes.H
index bde22b942..0b48e94a0 100644
--- a/src/include/usr/isteps/nvdimm/nvdimmreasoncodes.H
+++ b/src/include/usr/isteps/nvdimm/nvdimmreasoncodes.H
@@ -72,7 +72,7 @@ enum nvdimmModuleId
NVDIMM_CHECK_ERASE = 0x16,
NVDIMM_ARM_ERASE = 0x17,
NVDIMM_CHECK_READY = 0x18,
-
+ NOTIFY_NVDIMM_PROTECTION_CHG = 0x19,
};
/**
@@ -111,7 +111,7 @@ enum nvdimmReasonCode
NVDIMM_ERASE_FAILED = NVDIMM_COMP_ID | 0x19, // Failure to erase
NVDIMM_RESTORE_FAILED = NVDIMM_COMP_ID | 0x1A, // Failure to restore
NVDIMM_NOT_READY = NVDIMM_COMP_ID | 0x1B, // NVDIMM not ready for host to access
-
+ NVDIMM_NULL_FIRMWARE_REQUEST_PTR = NVDIMM_COMP_ID | 0x1C, // Firmware request is NULL
};
enum UserDetailsTypes
diff --git a/src/include/usr/targeting/common/util.H b/src/include/usr/targeting/common/util.H
index 971408d16..e26e0c795 100644
--- a/src/include/usr/targeting/common/util.H
+++ b/src/include/usr/targeting/common/util.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2018 */
+/* Contributors Listed Below - COPYRIGHT 2012,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -38,6 +38,8 @@ namespace TARGETING
{
class Target;
+typedef Target* TargetHandle_t;
+typedef std::vector<TargetHandle_t> TargetHandleList;
/**
* @brief Macro which indicates whether to translate addresses or not
@@ -172,6 +174,7 @@ bool orderByNodeAndPosition( Target* i_firstProc,
*/
uint8_t is_fused_mode( );
+
/**
* @brief Determine if the given dimm target is an NVDIMM
*
@@ -181,6 +184,15 @@ uint8_t is_fused_mode( );
*/
bool isNVDIMM( TARGETING::Target * i_target );
-}
+/**
+ * @brief Grab list of NVDIMMs under the processor
+ *
+ * @param[in] i_proc : processor under which to search for NVDIMMs
+ *
+ * @return List of DIMM targets that are NVDIMMs
+ */
+TARGETING::TargetHandleList getProcNVDIMMs( TARGETING::Target * i_proc );
+
+} // TARGETING
#endif // __TARGETING_COMMON_UTIL_H
OpenPOWER on IntegriCloud