diff options
| author | Zane Shelley <zshelle@us.ibm.com> | 2014-01-31 17:32:38 -0600 | 
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-06 17:33:12 -0600 | 
| commit | 9fd68c17cf40ecf7343ab51f49e2a6a538c27f1b (patch) | |
| tree | 883113639e71c411a82a7c7a3fd46aa5984cd146 /src | |
| parent | 78db12452b19b1ff6416c71c6eefddc49419bfcf (diff) | |
| download | blackbird-hostboot-9fd68c17cf40ecf7343ab51f49e2a6a538c27f1b.tar.gz blackbird-hostboot-9fd68c17cf40ecf7343ab51f49e2a6a538c27f1b.zip | |
PRD: Better callouts for combine response errors
Change-Id: I43e5854138a87f9e3f18f47e00bcaea38270db1c
CQ: SW244371
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8493
Tested-by: Jenkins Server
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8579
Diffstat (limited to 'src')
| -rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule | 14 | ||||
| -rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule | 9 | ||||
| -rwxr-xr-x | src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C | 78 | 
3 files changed, 98 insertions, 3 deletions
| diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule index cde63dbc0..69b5175cf 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_acts_PB.rule @@ -1240,7 +1240,7 @@ group gPbCentFir filter singlebit      /** PBCENTFIR[5]       *  PB_CENT_CRESP_ADDR_ERROR       */ -    (PbCentFir, bit(5)) ?  calloutProcAnalyzeMpIpl; +    (PbCentFir, bit(5)) ? combinedResponseError;      /** PBCENTFIR[6]       *  PB_CENT_CRESP_ERROR @@ -1265,7 +1265,7 @@ group gPbCentFir filter singlebit      /** PBCENTFIR[10]       *  PB_CENT_FORCE_MP_IPL       */ -    (PbCentFir, bit(10)) ? calloutProcAnalyzeMpIpl; +    (PbCentFir, bit(10)) ? forceMpIpl;      /** PBCENTFIR[11]       *  PB_CENT_FIR_SPARE_0 @@ -3150,8 +3150,16 @@ actionclass calloutNxThr5pHr      threshold5phour;  }; -actionclass calloutProcAnalyzeMpIpl +actionclass combinedResponseError +{ +    callout2ndLvlMedThr1; +    funccall("combinedResponseCallout"); +    funccall("analyzeMpIPL"); +}; + +actionclass forceMpIpl  {      calloutProcLevel2MedThr1;      funccall("analyzeMpIPL");  }; + diff --git a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule index 600bcfc93..4b19ffeee 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Proc_regs_PB.rule @@ -384,6 +384,15 @@          capture     req nonzero("PBEASTFIR");      }; +    # c_err_rpt for PBWESTFIR, PBCENTFIR, and PBEASTFIR +    register PB_CENT_CR_ERROR +    { +        name        "EH.PB.MISC.PB_CENT_CR_ERROR"; +        scomaddr    0x02010c6c; +        capture     group default; +        capture     group CerrRegs; +    }; +      ############################################################################      # PB Chiplet PBEXTFIR      ############################################################################ diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C index aeec2edfa..6700a9e2d 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfP8Proc.C @@ -582,6 +582,84 @@ PRDF_PLUGIN_DEFINE( Proc, calloutMasterCore );  //------------------------------------------------------------------------------  /** + * @brief   Calls out the EX chiplet (MRU_LOW), if possible. Otherwise, calls + *          out the PROC (MRU_LOW) + * @param   i_chip   P8 chip + * @param   io_sc    service data collector + * @returns SUCCESS + */ +int32_t combinedResponseCallout( ExtensibleChip * i_chip, +                                 STEP_CODE_DATA_STRUCT & io_sc ) +{ +    #define PRDF_FUNC "[Proc::combinedResponseCallout] " + +    int32_t l_rc = SUCCESS; + +    TargetHandle_t procTrgt = i_chip->GetChipHandle(); + +    SCAN_COMM_REGISTER_CLASS * reg = i_chip->getRegister("PB_CENT_CR_ERROR"); + +    do +    { +        l_rc = reg->Read(); +        if ( SUCCESS != l_rc ) +        { +            PRDF_ERR( PRDF_FUNC"Read() failed on PB_CENT_CR_ERROR" ); +            break; +        } + +        uint32_t tmp = reg->GetBitFieldJustified(0,3); +        if ( 0x02 != tmp ) // Must be 0b010 to continue +        { +            PRDF_ERR( PRDF_FUNC"Unsupported reason code: 0x%02x", tmp ); +            l_rc = FAIL; break; +        } + +        tmp = reg->GetBitFieldJustified(38,5); +        if ( 0x00 != tmp ) // Must be 0b00000 to continue +        { +            PRDF_ERR( PRDF_FUNC"Unsupported combined response encoding: 0x%02x", +                      tmp ); +            l_rc = FAIL; break; +        } + +        if ( reg->IsBitSet(22) ) // Must be 0b0 to continue +        { +            PRDF_ERR( PRDF_FUNC"Operation not sourced by an EX chiplet" ); +            l_rc = FAIL; break; +        } + +        // Get the EX target +        tmp = reg->GetBitFieldJustified(23,4); +        TargetHandle_t exTrgt = getConnectedChild( procTrgt, TYPE_EX, tmp ); +        if ( NULL == exTrgt ) +        { +            PRDF_ERR( PRDF_FUNC"No connected EX chiplet at position %d", tmp ); +            l_rc = FAIL; break; +        } + +        // Callout the EX target +        io_sc.service_data->SetCallout( exTrgt, MRU_LOW ); + +    } while (0); + +    if ( SUCCESS != l_rc ) +    { +        PRDF_ERR( PRDF_FUNC"Unable to isolate to an EX chiplet. Calling out " +                  "PROC 0x%08x instead.", i_chip->GetId() ); + +        io_sc.service_data->SetCallout( procTrgt, MRU_LOW ); +    } + +    return SUCCESS; + +    #undef PRDF_FUNC +} +PRDF_PLUGIN_DEFINE( Proc, combinedResponseCallout ); + +//------------------------------------------------------------------------------ + +/**   * @brief   When not in MNFG mode, clear the service call flag so that   *          thresholding will still be done, but no visible error log committed.   * @param   i_chip P8 chip | 

