summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2019-06-11 09:13:03 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2019-06-17 20:28:43 -0500
commitab4ea694f5ba05d43e1f7d60676d424d0e78cf0c (patch)
tree424088cd224ba488fd517ec6d2f10d51a9496212
parentc153a4336ab2dc464ea0e5c5a3a8f392cb2708c6 (diff)
downloadtalos-hostboot-ab4ea694f5ba05d43e1f7d60676d424d0e78cf0c.tar.gz
talos-hostboot-ab4ea694f5ba05d43e1f7d60676d424d0e78cf0c.zip
PRD: Initial Axone Rule Plugins
Change-Id: I3c5002c7fd6df47234e3cedee83e2916cd961600 RTC: 200583 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/78742 Reviewed-by: Paul Greenwood <paul.greenwood@ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Benjamen G. Tyner <ben.tyner@ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/78995 Tested-by: Zane C. Shelley <zshelle@us.ibm.com>
-rw-r--r--src/usr/diag/prdf/common/plat/axone/axone_omic_actions.rule57
-rw-r--r--src/usr/diag/prdf/common/plat/axone/axone_omic_regs.rule54
-rw-r--r--src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C123
-rw-r--r--src/usr/diag/prdf/common/plat/axone/prdf_plat_axone.mk5
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C34
-rwxr-xr-xsrc/usr/diag/prdf/common/plat/prdfTargetServices.C17
-rwxr-xr-xsrc/usr/diag/prdf/makefile1
-rw-r--r--src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C7
-rw-r--r--src/usr/diag/prdf/runtime/makefile1
9 files changed, 289 insertions, 10 deletions
diff --git a/src/usr/diag/prdf/common/plat/axone/axone_omic_actions.rule b/src/usr/diag/prdf/common/plat/axone/axone_omic_actions.rule
index ecb6626a8..01d1f533a 100644
--- a/src/usr/diag/prdf/common/plat/axone/axone_omic_actions.rule
+++ b/src/usr/diag/prdf/common/plat/axone/axone_omic_actions.rule
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2018
+# Contributors Listed Below - COPYRIGHT 2018,2019
# [+] International Business Machines Corp.
#
#
@@ -24,6 +24,61 @@
# IBM_PROLOG_END_TAG
################################################################################
+# OMIC Actions #
+################################################################################
+
+actionclass dl0_omi
+{
+ callout(connected(TYPE_OMI,0), MRU_HIGH);
+};
+
+actionclass dl1_omi
+{
+ callout(connected(TYPE_OMI,1), MRU_HIGH);
+};
+
+actionclass dl2_omi
+{
+ callout(connected(TYPE_OMI,2), MRU_HIGH);
+};
+
+actionclass dl0_omi_bus
+{
+ funccall("omicCalloutBusInterfacePlugin_0");
+};
+
+actionclass dl1_omi_bus
+{
+ funccall("omicCalloutBusInterfacePlugin_1");
+};
+
+actionclass dl2_omi_bus
+{
+ funccall("omicCalloutBusInterfacePlugin_2");
+};
+
+/** OMI-DL0 Fatal Error */
+actionclass dl0_fatal_error
+{
+ try( funccall("DlFatalError_0"), dl0_omi_bus );
+ threshold1;
+};
+
+/** OMI-DL1 Fatal Error */
+actionclass dl1_fatal_error
+{
+ try( funccall("DlFatalError_1"), dl1_omi_bus );
+ threshold1;
+};
+
+/** OMI-DL2 Fatal Error */
+actionclass dl2_fatal_error
+{
+ try( funccall("DlFatalError_2"), dl2_omi_bus );
+ threshold1;
+};
+
+################################################################################
# Analyze groups
################################################################################
diff --git a/src/usr/diag/prdf/common/plat/axone/axone_omic_regs.rule b/src/usr/diag/prdf/common/plat/axone/axone_omic_regs.rule
new file mode 100644
index 000000000..297cbf9eb
--- /dev/null
+++ b/src/usr/diag/prdf/common/plat/axone/axone_omic_regs.rule
@@ -0,0 +1,54 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/diag/prdf/common/plat/axone/axone_omic_regs.rule $
+#
+# OpenPOWER HostBoot Project
+#
+# Contributors Listed Below - COPYRIGHT 2019
+# [+] International Business Machines Corp.
+#
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# permissions and limitations under the License.
+#
+# IBM_PROLOG_END_TAG
+
+###############################################################################
+# Additional registers for omic, not defined in XML
+###############################################################################
+
+
+ ###########################################################################
+ # P9 Axone target OMIDLFIR
+ ###########################################################################
+
+ register DL0_ERROR_HOLD
+ {
+ name "P9 Axone target DL0 Error Hold Register";
+ scomaddr 0x07013353;
+ capture group default;
+ };
+
+ register DL1_ERROR_HOLD
+ {
+ name "P9 Axone target DL1 Error Hold Register";
+ scomaddr 0x07013363;
+ capture group default;
+ };
+
+ register DL2_ERROR_HOLD
+ {
+ name "P9 Axone target DL2 Error Hold Register";
+ scomaddr 0x07013373;
+ capture group default;
+ };
diff --git a/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C b/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C
new file mode 100644
index 000000000..de089ab88
--- /dev/null
+++ b/src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C
@@ -0,0 +1,123 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2019 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+// Framework includes
+#include <iipServiceDataCollector.h>
+#include <prdfExtensibleChip.H>
+#include <prdfPluginMap.H>
+
+// Platform includes
+#include <prdfPlatServices.H>
+
+using namespace TARGETING;
+
+namespace PRDF
+{
+
+using namespace PlatServices;
+
+namespace axone_omic
+{
+
+//##############################################################################
+//
+// OMIDLFIR
+//
+//##############################################################################
+
+/**
+ * @brief OMIDLFIR[0|20|40] - OMI-DL Fatal Error
+ * @param i_chip An OMIC chip.
+ * @param io_sc The step code data struct.
+ * @param i_dl The DL relative to the OMIC.
+ * @return PRD_SCAN_COMM_REGISTER_ZERO for the bus callout, else SUCCESS
+ */
+int32_t DlFatalError( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc,
+ uint8_t i_dl )
+{
+ #define PRDF_FUNC "[axone_omic::DlFatalError] "
+
+ int32_t rc = SUCCESS;
+
+ do
+ {
+ char reg[64];
+ sprintf( reg, "DL%d_ERROR_HOLD", i_dl );
+
+ // Check DL#_ERROR_HOLD[52:63] to determine callout
+ SCAN_COMM_REGISTER_CLASS * dl_error_hold = i_chip->getRegister( reg );
+
+ if ( SUCCESS != dl_error_hold->Read() )
+ {
+ PRDF_ERR( PRDF_FUNC "Read() Failed on DL%d_ERROR_HOLD: "
+ "i_chip=0x%08x", i_dl, i_chip->getHuid() );
+ break;
+ }
+
+ if ( dl_error_hold->IsBitSet(53) ||
+ dl_error_hold->IsBitSet(55) ||
+ dl_error_hold->IsBitSet(57) ||
+ dl_error_hold->IsBitSet(58) ||
+ dl_error_hold->IsBitSet(59) ||
+ dl_error_hold->IsBitSet(60) ||
+ dl_error_hold->IsBitSet(62) ||
+ dl_error_hold->IsBitSet(63) )
+ {
+ // Get and callout the OMI target
+ ExtensibleChip * omi = getConnectedChild( i_chip, TYPE_OMI, i_dl );
+ io_sc.service_data->SetCallout( omi->getTrgt() );
+ }
+ else if ( dl_error_hold->IsBitSet(54) ||
+ dl_error_hold->IsBitSet(56) ||
+ dl_error_hold->IsBitSet(61) )
+ {
+ // callout the OMI target, the OMI bus, and the OCMB
+ // Return PRD_SCAN_COMM_REGISTER_ZERO so the rule code makes
+ // the appropriate callout.
+ rc = PRD_SCAN_COMM_REGISTER_ZERO;
+ }
+
+ }while(0);
+
+ return rc;
+
+ #undef PRDF_FUNC
+}
+
+#define DL_FATAL_ERROR_PLUGIN( POS ) \
+int32_t DlFatalError_##POS( ExtensibleChip * i_chip, \
+ STEP_CODE_DATA_STRUCT & io_sc ) \
+{ \
+ return DlFatalError( i_chip, io_sc, POS ); \
+} \
+PRDF_PLUGIN_DEFINE( axone_omic, DlFatalError_##POS );
+
+DL_FATAL_ERROR_PLUGIN( 0 );
+DL_FATAL_ERROR_PLUGIN( 1 );
+DL_FATAL_ERROR_PLUGIN( 2 );
+
+} // end namespace axone_omic
+
+} // end namespace PRDF
diff --git a/src/usr/diag/prdf/common/plat/axone/prdf_plat_axone.mk b/src/usr/diag/prdf/common/plat/axone/prdf_plat_axone.mk
index ea76f9121..4df34292d 100644
--- a/src/usr/diag/prdf/common/plat/axone/prdf_plat_axone.mk
+++ b/src/usr/diag/prdf/common/plat/axone/prdf_plat_axone.mk
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2016,2018
+# Contributors Listed Below - COPYRIGHT 2016,2019
# [+] International Business Machines Corp.
#
#
@@ -37,5 +37,6 @@ prd_incpath += ${PRD_SRC_PATH}/common/plat/axone
# Object files common to both FSP and Hostboot
################################################################################
-# plat/cumulus/ (rule plugin related)
+# plat/axone/ (rule plugin related)
+prd_rule_plugin += prdfOmicPlugins.o
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C b/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
index ca1c8af38..a641fbac3 100644
--- a/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
+++ b/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
@@ -1097,6 +1097,40 @@ PRDF_PLUGIN_DEFINE_NS( explorer_ocmb, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( cumulus_dmi, LaneRepair, calloutBusInterfacePlugin );
PRDF_PLUGIN_DEFINE_NS( centaur_membuf, LaneRepair, calloutBusInterfacePlugin );
+/**
+ * @brief Add callouts for a BUS interface inputting a OMIC target
+ * @param i_chip OMIC chip
+ * @param io_sc Step code data struct.
+ * @param i_dl The DL relative to the OMIC.
+ * @return SUCCESS always
+ */
+
+int32_t omicCalloutBusInterfacePlugin( ExtensibleChip * i_chip,
+ STEP_CODE_DATA_STRUCT & io_sc, uint8_t i_dl )
+{
+ ExtensibleChip * omi = getConnectedChild( i_chip, TYPE_OMI, i_dl );
+ ExtensibleChip * ocmb = getConnectedChild( omi, TYPE_OCMB_CHIP, 0 );
+
+ // Callout both ends of the bus as well (OMI and OCMB)
+ io_sc.service_data->SetCallout( omi->getTrgt(), MRU_MEDA );
+ io_sc.service_data->SetCallout( ocmb->getTrgt(), MRU_MEDA );
+
+ calloutBusInterface(omi, io_sc, MRU_LOW);
+ return SUCCESS;
+}
+
+#define OMIC_CALL_BUS_PLUGIN( POS ) \
+int32_t omicCalloutBusInterfacePlugin_##POS( ExtensibleChip * i_chip, \
+ STEP_CODE_DATA_STRUCT & io_sc ) \
+{ \
+ return omicCalloutBusInterfacePlugin( i_chip, io_sc, POS ); \
+} \
+PRDF_PLUGIN_DEFINE_NS( axone_omic, LaneRepair, \
+ omicCalloutBusInterfacePlugin_##POS );
+
+OMIC_CALL_BUS_PLUGIN( 0 );
+OMIC_CALL_BUS_PLUGIN( 1 );
+OMIC_CALL_BUS_PLUGIN( 2 );
//------------------------------------------------------------------------------
diff --git a/src/usr/diag/prdf/common/plat/prdfTargetServices.C b/src/usr/diag/prdf/common/plat/prdfTargetServices.C
index 09136d820..ddb7dcaad 100755
--- a/src/usr/diag/prdf/common/plat/prdfTargetServices.C
+++ b/src/usr/diag/prdf/common/plat/prdfTargetServices.C
@@ -957,13 +957,16 @@ TargetHandle_t getConnectedChild( TargetHandle_t i_target, TYPE i_connType,
else if ( TYPE_OMIC == trgtType && TYPE_OMI == i_connType )
{
// i_connPos is position relative to OMIC (0-2)
- itr = std::find_if( list.begin(), list.end(),
- [&](const TargetHandle_t & t)
- {
- uint32_t omiPos = getTargetPosition(t);
- return (trgtPos == (omiPos / MAX_OMI_PER_OMIC)) &&
- (i_connPos == (omiPos % MAX_OMI_PER_OMIC));
- } );
+ for ( auto & trgt : list )
+ {
+ uint8_t omiPos = 0;
+ if ( trgt->tryGetAttr<ATTR_OMI_DL_GROUP_POS>(omiPos) &&
+ (i_connPos == omiPos) )
+ {
+ *itr = trgt;
+ break;
+ }
+ }
}
else if ( TYPE_PROC == trgtType && TYPE_NPU == i_connType )
{
diff --git a/src/usr/diag/prdf/makefile b/src/usr/diag/prdf/makefile
index 02d8a0c9c..8fda714ed 100755
--- a/src/usr/diag/prdf/makefile
+++ b/src/usr/diag/prdf/makefile
@@ -39,6 +39,7 @@ include prdf_hb_only.mk # Will define PRD_SRC_PATH and PRD_INC_PATH
include common/prdf_common_fsp_and_hb.mk
include common/framework/prdf_framework.mk
include common/plat/p9/prdf_plat_p9.mk
+include common/plat/axone/prdf_plat_axone.mk
include common/plat/cen/prdf_plat_cen.mk
include common/plat/mem/prdf_plat_mem.mk
include common/plat/centaur/prdf_plat_centaur.mk
diff --git a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
index 77d511415..1e4eed1f7 100644
--- a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
+++ b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
@@ -621,6 +621,13 @@ void getAddresses( TrgtMap_t & io_targMap )
0x07013340, // OMIDLFIR
};
+ io_targMap[TRGT_OMIC][REG_REG] =
+ {
+ 0x07013353, // DL0_ERROR_HOLD
+ 0x07013363, // DL1_ERROR_HOLD
+ 0x07013373, // DL2_ERROR_HOLD
+ };
+
io_targMap[TRGT_OCMB][REG_GLBL] =
{
0x08040000, // MB_CHIPLET_CS_FIR
diff --git a/src/usr/diag/prdf/runtime/makefile b/src/usr/diag/prdf/runtime/makefile
index 4990aceb0..970ce9333 100644
--- a/src/usr/diag/prdf/runtime/makefile
+++ b/src/usr/diag/prdf/runtime/makefile
@@ -38,6 +38,7 @@ include ../prdf_hb_only.mk # Will define PRD_SRC_PATH and PRD_INC_PATH
include ../common/prdf_common_fsp_and_hb.mk
include ../common/framework/prdf_framework.mk
include ../common/plat/p9/prdf_plat_p9.mk
+include ../common/plat/axone/prdf_plat_axone.mk
include ../common/plat/cen/prdf_plat_cen.mk
include ../common/plat/mem/prdf_plat_mem.mk
include ../common/plat/centaur/prdf_plat_centaur.mk
OpenPOWER on IntegriCloud