Skip to content

Commit

Permalink
PRD: Initial Axone Rule Plugins
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
cnpalmer authored and zane131 committed Jun 18, 2019
1 parent c153a43 commit ab4ea69
Show file tree
Hide file tree
Showing 9 changed files with 289 additions and 10 deletions.
57 changes: 56 additions & 1 deletion src/usr/diag/prdf/common/plat/axone/axone_omic_actions.rule
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
# Contributors Listed Below - COPYRIGHT 2018
# Contributors Listed Below - COPYRIGHT 2018,2019
# [+] International Business Machines Corp.
#
#
Expand All @@ -23,6 +23,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
################################################################################
Expand Down
54 changes: 54 additions & 0 deletions src/usr/diag/prdf/common/plat/axone/axone_omic_regs.rule
Original file line number Diff line number Diff line change
@@ -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;
};
123 changes: 123 additions & 0 deletions src/usr/diag/prdf/common/plat/axone/prdfOmicPlugins.C
Original file line number Diff line number Diff line change
@@ -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
5 changes: 3 additions & 2 deletions src/usr/diag/prdf/common/plat/axone/prdf_plat_axone.mk
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
# Contributors Listed Below - COPYRIGHT 2016,2018
# Contributors Listed Below - COPYRIGHT 2016,2019
# [+] International Business Machines Corp.
#
#
Expand Down Expand Up @@ -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

34 changes: 34 additions & 0 deletions src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

//------------------------------------------------------------------------------

Expand Down
17 changes: 10 additions & 7 deletions src/usr/diag/prdf/common/plat/prdfTargetServices.C
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
{
Expand Down
1 change: 1 addition & 0 deletions src/usr/diag/prdf/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/usr/diag/prdf/runtime/makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit ab4ea69

Please sign in to comment.