summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C')
-rwxr-xr-xsrc/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C180
1 files changed, 180 insertions, 0 deletions
diff --git a/src/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C b/src/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C
new file mode 100755
index 000000000..d89743270
--- /dev/null
+++ b/src/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C
@@ -0,0 +1,180 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/hwpf/hwp/winkle_ring_accessors/getL3DeltaDataAttr.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2013 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
+// $Id: getL3DeltaDataAttr.C,v 1.4 2013/12/13 14:46:30 mjjones Exp $
+/**
+ * @file getL3DeltaDataAttr.C
+ *
+ * @brief fetch processor ex func l3 delta data attributes based on chip type,
+ * EC and PROC_PBIEX_ASYNC_SEL value from static arrays in
+ * fapiL3DeltaDataAttr.H
+ *
+ */
+
+#include <stdint.h>
+
+// fapi support
+#include <fapi.H>
+#include <getL3DeltaDataAttr.H>
+#include <fapiL3DeltaDataAttr.H>
+
+// Logic overview
+
+// Define and initialize variables
+// Get chip type
+// Get EC level
+// Get PROC_PBIEX_ASYNC_SEL attr
+// Use chip & ec to select array entry and selection attr to select data array
+// entry
+// Set return delta data attr value
+
+extern "C"
+{
+
+fapi::ReturnCode getL3DeltaDataAttr( const fapi::Target &i_fapiTarget,
+ uint32_t (&o_data)[DELTA_DATA_SIZE])
+{
+ FAPI_INF("getL3DeltaDataAttr: entry" );
+
+ // Initialize return values to 0x00
+ memset(o_data, 0x00, sizeof(o_data));
+
+ // Define and initialize variables
+
+ uint8_t i = 0;
+ uint8_t l_attrDdLevel = 0;
+ fapi::TargetType l_targetType = fapi::TARGET_TYPE_NONE;
+ fapi::ATTR_NAME_Type l_chipType = 0x00;
+ fapi::ATTR_PROC_PBIEX_ASYNC_SEL_Type l_selection = 0;
+ fapi::ReturnCode rc;
+
+ // Get attributes used to determine delta data
+
+ do
+ {
+ // Verify input target is a processor
+ l_targetType = i_fapiTarget.getType();
+ if (l_targetType != fapi::TARGET_TYPE_PROC_CHIP)
+ {
+ FAPI_ERR("getL3DeltaDataAttr: Invalid target type passed on "
+ "invocation. target type=0x%08X ",
+ static_cast<uint32_t>(l_targetType));
+ // Return error on get attr
+ fapi::TargetType & TARGET_TYPE = l_targetType;
+ FAPI_SET_HWP_ERROR(rc, RC_GET_L3_DELTA_DATA_PARAMETER_ERR );
+ break;
+ }
+
+ // Get chip type
+ rc = FAPI_ATTR_GET_PRIVILEGED(ATTR_NAME,
+ &i_fapiTarget,
+ l_chipType);
+ if (rc)
+ {
+ FAPI_ERR("getL3DeltaDataAttr: FAPI_ATTR_GET_PRIVILEGED of "
+ "ATTR_NAME failed w/rc=0x%08X",
+ static_cast<uint32_t>(rc));
+ break;
+ }
+
+ // Get EC level
+ rc = FAPI_ATTR_GET_PRIVILEGED(ATTR_EC,
+ &i_fapiTarget,
+ l_attrDdLevel);
+ // Exit on error
+ if (rc)
+ {
+ FAPI_ERR("getL3DeltaDataAttr: FAPI_ATTR_GET_PRIVILEGED of "
+ "ATTR_EC failed w/rc=0x%08X", static_cast<uint32_t>(rc));
+ break;
+ }
+
+ // Get proc_pbiex_async_sel
+ rc = FAPI_ATTR_GET(ATTR_PROC_PBIEX_ASYNC_SEL,
+ NULL,
+ l_selection);
+ // Exit on error
+ if (rc)
+ {
+ FAPI_ERR("getL3DeltaDataAttr: FAPI_ATTR_GET of "
+ "ATTR_PROC_PBIEX_ASYNC_SEL failed w/rc=0x%08X",
+ static_cast<uint32_t>(rc));
+ break;
+ }
+ // Check for valid value
+ if ((l_selection != fapi::ENUM_ATTR_PROC_PBIEX_ASYNC_SEL_SEL0) &&
+ (l_selection != fapi::ENUM_ATTR_PROC_PBIEX_ASYNC_SEL_SEL1) &&
+ (l_selection != fapi::ENUM_ATTR_PROC_PBIEX_ASYNC_SEL_SEL2))
+ {
+ FAPI_ERR("getL3DeltaDataAttr: FAPI_ATTR_GET() returned "
+ "unsupported value ATTR_PROC_PBIEX_ASYNC_SEL=0x%02x",
+ l_selection);
+ fapi::ATTR_PROC_PBIEX_ASYNC_SEL_Type & SELECT_VAL = l_selection;
+ FAPI_SET_HWP_ERROR(rc, RC_GET_L3_DELTA_DATA_SELECT_ERR );
+ break;
+ }
+
+ FAPI_INF("getL3DeltaDataAttr: Chip type=0x%02x EC=0x%02x "
+ "ATTR_PROC_PBIEX_ASYNC_SEL = %i",
+ l_chipType, l_attrDdLevel, l_selection);
+
+ // Murano DD1.2 and DD1.0 are equivalent in terms of engineering data
+ if ((l_chipType == fapi::ENUM_ATTR_NAME_MURANO) &&
+ (l_attrDdLevel == 0x12))
+ {
+ FAPI_INF("getL3DeltaDataAttr: Treating EC1.2 like EC1.0");
+ l_attrDdLevel = 0x10;
+ }
+
+ // Use chip & ec to select array entry and selection attr to select
+ // data array entry
+ for (i = 0; ((i < (sizeof(L3_DELTA_DATA_array) /
+ sizeof(L3_DELTA_DATA_ATTR))) &&
+ ((L3_DELTA_DATA_array[i].l_ATTR_CHIPTYPE != l_chipType) ||
+ (L3_DELTA_DATA_array[i].l_ATTR_EC != l_attrDdLevel))); i++)
+ { }
+ // No match found
+ if (i == (sizeof(L3_DELTA_DATA_array)/sizeof(L3_DELTA_DATA_ATTR)))
+ {
+ FAPI_ERR("getL3DeltaDataAttr: No match found for chiptype=0x%x "
+ "EC=0x%x selection=%d",
+ l_chipType, l_attrDdLevel, l_selection);
+ // Return error on get attr
+ fapi::ATTR_NAME_Type & CHIP_NAME = l_chipType;
+ uint8_t & CHIP_EC = l_attrDdLevel;
+ FAPI_SET_HWP_ERROR(rc, RC_GET_L3_DELTA_DATA_ERR );
+ break;
+ }
+
+ // Set return delta data attr value
+ memcpy(o_data, L3_DELTA_DATA_array[i].l_ATTR_L3_DELTA_DATA[l_selection],
+ sizeof(o_data));
+
+ } while (0);
+
+ FAPI_INF("getL3DeltaDataAttr: exit rc=0x%x", static_cast<uint32_t>(rc) );
+
+ return rc;
+}
+
+} // extern "C"
+
OpenPOWER on IntegriCloud