diff options
author | Elliott Dahle <dedahle@us.ibm.com> | 2014-02-12 16:17:24 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-13 13:01:04 -0600 |
commit | ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712 (patch) | |
tree | fae8b1ef4505bbcb2a0ee2843de724c82da6f6a4 | |
parent | 66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9 (diff) | |
download | talos-hostboot-ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712.tar.gz talos-hostboot-ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712.zip |
Tul63fp failing on istep hb_config_update of istep 0
Change-Id: Ie3b509b31d3067fe34be7930eb4e1beec4d8383b
CQ:SW245920
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8806
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r-- | src/include/usr/hwas/common/deconfigGard.H | 4 | ||||
-rw-r--r-- | src/include/usr/targeting/common/predicates/predicateisnonfunctional.H | 111 | ||||
-rw-r--r-- | src/include/usr/targeting/common/predicates/predicates.H | 3 | ||||
-rw-r--r-- | src/include/usr/targeting/common/utilFilter.H | 10 | ||||
-rw-r--r-- | src/usr/hwas/common/hwas.C | 58 | ||||
-rw-r--r-- | src/usr/targeting/common/common.mk | 5 | ||||
-rw-r--r-- | src/usr/targeting/common/predicates/predicateisnonfunctional.C | 75 | ||||
-rw-r--r-- | src/usr/targeting/common/utilFilter.C | 48 |
8 files changed, 306 insertions, 8 deletions
diff --git a/src/include/usr/hwas/common/deconfigGard.H b/src/include/usr/hwas/common/deconfigGard.H index 12e380813..b33c95dcc 100644 --- a/src/include/usr/hwas/common/deconfigGard.H +++ b/src/include/usr/hwas/common/deconfigGard.H @@ -119,6 +119,10 @@ public: // set for SPCN initiated deconfigure DECONFIGURED_BY_SPCN, // BASE | 0x08 + // set by discoverTargets() when functional children + // are found connected to a non-functional Centaur + DECONFIGURED_BY_NO_PARENT_MEMBUF, // BASE | 0x09 + // mask - these bits mean it's a PLID and not an enum DECONFIGURED_BY_PLID_MASK = 0xFFFF0000, }; diff --git a/src/include/usr/targeting/common/predicates/predicateisnonfunctional.H b/src/include/usr/targeting/common/predicates/predicateisnonfunctional.H new file mode 100644 index 000000000..86b754741 --- /dev/null +++ b/src/include/usr/targeting/common/predicates/predicateisnonfunctional.H @@ -0,0 +1,111 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/targeting/common/predicates/predicateisnonfunctional.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2014 */ +/* */ +/* 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 */ +#ifndef __TARGETING_COMMON_PREDICATEISNONFUNCTIONAL_H +#define __TARGETING_COMMON_PREDICATEISNONFUNCTIONAL_H +/** + * @file targeting/common/predicates/predicateisnonfunctional.H + * + * PredicateIsNonFunctional class, used to filter targets for HWP wrapper. + * From the example tutorial page at + * https://w3-connections.ibm.com/wikis/home?lang=en_US#/wiki/Host%20Boot/page/Target%20And%20Attribute%20Usage%20Guide + * : + * Create Custom Predicate + * Take the following predicate "template" and customize to your needs. + * Make sure to: + * 1) Rename the class in the appropriate places + * 2) Implement the operator() function which should return "true" if + * the given Target matches the predicate criteria, false otherwise + * 3) Add any input arguments to the constructor, and any necessary + * private variables to store state + * 4) Implement the destructor, if needed + * 5) Update documentation + * + * See example in src/include/usr/targeting/predicate/predicatectm.H + * (and usr/targeting/predicate/predicatectm.C) + * + */ + + +/******************************************************************************/ +// Includes +/******************************************************************************/ +#include <stdint.h> + +// targeting support. +#include <targeting/common/attributes.H> +#include <targeting/common/entitypath.H> +#include <targeting/common/target.H> +#include <targeting/common/targetservice.H> +#include <targeting/common/iterators/rangefilter.H> +#include <targeting/common/predicates/predicatectm.H> + + +namespace TARGETING +{ + +class PredicateIsNonFunctional : public PredicateBase +{ + +public: + + /** + * @brief Create a predicate to select targets that + * are marked non-functional. + * + * @param[in] i_requirepresent + * Bool indicating whether to select targets which + * are present and non-functional (true)(default), or + * to select all non-functioal targets, regardless of + * present state (false) + */ + PredicateIsNonFunctional(bool i_requirePresent = true); + + + /** + * @brief Destroy the predicate + */ + virtual ~PredicateIsNonFunctional(); + + /** + * @brief returns true if target is marked non-functional + * + * @param[in] i_pTarget + * Handle to the target to perform the predicate check on + * + * @return bool indicating whether target is non-functional or not + */ + bool operator()(const TARGETING::Target* i_pTarget) const ; + +private: + + // Whether to return targets who are present and non-functional (true) + // or to return all non-functional targets, regardless of present state + // (false) + bool iv_requirePresent; + + TARG_DISABLE_COPY_AND_ASSIGNMENT_OPERATORS(PredicateIsNonFunctional); +}; + +}; // end namespace + +#endif // __TARGETING_COMMON_PREDICATEISNONFUNCTIONAL_H diff --git a/src/include/usr/targeting/common/predicates/predicates.H b/src/include/usr/targeting/common/predicates/predicates.H index 8c422b036..b62b9f843 100644 --- a/src/include/usr/targeting/common/predicates/predicates.H +++ b/src/include/usr/targeting/common/predicates/predicates.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -36,6 +36,7 @@ #include <targeting/common/predicates/predicatehwaschanged.H> #include <targeting/common/predicates/predicatepostfixexpr.H> #include <targeting/common/predicates/predicateattrval.H> +#include <targeting/common/predicates/predicateisnonfunctional.H> // please keep up to date... diff --git a/src/include/usr/targeting/common/utilFilter.H b/src/include/usr/targeting/common/utilFilter.H index 551f4cf85..d5a1afef4 100644 --- a/src/include/usr/targeting/common/utilFilter.H +++ b/src/include/usr/targeting/common/utilFilter.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -43,9 +43,11 @@ namespace TARGETING */ enum ResourceState { - UTIL_FILTER_ALL, // All targets - UTIL_FILTER_PRESENT, // Present at minimum - UTIL_FILTER_FUNCTIONAL // Functional targets only + UTIL_FILTER_ALL, // All targets + UTIL_FILTER_PRESENT, // Present at minimum + UTIL_FILTER_FUNCTIONAL, // Functional targets only + UTIL_FILTER_PRESENT_NON_FUNCTIONAL, //All present and non-fucntional + UTIL_FILTER_NON_FUNCTIONAL //All non-fucntional }; diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index cb079c71c..3bf141e26 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -521,10 +521,68 @@ errlHndl_t discoverTargets() //non functional membuf or no membufs associated with this MCS enableHwasState(l_MCSTarget,true,false, HWAS::DeconfigGard::DECONFIGURED_BY_NO_CHILD_MEMBUF); + + + HWAS_INF("discoverTargets: MCS %.8X mark as present, not functional", l_MCSTarget->getAttr<ATTR_HUID>() ); } + // Get list of non-functional Centaurs + TargetHandleList l_nonFuncCentaurs; + getChipResources(l_nonFuncCentaurs, TYPE_MEMBUF, + UTIL_FILTER_NON_FUNCTIONAL); + + // Some common variables used below + TargetHandleList pChildList; + PredicateIsFunctional isFunctional; + + // Iterate through list of non-functional Centaurs, and + // set all children as non-functional + for (TargetHandleList::const_iterator + pCenTarget_it = l_nonFuncCentaurs.begin(); + pCenTarget_it != l_nonFuncCentaurs.end(); + ++pCenTarget_it) + { + // Cache current target + TargetHandle_t l_cenTarget = *pCenTarget_it; + + // find all CHILD matches for this target and deconfigure them + targetService().getAssociated(pChildList, l_cenTarget, + TargetService::CHILD, TargetService::ALL, &isFunctional); + for (TargetHandleList::iterator pChild_it = pChildList.begin(); + pChild_it != pChildList.end(); + ++pChild_it) + { + TargetHandle_t l_childTarget = *pChild_it; + //non functional membuf or no membufs associated with this MCS + enableHwasState(l_childTarget,true,false, + HWAS::DeconfigGard::DECONFIGURED_BY_NO_PARENT_MEMBUF); + HWAS_INF("discoverTargets: Target %.8X mark as present" + ", not functional due to non-functional parent" + " Centaur", + l_childTarget->getAttr<ATTR_HUID>() ); + } + + // find all CHILD_BY_AFFINITY matches for this target and + // deconfigure them + targetService().getAssociated(pChildList, l_cenTarget, + TargetService::CHILD_BY_AFFINITY, TargetService::ALL, + &isFunctional); + for (TargetHandleList::iterator pChild_it = pChildList.begin(); + pChild_it != pChildList.end(); + ++pChild_it) + { + TargetHandle_t l_affinityTarget = *pChild_it; + //non functional membuf or no membufs associated with this MCS + enableHwasState(l_affinityTarget,true,false, + HWAS::DeconfigGard::DECONFIGURED_BY_NO_PARENT_MEMBUF); + HWAS_INF("discoverTargets: Target %.8X mark as present" + ", not functional due to non-functional parent" + " Centaur", + l_affinityTarget->getAttr<ATTR_HUID>() ); + } + } } while (0); diff --git a/src/usr/targeting/common/common.mk b/src/usr/targeting/common/common.mk index 7a5cb8c27..520f0462d 100644 --- a/src/usr/targeting/common/common.mk +++ b/src/usr/targeting/common/common.mk @@ -5,7 +5,7 @@ # # IBM CONFIDENTIAL # -# COPYRIGHT International Business Machines Corp. 2011,2013 +# COPYRIGHT International Business Machines Corp. 2011,2014 # # p1 # @@ -37,7 +37,8 @@ PREDICATES_OBJS = \ predicatectm.o \ predicateisfunctional.o \ predicatehwas.o \ - predicatehwaschanged.o + predicatehwaschanged.o \ + predicateisnonfunctional.o ITERATORS_OBJS = \ targetiterator.o \ diff --git a/src/usr/targeting/common/predicates/predicateisnonfunctional.C b/src/usr/targeting/common/predicates/predicateisnonfunctional.C new file mode 100644 index 000000000..5d702f105 --- /dev/null +++ b/src/usr/targeting/common/predicates/predicateisnonfunctional.C @@ -0,0 +1,75 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/targeting/common/predicates/predicateisnonfunctional.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2014 */ +/* */ +/* 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 */ +/** + * @file targeting/common/predicates/predicateisnonfunctional.C + * + * @brief Implement predicate defined in + * src/usr/include/targeting/predicate/predicateisnonfunctional.H + * + */ + +// targeting support. +#include <targeting/common/commontargeting.H> + +namespace TARGETING +{ + +//****************************************************************************** +// PredicateIsNonFunctional::PredicateIsNonFunctional() +//****************************************************************************** +PredicateIsNonFunctional::PredicateIsNonFunctional(bool i_requirePresent) + :iv_requirePresent(i_requirePresent) +{ + +} + +//****************************************************************************** +// PredicateIsNonFunctional::~PredicateIsNonFunctional() +//****************************************************************************** +PredicateIsNonFunctional::~PredicateIsNonFunctional() +{ + +} + +//****************************************************************************** +// PredicateIsNonFunctional::operator() +//****************************************************************************** +bool PredicateIsNonFunctional::operator()( + const TARGETING::Target* i_pTarget) const +{ + bool l_rc = false; + + if (iv_requirePresent) + { + l_rc = ((!i_pTarget->getAttr<ATTR_HWAS_STATE>().functional) && + (i_pTarget->getAttr<ATTR_HWAS_STATE>().present)); + } + else + { + l_rc = !i_pTarget->getAttr<ATTR_HWAS_STATE>().functional; + } + + return l_rc; +}; + +} // namespace diff --git a/src/usr/targeting/common/utilFilter.C b/src/usr/targeting/common/utilFilter.C index bb4846074..34207a75c 100644 --- a/src/usr/targeting/common/utilFilter.C +++ b/src/usr/targeting/common/utilFilter.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -32,6 +32,7 @@ #include <targeting/common/predicates/predicatepostfixexpr.H> #include <targeting/common/predicates/predicateattrval.H> #include <targeting/common/utilFilter.H> +#include <targeting/common/predicates/predicateisnonfunctional.H> /** * Miscellaneous Filter Utility Functions @@ -125,6 +126,51 @@ void _getChipOrChipletResources( TARGETING::TargetHandleList & o_vector, } break; } + case UTIL_FILTER_NON_FUNCTIONAL: + { + // Get all non-functional chips or chiplets + // Non-functional predicate + TARGETING::PredicateIsNonFunctional l_isNonFunctional(false); + // Type predicate + TARGETING::PredicateCTM l_CtmFilter(i_class, i_type); + // Set up compound predicate + TARGETING::PredicatePostfixExpr l_nonFunctional; + l_nonFunctional.push(&l_CtmFilter).push(&l_isNonFunctional).And(); + // Apply the filter through all targets + TARGETING::TargetRangeFilter l_nonFuncTargetList( + TARGETING::targetService().begin(), + TARGETING::targetService().end(), + &l_nonFunctional); + o_vector.clear(); + for ( ; l_nonFuncTargetList; ++l_nonFuncTargetList) + { + o_vector.push_back(*l_nonFuncTargetList); + } + break; + } + case UTIL_FILTER_PRESENT_NON_FUNCTIONAL: + { + // Get all present and non-functional chips or chiplets + // Present and non-functional predicate + TARGETING::PredicateIsNonFunctional l_isPresNonFunctional; + // Type predicate + TARGETING::PredicateCTM l_CtmFilter(i_class, i_type); + // Set up compound predicate + TARGETING::PredicatePostfixExpr l_presNonFunctional; + l_presNonFunctional.push(&l_CtmFilter). + push(&l_isPresNonFunctional).And(); + // Apply the filter through all targets + TARGETING::TargetRangeFilter l_presNonFuncTargetList( + TARGETING::targetService().begin(), + TARGETING::targetService().end(), + &l_presNonFunctional); + o_vector.clear(); + for ( ; l_presNonFuncTargetList; ++l_presNonFuncTargetList) + { + o_vector.push_back(*l_presNonFuncTargetList); + } + break; + } default: TARG_ASSERT(0, TARG_LOC "Invalid functional state used"); break; |