summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Lugo-Reyes <aalugore@us.ibm.com>2016-05-05 13:54:13 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-06-03 17:48:28 -0400
commit26900423db39e0c9a20028d92ba4d9dd80ab0b8e (patch)
tree2d722f738339d768845df3ee3528dbf32f355742
parentdeacf4a65a76c82cc85fb74856bf878f37f87171 (diff)
downloadtalos-hostboot-26900423db39e0c9a20028d92ba4d9dd80ab0b8e.tar.gz
talos-hostboot-26900423db39e0c9a20028d92ba4d9dd80ab0b8e.zip
attributeOverride build errors in fips910
Replace fapi references in attrTextToBinaryBlob.C with fapi2 and make the appropriate makefile changes. Change-Id: I868cf1c1e401a78352dad49bf45a4d3f17817738 RTC:148103 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/24143 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Reviewed-by: Prachi Gupta <pragupta@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rwxr-xr-xsrc/usr/targeting/attroverride/attrTextToBinaryBlob.C291
-rwxr-xr-xsrc/usr/targeting/attroverride/attrTextToBinaryBlob.H12
-rw-r--r--src/usr/targeting/attroverride/makefile11
-rw-r--r--src/usr/targeting/makefile5
4 files changed, 202 insertions, 117 deletions
diff --git a/src/usr/targeting/attroverride/attrTextToBinaryBlob.C b/src/usr/targeting/attroverride/attrTextToBinaryBlob.C
index ff6f80e04..3f9cf91b0 100755
--- a/src/usr/targeting/attroverride/attrTextToBinaryBlob.C
+++ b/src/usr/targeting/attroverride/attrTextToBinaryBlob.C
@@ -49,7 +49,7 @@
#include <arpa/inet.h>
#include <endian.h>
#include <unistd.h>
-#include <hwpf/fapi/fapiTarget.H>
+#include <target_types.H>
#include <attributeenums.H>
#include <pnor/ecc.H>
@@ -88,23 +88,52 @@ const char * const TARGET_POS_ALL_STR = "all";
// Used to translate target strings in FAPI Attribute Info files to the value
// in a FAPI or TARG Layer AttributeTanks
-const struct TargStrToType
+struct TargStrToType
{
const char * iv_pString;
uint32_t iv_fapiType;
uint32_t iv_targType;
-} TARG_STR_TO_TYPE [] = {
- {"p8.ex", fapi::TARGET_TYPE_EX_CHIPLET, TARGETING::TYPE_EX},
- {"centaur.mba", fapi::TARGET_TYPE_MBA_CHIPLET, TARGETING::TYPE_MBA},
- {"p8.mcs", fapi::TARGET_TYPE_MCS_CHIPLET, TARGETING::TYPE_MCS},
- {"p8.xbus", fapi::TARGET_TYPE_XBUS_ENDPOINT,TARGETING::TYPE_XBUS},
- {"p8.abus", fapi::TARGET_TYPE_ABUS_ENDPOINT,TARGETING::TYPE_ABUS},
- {"centaur", fapi::TARGET_TYPE_MEMBUF_CHIP, TARGETING::TYPE_MEMBUF},
- {"p8", fapi::TARGET_TYPE_PROC_CHIP, TARGETING::TYPE_PROC},
- {"dimm", fapi::TARGET_TYPE_DIMM, TARGETING::TYPE_DIMM},
- {"pu", fapi::TARGET_TYPE_PROC_CHIP, TARGETING::TYPE_PROC}
};
+
+TargStrToType CHIP_TYPE_TARG_STR_TO_TYPE [] =
+{
+ {"p9n" , fapi2::TARGET_TYPE_PROC_CHIP , TARGETING::TYPE_PROC},
+ {"p9c" , fapi2::TARGET_TYPE_PROC_CHIP , TARGETING::TYPE_PROC},
+ {"pu" , fapi2::TARGET_TYPE_PROC_CHIP , TARGETING::TYPE_PROC},
+ {"centaur" , fapi2::TARGET_TYPE_MEMBUF_CHIP , TARGETING::TYPE_MEMBUF},
+ {"dimm" , fapi2::TARGET_TYPE_DIMM , TARGETING::TYPE_DIMM},
+ {"p8" , fapi2::TARGET_TYPE_PROC_CHIP , TARGETING::TYPE_PROC},
+ {"p9" , fapi2::TARGET_TYPE_PROC_CHIP , TARGETING::TYPE_PROC},
+ {"LAST" , 0 , 0}
+
+};
+
+TargStrToType CHIP_UNIT_TYPE_TARG_STR_TO_TYPE [] =
+{
+ {"c" , fapi2::TARGET_TYPE_CORE , TARGETING::TYPE_CORE},
+ {"ex" , fapi2::TARGET_TYPE_EX , TARGETING::TYPE_EX},
+ {"eq" , fapi2::TARGET_TYPE_EQ , TARGETING::TYPE_EQ},
+ {"mcs" , fapi2::TARGET_TYPE_MCS , TARGETING::TYPE_MCS},
+ {"mca" , fapi2::TARGET_TYPE_MCA , TARGETING::TYPE_MCA},
+ {"mcbist" , fapi2::TARGET_TYPE_MCBIST , TARGETING::TYPE_MCBIST},
+ {"xbus" , fapi2::TARGET_TYPE_XBUS , TARGETING::TYPE_XBUS},
+ {"abus" , fapi2::TARGET_TYPE_ABUS , TARGETING::TYPE_ABUS},
+ {"obus" , fapi2::TARGET_TYPE_OBUS , TARGETING::TYPE_OBUS},
+ {"nv" , fapi2::TARGET_TYPE_NV , TARGETING::TYPE_NV},
+ {"sbe" , fapi2::TARGET_TYPE_SBE , TARGETING::TYPE_SBE},
+ {"ppe" , fapi2::TARGET_TYPE_PPE , TARGETING::TYPE_PPE},
+ {"perv" , fapi2::TARGET_TYPE_PERV , TARGETING::TYPE_PERV},
+ {"pec" , fapi2::TARGET_TYPE_PEC , TARGETING::TYPE_PEC},
+ {"phb" , fapi2::TARGET_TYPE_PHB , TARGETING::TYPE_PHB},
+ {"capp" , fapi2::TARGET_TYPE_CAPP , TARGETING::TYPE_CAPP},
+ {"mba" , fapi2::TARGET_TYPE_MBA , TARGETING::TYPE_MBA},
+ {"dmi" , fapi2::TARGET_TYPE_DMI , TARGETING::TYPE_DMI},
+ {"mi" , fapi2::TARGET_TYPE_MI , TARGETING::TYPE_MI},
+ {"LAST" , 0 , 0}
+};
+
+
bool operator==(const TargStrToType& i, const std::string& v)
{
return 0 == strcmp(v.c_str(), i.iv_pString);
@@ -461,7 +490,7 @@ bool AttrTextToBinaryBlob::attrFileAttrLineToFields(
//******************************************************************************
-void AttrTextToBinaryBlob::attrFileTargetLineToData(
+bool AttrTextToBinaryBlob::attrFileTargetLineToData(
const std::string & i_line,
const AttributeTank::TankLayer i_tankLayer,
uint32_t & o_targetType,
@@ -475,100 +504,44 @@ void AttrTextToBinaryBlob::attrFileTargetLineToData(
* - o_targetPos = 2
* - o_targetUnitPos = 1
*/
-
+ bool l_err = false;
// If the target string is not decoded into a non-system target and
// explicit positions are not found then the caller will get these defaults
bool l_sysTarget = true;
- if (i_tankLayer == AttributeTank::TANK_LAYER_FAPI)
- {
- o_targetType = fapi::TARGET_TYPE_SYSTEM;
- }
- else
- {
- o_targetType = TARGETING::TYPE_SYS;
- }
-
- o_targetNode = AttributeTank:: ATTR_NODE_NA;
- o_targetPos = AttributeTank:: ATTR_POS_NA;
- o_targetUnitPos = AttributeTank::ATTR_UNIT_POS_NA;
- // Find the node, target type, pos and unit-pos
- int l_cageIndex = i_line.find(ATTR_CAGE_NUMBER);
- if(l_cageIndex != std::string::npos )
+ do
{
- // Create a local string and remove the target header
- std::string l_line =
- i_line.substr(l_cageIndex + strlen(ATTR_CAGE_NUMBER));
-
- // Figure out the node number
- if (0 == l_line.find(TARGET_NODE_HEADER_STR))
+ if (i_tankLayer == AttributeTank::TANK_LAYER_FAPI)
{
- l_line = l_line.substr(strlen(TARGET_NODE_HEADER_STR));
-
- if (0 == l_line.find(TARGET_NODE_ALL_STR))
- {
- l_line = l_line.substr(strlen(TARGET_NODE_ALL_STR));
- }
- else
- {
- o_targetNode = strtoul(l_line.c_str(), NULL, 10);
-
- size_t l_pos = l_line.find(':');
-
- if (l_pos != std::string::npos)
- {
- l_line = l_line.substr(l_pos);
- }
- else
- {
- l_line.clear();
- }
- }
+ o_targetType = fapi2::TARGET_TYPE_SYSTEM;
}
-
- if (0 == l_line.find(ATTR_FILE_TARGET_EXT_FOOTER_STR))
+ else
{
- // Remove the target footer
- l_line = l_line.substr(strlen(ATTR_FILE_TARGET_EXT_FOOTER_STR));
+ o_targetType = TARGETING::TYPE_SYS;
}
-
- // Figure out the target type
- const TargStrToType* last =
- &TARG_STR_TO_TYPE[sizeof(TARG_STR_TO_TYPE)/sizeof(TargStrToType) -1];
-
- //not sure how long the string representing the title will be
- //therefore we must look up the next colon and take all chars up to
- //the colon and assume that is the string representation of the target.
- size_t nextColon = l_line.find(':');
- std::string l_targetString = l_line.substr(0, nextColon);
-
- const TargStrToType* item =
- std::find(&TARG_STR_TO_TYPE[0], last, l_targetString);
-
- if (item != last)
+ o_targetNode = AttributeTank:: ATTR_NODE_NA;
+ o_targetPos = AttributeTank:: ATTR_POS_NA;
+ o_targetUnitPos = AttributeTank::ATTR_UNIT_POS_NA;
+ // Find the node, target type, pos and unit-pos
+ int l_cageIndex = i_line.find(ATTR_CAGE_NUMBER);
+ if(l_cageIndex != std::string::npos )
{
- o_targetType = (i_tankLayer == AttributeTank::TANK_LAYER_TARG ?
- item->iv_targType : item->iv_fapiType);
- l_line = l_line.substr(strlen(item->iv_pString));
- l_sysTarget = false;
- }
-
+ // Create a local string and remove the target header
+ std::string l_line =
+ i_line.substr(l_cageIndex + strlen(ATTR_CAGE_NUMBER));
- // For a non-system target, figure out the position and unit position
- if (l_sysTarget == false)
- {
- // Figure out the target's position
- if (0 == l_line.find(TARGET_POS_HEADER_STR))
+ // Figure out the node number
+ if (0 == l_line.find(TARGET_NODE_HEADER_STR))
{
- l_line = l_line.substr(strlen(TARGET_POS_HEADER_STR));
+ l_line = l_line.substr(strlen(TARGET_NODE_HEADER_STR));
- if (0 == l_line.find(TARGET_POS_ALL_STR))
+ if (0 == l_line.find(TARGET_NODE_ALL_STR))
{
- l_line = l_line.substr(strlen(TARGET_POS_ALL_STR));
+ l_line = l_line.substr(strlen(TARGET_NODE_ALL_STR));
}
else
{
- o_targetPos = strtoul(l_line.c_str(), NULL, 10);
+ o_targetNode = strtoul(l_line.c_str(), NULL, 10);
size_t l_pos = l_line.find(':');
@@ -583,29 +556,132 @@ void AttrTextToBinaryBlob::attrFileTargetLineToData(
}
}
- // Figure out the target's unit position
- if (0 == l_line.find(TARGET_UNIT_POS_HEADER_STR))
+ if (0 == l_line.find(ATTR_FILE_TARGET_EXT_FOOTER_STR))
+ {
+ // Remove the target footer
+ l_line = l_line.substr(strlen(ATTR_FILE_TARGET_EXT_FOOTER_STR));
+ }
+
+ // Figure out the target type
+ // Remove the end of the target string (position and unitpos) before
+ // using the line to search for target types
+ auto l_pos = l_line.find(":");
+ std::string l_targetType;
+
+ TargStrToType* chip_type_first = NULL;
+ TargStrToType* chip_type_last = NULL;
+
+
+ TargStrToType* item = NULL;
+ if( l_pos != std::string::npos)
{
- l_line = l_line.substr(strlen(TARGET_UNIT_POS_HEADER_STR));
+ l_targetType = l_line.substr(0, l_pos);
+ auto l_dotIndex = l_targetType.find(".");
- if (0 == l_line.find(TARGET_POS_ALL_STR))
+ if(l_dotIndex != std::string::npos)
{
- l_line = l_line.substr(strlen(TARGET_POS_ALL_STR));
+ // "." found, meaning both chip type and chip unit are specified
+ // Isolate the chip unit type
+ l_targetType = l_targetType.substr(l_dotIndex + 1);
+
+ // Save range to search in correct target type array
+ chip_type_first = &CHIP_UNIT_TYPE_TARG_STR_TO_TYPE[0];
+ chip_type_last = &CHIP_UNIT_TYPE_TARG_STR_TO_TYPE
+ [(sizeof(CHIP_UNIT_TYPE_TARG_STR_TO_TYPE)/sizeof(TargStrToType))-1];
+
+ }
+ else
+ {
+ // Only chip type specified
+ // Save range to search in correct target type array
+ chip_type_first = &CHIP_TYPE_TARG_STR_TO_TYPE[0];
+ chip_type_last = &CHIP_TYPE_TARG_STR_TO_TYPE
+ [(sizeof(CHIP_TYPE_TARG_STR_TO_TYPE)/sizeof(TargStrToType))-1];
+
+ }
+
+ //Search for target type
+ item = std::find( chip_type_first,
+ chip_type_last, l_targetType.c_str());
+
+ if( item != chip_type_last )
+ {
+ // Target type found
+ // choose fapi2 or targeting type
+ o_targetType = ( i_tankLayer == AttributeTank::TANK_LAYER_TARG ?
+ item->iv_targType : item->iv_fapiType);
+ l_line = l_line.substr(l_targetType.length());
+ l_sysTarget = false;
}
else
{
- o_targetUnitPos = strtoul(l_line.c_str(), NULL, 10);
+ printf("Error: Could not find matching target type for given target string(%s)\n",
+ l_targetType.c_str());
+ l_err = true;
+ break;
+ }
+ }
+ else
+ {
+ l_sysTarget = true;
+ }
+
+
+ // For a non-system target, figure out the position and unit position
+ if (l_sysTarget == false)
+ {
+ // Figure out the target's position
+ if (0 == l_line.find(TARGET_POS_HEADER_STR))
+ {
+ l_line = l_line.substr(strlen(TARGET_POS_HEADER_STR));
+
+ if (0 == l_line.find(TARGET_POS_ALL_STR))
+ {
+ l_line = l_line.substr(strlen(TARGET_POS_ALL_STR));
+ }
+ else
+ {
+ o_targetPos = strtoul(l_line.c_str(), NULL, 10);
+
+ size_t l_pos = l_line.find(':');
+
+ if (l_pos != std::string::npos)
+ {
+ l_line = l_line.substr(l_pos);
+ }
+ else
+ {
+ l_line.clear();
+ }
+ }
+ }
+
+ // Figure out the target's unit position
+ if (0 == l_line.find(TARGET_UNIT_POS_HEADER_STR))
+ {
+ l_line = l_line.substr(strlen(TARGET_UNIT_POS_HEADER_STR));
+
+ if (0 == l_line.find(TARGET_POS_ALL_STR))
+ {
+ l_line = l_line.substr(strlen(TARGET_POS_ALL_STR));
+ }
+ else
+ {
+ o_targetUnitPos = strtoul(l_line.c_str(), NULL, 10);
+ }
}
}
+ } // else, the "k0" string was not found. Process as system target
+
+ // System targets must have an NA node
+ if (l_sysTarget)
+ {
+ o_targetNode = AttributeTank::ATTR_NODE_NA;
}
- } // else, the "k0" string was not found. Process as system target
- // System targets must have an NA node
- if (l_sysTarget)
- {
- o_targetNode = AttributeTank::ATTR_NODE_NA;
- }
+ } while( 0 );
+ return l_err;
}
//******************************************************************************
@@ -877,14 +953,21 @@ bool AttrTextToBinaryBlob::attrTextToBinaryBlob( std::ifstream& i_file,
l_pErr = attrFileAttrLinesToData(l_attrLines, l_attrId, l_valSize,
l_pVal, l_const, l_tankLayer);
+ if (l_pErr)
+ {
+ printf("attrTextToBinaryBlob:"
+ " Error getting attribute data\n");
+ break;
+ }
+
// Get the Target Data for this attribute
- attrFileTargetLineToData(l_targetLine, l_tankLayer, l_targetType,
+ l_pErr = attrFileTargetLineToData(l_targetLine, l_tankLayer, l_targetType,
l_pos, l_unitPos, l_node);
if (l_pErr)
{
printf("attrTextToBinaryBlob:"
- " Error getting attribute data\n");
+ " Error parsing target string\n");
break;
}
diff --git a/src/usr/targeting/attroverride/attrTextToBinaryBlob.H b/src/usr/targeting/attroverride/attrTextToBinaryBlob.H
index 287116a86..2dc6ec441 100755
--- a/src/usr/targeting/attroverride/attrTextToBinaryBlob.H
+++ b/src/usr/targeting/attroverride/attrTextToBinaryBlob.H
@@ -1,11 +1,11 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/exttools/attroverride/attrTextToBinaryBlob.H $ */
+/* $Source: src/usr/targeting/attroverride/attrTextToBinaryBlob.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2014,2015 */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -168,8 +168,10 @@ namespace AttrTextToBinaryBlob
* @param[out] o_targetPos Target Position (as stored in tank)
* @param[out] o_targetUnitPos Target Unit Position (as stored in tank)
* @param[out] o_targetNode Target Node Number
+ *
+ * @return - true if the target line was successfully parse, false otherwise
*/
- static void attrFileTargetLineToData(
+ static bool attrFileTargetLineToData(
const std::string & i_line,
const AttributeTank::TankLayer i_tankLayer,
uint32_t & o_targetType,
@@ -284,6 +286,6 @@ struct AttributeEnum
uint64_t iv_value;
};
#include <targAttrOverrideData.H>
-#include <fapiAttrOverrideData.H>
-#include <fapiAttrOverrideEnums.H>
+#include <fapi2AttrOverrideData.H>
+#include <fapi2AttrOverrideEnums.H>
diff --git a/src/usr/targeting/attroverride/makefile b/src/usr/targeting/attroverride/makefile
index 172cfe1ed..f2fa737df 100644
--- a/src/usr/targeting/attroverride/makefile
+++ b/src/usr/targeting/attroverride/makefile
@@ -1,11 +1,11 @@
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
-# $Source: src/exttools/attroverride/makefile $
+# $Source: src/usr/targeting/attroverride/makefile $
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2014,2015
+# Contributors Listed Below - COPYRIGHT 2014,2016
# [+] International Business Machines Corp.
#
#
@@ -32,12 +32,13 @@ CODE_PASS_BODY += $(OUT_FILE)
INC_DIRS += $(ROOTPATH)/src/usr/targeting/
INC_DIRS += $(GENDIR)
INC_DIRS += $(ROOTPATH)/src/include/usr
+INC_DIRS += $(ROOTPATH)/src/import/hwpf/fapi2/include
VPATH += $(ROOTPATH)/src/usr/pnor
C_FILES = attrTextToBinaryBlob.C ecc.C
-H_FILES = targAttrOverrideData.H fapiAttrOverrideData.H\
- fapiAttrOverrideEnums.H
+H_FILES = targAttrOverrideData.H fapi2AttrOverrideData.H\
+ fapi2AttrOverrideEnums.H
include $(ROOTPATH)/config.mk
vpath %.C $(GENDIR)
@@ -45,6 +46,6 @@ vpath %.H $(GENDIR)
$(OUT_FILE): $(C_FILES) $(H_FILES)
$(C2) " CC $(notdir $@)"
- $(C1)$(CCACHE) $(HOST_PREFIX)g++ -O3 -g -o $(OUT_FILE)\
+ $(C1)$(CCACHE) $(HOST_PREFIX)g++ -std=gnu++11 -O3 -g -o $(OUT_FILE)\
$(foreach dir,$(INC_DIRS), -I $(dir)) -iquote.\
$(foreach file,$^,$(if $(findstring .H,$(file)),,$(file)))
diff --git a/src/usr/targeting/makefile b/src/usr/targeting/makefile
index 5330b963c..fc721fe62 100644
--- a/src/usr/targeting/makefile
+++ b/src/usr/targeting/makefile
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2015
+# Contributors Listed Below - COPYRIGHT 2011,2016
# [+] International Business Machines Corp.
#
#
@@ -65,8 +65,7 @@ OBJS += ${HOSTBOOT_SPECIFIC_OBJS}
SUBDIRS += test.d
SUBDIRS += xmltohb.d
SUBDIRS += runtime.d
-#@TODO RTC:128106
-#SUBDIRS += attroverride.d
+SUBDIRS += attroverride.d
include ${ROOTPATH}/config.mk
OpenPOWER on IntegriCloud