summaryrefslogtreecommitdiffstats
path: root/src/import/hwpf/fapi2/include/error_info_defs.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/hwpf/fapi2/include/error_info_defs.H')
-rw-r--r--src/import/hwpf/fapi2/include/error_info_defs.H58
1 files changed, 52 insertions, 6 deletions
diff --git a/src/import/hwpf/fapi2/include/error_info_defs.H b/src/import/hwpf/fapi2/include/error_info_defs.H
index 2f6db98c..66e8a83a 100644
--- a/src/import/hwpf/fapi2/include/error_info_defs.H
+++ b/src/import/hwpf/fapi2/include/error_info_defs.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER sbe Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2015,2017 */
+/* Contributors Listed Below - COPYRIGHT 2015,2018 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -160,6 +160,24 @@ enum ErrorInfoType
EI_LAST_TYPE = EI_TYPE_COLLECT_TRACE + 1,
};
+// @brief used when translating the SBE targets instance into a fapi pos.
+enum maxTargetsPerProc : uint16_t
+{
+ MAX_MCBIST_PER_PROC = 2,
+ MAX_MC_PER_PROC = 2,
+ MAX_MI_PER_PROC = 4,
+ MAX_MCS_PER_PROC = 4,
+ MAX_EQ_PER_PROC = 6,
+ MAX_MCA_PER_PROC = 8,
+ MAX_PHB_PER_PROC = 6,
+ MAX_EX_PER_PROC = 12,
+ MAX_CORE_PER_PROC = 24,
+ MAX_PERV_PER_PROC = 56,
+ INVALID_TARGET_COUNT = 0xFFFF,
+ INVALID_FAPI_POS = INVALID_TARGET_COUNT,
+};
+
+
#ifndef MINIMUM_FFDC
///
/// @enum HwCallout
@@ -251,10 +269,21 @@ enum CollectTrace
};
}
+// @brief convert the processor relative sbe target instance into a fapi pos
+//
+// @param[in] i_targType - type of target from SBE FFDC buffer
+// @param[in] i_proc - current SBE processor number
+// @param[in] i_instance - instance of i_targType relitive to the processor
+// number i_proc.
+//
+uint16_t convertSbeTargInstanceToFapiPos(fapi2::TargetType i_targType,
+ fapi2::Target<TARGET_TYPE_PROC_CHIP>& i_proc, uint16_t i_instance);
+
// NOTE - this assumes no buffer_t or variable_buffers are passed
// data is converted to a uint64_t when placed into the sbe ffdc
// buffer
-inline fapi2::ffdc_t getFfdcData( sbeFfdc_t& i_sbeFfdc, bool& invalid_data )
+inline fapi2::ffdc_t getFfdcData( sbeFfdc_t& i_sbeFfdc, uint8_t i_proc_instance,
+ bool& invalid_data )
{
fapi2::ffdc_t l_ffdc;
@@ -264,15 +293,32 @@ inline fapi2::ffdc_t getFfdcData( sbeFfdc_t& i_sbeFfdc, bool& invalid_data )
{
#ifdef FAPI2_ENABLE_PLATFORM_GET_TARGET
uint64_t targetData = i_sbeFfdc.data;
+ // get a fapi target for the passed in proc instance
+ auto l_proc =
+ getTarget<TARGET_TYPE_PROC_CHIP>(i_proc_instance);
+
fapi2::TargetType type = static_cast<fapi2::TargetType>(targetData >> 32);
- uint8_t instance = static_cast<uint8_t>(targetData & 0xFFFFFFFF);
- // call hostboot to get the fapi2 target reference
- l_ffdc.ptr() = static_cast<void*>(getTarget<TARGET_TYPE_ALL>(type, instance));
- if(l_ffdc.ptr() == nullptr )
+ // sbe returns the target instance based on processor scope,
+ // we will need to convert that number to system scope (FAPI_POS)
+ uint16_t instance = static_cast<uint16_t>(targetData & 0xFFFFFFFF);
+
+ uint16_t fapi_pos = convertSbeTargInstanceToFapiPos(type, l_proc, instance);
+
+ if( fapi_pos == INVALID_FAPI_POS )
{
invalid_data = true;
}
+ else
+ {
+ // call hostboot to get the fapi2 target pointer
+ l_ffdc.ptr() = static_cast<void*>(getTarget<TARGET_TYPE_ALL>(type, fapi_pos));
+
+ if(l_ffdc.ptr() == nullptr )
+ {
+ invalid_data = true;
+ }
+ }
#endif
}
OpenPOWER on IntegriCloud