summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/usr/errl/errlentry.H17
-rw-r--r--src/include/usr/errl/errludcallout.H16
-rw-r--r--src/include/usr/hwas/common/hwasCallout.H49
3 files changed, 74 insertions, 8 deletions
diff --git a/src/include/usr/errl/errlentry.H b/src/include/usr/errl/errlentry.H
index fc06f7b4e..7da534152 100644
--- a/src/include/usr/errl/errlentry.H
+++ b/src/include/usr/errl/errlentry.H
@@ -423,6 +423,23 @@ public:
void removeBackTrace();
/**
+ * @brief Add a clock callout.
+ * The i_target is used to identify the actual clock to callout because
+ * some systems have multiple clocks of a given type. This target is
+ * usually a chip target, but can possibly be a unit, depending on
+ * the clock type.
+ *
+ * @param[in] i_target The hardware target fed by the clock
+ * @param[in] i_clockType The hardware clock type
+ * @param[in] i_priority Priority of the callout
+ *
+ * @return void
+ */
+ void addClockCallout(const TARGETING::Target *i_target,
+ const HWAS::clockTypeEnum i_clockType,
+ const HWAS::callOutPriority i_priority);
+
+ /**
* @brief Add a bus callout
*
* @param[in] i_target1 The hardware bus endpoint target1
diff --git a/src/include/usr/errl/errludcallout.H b/src/include/usr/errl/errludcallout.H
index 80530edd2..cd093b2e4 100644
--- a/src/include/usr/errl/errludcallout.H
+++ b/src/include/usr/errl/errludcallout.H
@@ -52,6 +52,22 @@ class ErrlUserDetailsCallout : public ErrlUserDetails
public:
/**
+ * @brief Construct a clock callout user detail
+ *
+ * @param[in] i_pTargetData The hardware target data
+ * @param[in] i_targetDataLength length of i_pTargetData
+ * @param[in] i_clockType clock type Enum
+ * @param[in] i_priority Priority of the callout
+ *
+ * @return void
+ */
+ ErrlUserDetailsCallout(
+ const void *i_pTargetData,
+ uint32_t i_targetDataLength,
+ const HWAS::clockTypeEnum i_clockType,
+ const HWAS::callOutPriority i_priority);
+
+ /**
* @brief Construct a bus callout user detail
*
* @param[in] i_pTarget1Data The hardware target1 data
diff --git a/src/include/usr/hwas/common/hwasCallout.H b/src/include/usr/hwas/common/hwasCallout.H
index e267ea2b8..f54c31fc2 100644
--- a/src/include/usr/hwas/common/hwasCallout.H
+++ b/src/include/usr/hwas/common/hwasCallout.H
@@ -110,10 +110,19 @@ enum busTypeEnum
PSI_BUS_TYPE = 6
};
+enum clockTypeEnum
+{
+ TODCLK_TYPE = 1,
+ MEMCLK_TYPE = 2,
+ OSCREFCLK_TYPE = 3,
+ OSCPCICLK_TYPE = 4,
+};
+
//
const uint8_t HW_CALLOUT = 0x01;
const uint8_t PROCEDURE_CALLOUT = 0x02;
const uint8_t BUS_CALLOUT = 0x03;
+const uint8_t CLOCK_CALLOUT = 0x04;
const uint8_t TARGET_IS_SENTINEL = 0xF0;
@@ -121,18 +130,24 @@ typedef struct callout_ud
{
uint8_t type;
uint8_t pad[3];
- callOutPriority priority; // uint32_t
+ callOutPriority priority; // uint32_t
union {
- struct { // deconfigure / gard
- DeconfigEnum deconfigState; // uint32_t
- GARD_ErrorType gardErrorType; // uint32_t
+ struct { // type == HW_CALLOUT
+ DeconfigEnum deconfigState; // uint32_t
+ GARD_ErrorType gardErrorType; // uint32_t
uint32_t cpuid;
+ // one Target will follow
};
- struct { // callout
- epubProcedureID procedure; // uint32_t
+ struct { // type == PROCEDURE_CALLOUT
+ epubProcedureID procedure; // uint32_t
};
- struct {
- busTypeEnum busType;
+ struct { // type == BUS_CALLOUT
+ busTypeEnum busType; // uint32_t
+ // two Targets will follow
+ };
+ struct { // type == CLOCK_CALLOUT
+ clockTypeEnum clockType; // uint32_t
+ // one Target will follow
};
};
} callout_ud_t;
@@ -213,6 +228,24 @@ errlHndl_t platHandleBusCallout(
callOutPriority i_priority,
errlHndl_t &io_errl);
+/**
+ * @brief platform specific code to handle a clock callout that has been
+ * found in an errlog
+ *
+ * @param[in] i_pTarget target
+ * @param[in] i_clockType Enum indicating which type of clock
+ * @param[in] i_priority Enum indicating the priority of the callout
+ * @param[in] io_errl reference to errlHnld for this errlog
+ *
+ * @return errlHndl_t valid errlHndl_t handle if there was an error,
+ * NULL if no errors;
+ */
+errlHndl_t platHandleClockCallout(
+ TARGETING::Target *i_pTarget,
+ clockTypeEnum i_clockType,
+ callOutPriority i_priority,
+ errlHndl_t &io_errl);
+
#endif // not PARSER
}; // end namespace
OpenPOWER on IntegriCloud