summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Dahle <dedahle@us.ibm.com>2014-02-12 16:17:24 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-02-13 13:01:04 -0600
commitecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712 (patch)
treefae8b1ef4505bbcb2a0ee2843de724c82da6f6a4
parent66fdd0c61ee4ed4d3bf8254d03ede6b7fb4601a9 (diff)
downloadtalos-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.H4
-rw-r--r--src/include/usr/targeting/common/predicates/predicateisnonfunctional.H111
-rw-r--r--src/include/usr/targeting/common/predicates/predicates.H3
-rw-r--r--src/include/usr/targeting/common/utilFilter.H10
-rw-r--r--src/usr/hwas/common/hwas.C58
-rw-r--r--src/usr/targeting/common/common.mk5
-rw-r--r--src/usr/targeting/common/predicates/predicateisnonfunctional.C75
-rw-r--r--src/usr/targeting/common/utilFilter.C48
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;
OpenPOWER on IntegriCloud