Skip to content

Commit

Permalink
PRD: Missing errl for IUEs because of port fail
Browse files Browse the repository at this point in the history
Change-Id: I0c3af0033a2898b0fc655b2b1774ab03d1a7430c
CQ: SW391845
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48496
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48584
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
  • Loading branch information
cnpalmer authored and zane131 committed Oct 19, 2017
1 parent 4b0e1b5 commit c32b7f7
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/usr/diag/prdf/common/plat/mem/prdfMemEccAnalysis.C
Expand Up @@ -173,6 +173,24 @@ uint32_t maskMemPort<TYPE_MCA>( ExtensibleChip * i_chip )

c->setAllBits(); d->setAllBits(); e->setAllBits();

// We don't want to mask the IUE bits in the MCAECCFIR if they are on
// so if we trigger a port fail that causes a checkstop we have
// something to blame it on.
SCAN_COMM_REGISTER_CLASS * mcaeccfir = i_chip->getRegister("MCAECCFIR");

o_rc = mcaeccfir->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() Failed on MCAECCFIR: i_chip=0x%08x",
i_chip->getHuid() );
break;
}

if ( mcaeccfir->IsBitSet(17) )
e->ClearBit(17);
if ( mcaeccfir->IsBitSet(37) )
e->ClearBit(37);

o_rc = c->Write() | d->Write() | e->Write();
if ( SUCCESS != o_rc )
{
Expand Down Expand Up @@ -256,6 +274,9 @@ uint32_t iuePortFail<TYPE_MCA>( ExtensibleChip * i_chip,
{
resetTh.second.reset();
}

db->iv_iuePortFail = true;

break;
}
}
Expand Down Expand Up @@ -751,6 +772,24 @@ uint32_t handleMemIue( ExtensibleChip * i_chip, const MemRank & i_rank,
// Get the data bundle from chip.
D db = static_cast<D>( i_chip->getDataBundle() );

// If we have already caused a port fail, mask the IUE bits.
if ( true == db->iv_iuePortFail )
{
SCAN_COMM_REGISTER_CLASS * mask_or =
i_chip->getRegister("MCAECCFIR_MASK_OR");

mask_or->SetBit(17);
mask_or->SetBit(37);

o_rc = mask_or->Write();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Write() failed on 0x%08x",
i_chip->getHuid() );
break;
}
}

// Get the DIMM select.
uint8_t ds = i_rank.getDimmSlct();

Expand Down
3 changes: 3 additions & 0 deletions src/usr/diag/prdf/common/plat/mem/prdfP9McaDataBundle.H
Expand Up @@ -190,6 +190,9 @@ class McaDataBundle : public DataBundle
/** Threshold table for IUEs. Threshold per DIMM */
std::map<uint8_t, TimeBasedThreshold> iv_iueTh;

/** Bool to indicate if we've triggered a port fail because of IUEs. */
bool iv_iuePortFail = false;

#endif

#ifdef __HOSTBOOT_RUNTIME
Expand Down

0 comments on commit c32b7f7

Please sign in to comment.