From e3407c1b48ade6408ff444dd0c8d94a005a9d94c Mon Sep 17 00:00:00 2001 From: Caleb Palmer Date: Tue, 8 Oct 2019 14:56:50 -0500 Subject: PRD: OCMB handling for checkstop analysis path Change-Id: I708d59f8bbf732edac4ee77e9885bf287cdf03d8 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/85020 Tested-by: Jenkins Server Reviewed-by: Benjamen G Tyner Reviewed-by: Brian J Stegmiller Reviewed-by: Paul Greenwood Reviewed-by: Zane C Shelley Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/85204 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins --- .../prdf/common/plat/axone/axone_mcc_actions.rule | 4 +- .../diag/prdf/common/plat/axone/prdfMccPlugins.C | 52 ++++++++++++++++++++++ .../diag/prdf/occ_firdata/prdfWriteHomerFirData.C | 33 -------------- 3 files changed, 54 insertions(+), 35 deletions(-) diff --git a/src/usr/diag/prdf/common/plat/axone/axone_mcc_actions.rule b/src/usr/diag/prdf/common/plat/axone/axone_mcc_actions.rule index 5081420f8..e34035165 100644 --- a/src/usr/diag/prdf/common/plat/axone/axone_mcc_actions.rule +++ b/src/usr/diag/prdf/common/plat/axone/axone_mcc_actions.rule @@ -164,12 +164,12 @@ actionclass analyzeUSTLFIR { analyze(gUSTLFIR); }; actionclass analyze_ocmb_chnl0 { - analyze(connected(TYPE_OCMB_CHIP, 0)); + try( funccall("checkOcmb_0"), analyze(connected(TYPE_OCMB_CHIP, 0)) ); }; actionclass analyze_ocmb_chnl1 { - analyze(connected(TYPE_OCMB_CHIP, 1)); + try( funccall("checkOcmb_1"), analyze(connected(TYPE_OCMB_CHIP, 1)) ); }; actionclass analyze_ocmb_chnl0_UERE diff --git a/src/usr/diag/prdf/common/plat/axone/prdfMccPlugins.C b/src/usr/diag/prdf/common/plat/axone/prdfMccPlugins.C index cb0a2a290..804418717 100644 --- a/src/usr/diag/prdf/common/plat/axone/prdfMccPlugins.C +++ b/src/usr/diag/prdf/common/plat/axone/prdfMccPlugins.C @@ -31,6 +31,7 @@ // Platform includes #include #include +#include using namespace TARGETING; @@ -84,6 +85,57 @@ int32_t PostAnalysis( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc ) } PRDF_PLUGIN_DEFINE( axone_mcc, PostAnalysis ); +//############################################################################## +// +// DSTLFIR +// +//############################################################################## + +/** + * @brief Plugin function called to avoid analyzing to a checkstop on an OCMB. + * @param i_chip A MCC chip. + * @param io_sc The step code data struct. + * @param i_pos Position of the OMI/OCMB relative to the MCC. + * @return SUCCESS if the primary attn is CS, else PRD_SCAN_COMM_REGISTER_ZERO. + */ +int32_t checkOcmb( ExtensibleChip * i_chip, STEP_CODE_DATA_STRUCT & io_sc, + uint8_t i_pos ) +{ + int32_t rc = PRD_SCAN_COMM_REGISTER_ZERO; + + #ifdef CONFIG_ENABLE_CHECKSTOP_ANALYSIS + // We do not have support for the OCMB in the checkstop analysis path. + // As such, we will simply indicate there is an attention from the OCMB and + // add second level support and both sides of the bus as callouts. + if ( CHECK_STOP == io_sc.service_data->getPrimaryAttnType() ) + { + TargetHandle_t omi = getConnectedChild( i_chip->getTrgt(), TYPE_OMI, + i_pos ); + ExtensibleChip * ocmb = getConnectedChild( i_chip, TYPE_OCMB_CHIP, + i_pos ); + + io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_MED, NO_GARD ); + io_sc.service_data->SetCallout( omi, MRU_LOW, NO_GARD ); + io_sc.service_data->SetCallout( ocmb->getTrgt(), MRU_LOW, NO_GARD ); + + rc = SUCCESS; + } + #endif + + return rc; +} + +#define CHECK_OCMB_PLUGIN( POS ) \ +int32_t checkOcmb_##POS( ExtensibleChip * i_chip, \ + STEP_CODE_DATA_STRUCT & io_sc ) \ +{ \ + return checkOcmb( i_chip, io_sc, POS ); \ +} \ +PRDF_PLUGIN_DEFINE( axone_mcc, checkOcmb_##POS ); + +CHECK_OCMB_PLUGIN( 0 ); +CHECK_OCMB_PLUGIN( 1 ); + } // end namespace axone_mcc } // end namespace PRDF diff --git a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C index f5b5899ae..2e9b6f963 100644 --- a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C +++ b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C @@ -628,39 +628,6 @@ void getAddresses( TrgtMap_t & io_targMap ) 0x07013373, // DL2_ERROR_HOLD }; - io_targMap[TRGT_OCMB][REG_GLBL] = - { - 0x08040000, // MB_CHIPLET_CS_FIR - 0x08040001, // MB_CHIPLET_RE_FIR - 0x08040004, // MB_CHIPLET_SPA_FIR - }; - - io_targMap[TRGT_OCMB][REG_FIR] = - { - 0x0804000a, // MB_LFIR - 0x08010870, // MMIOFIR - 0x08011400, // SRQFIR - 0x08011800, // MCBISTFIR - 0x08011c00, // RDFFIR - 0x08012400, // TLXFIR - 0x08012800, // OMIDLFIR - }; - - io_targMap[TRGT_OCMB][REG_REG] = - { - 0x08040002, // MB_CHIPLET_FIR_MASK - 0x08040007, // MB_CHIPLET_SPA_FIR_MASK - 0x08012813, // DL0_ERROR_HOLD - 0x0801241D, // TLX_ERR1_REPORT - - // AUE/IAUE analysis - 0x080118D7, // MCBMCAT - - // AUE/IAUE analysis - 0x0801186D, // MBUER - 0x0801186E, // MBAUER - }; - // EC level handling will be done with a // structure and separate register count field. -- cgit v1.2.1