Skip to content

Commit

Permalink
PRD: removed unused P8 code
Browse files Browse the repository at this point in the history
Change-Id: Icbe20fe011831b1236e9925ebcc93364c8743473
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59115
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59231
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
  • Loading branch information
zane131 committed May 23, 2018
1 parent 4b7ee36 commit aa0df6e
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 1,736 deletions.
335 changes: 0 additions & 335 deletions src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaTdCtlr_common.C
Original file line number Diff line number Diff line change
Expand Up @@ -43,281 +43,6 @@ using namespace PlatServices;

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

bool CenMbaTdCtlrCommon::isInTdMode()
{
return ( (NO_OP != iv_tdState) && (MAX_TD_STATE > iv_tdState) );
}

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

int32_t CenMbaTdCtlrCommon::cleanupPrevCmd()
{
#define PRDF_FUNC "[CenMbaTdCtlrCommon::cleanupPrevCmd] "

int32_t o_rc = SUCCESS;

// Clean up the current maintenance command. This must be done whenever
// maintenance command will no longer be executed.
if ( NULL != iv_mssCmd )
{
o_rc = iv_mssCmd->cleanupCmd();
if ( SUCCESS != o_rc )
PRDF_ERR( PRDF_FUNC "cleanupCmd() failed" );

delete iv_mssCmd; iv_mssCmd = NULL;
}

// Clear the command complete attention. This must be done before starting
// the next maintenance command.
SCAN_COMM_REGISTER_CLASS * firand = iv_mbaChip->getRegister("MBASPA_AND");
firand->setAllBits();

firand->ClearBit(0); // Maintenance command complete
firand->ClearBit(8); // Maintenance command complete (DD1.0 workaround)

if ( SUCCESS != firand->Write() )
{
PRDF_ERR( PRDF_FUNC "Write() failed on MBASPA_AND" );
o_rc = FAIL;
}

return o_rc;

#undef PRDF_FUNC
}

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

int32_t CenMbaTdCtlrCommon::prepareNextCmd( bool i_clearStats )
{
#define PRDF_FUNC "[CenMbaTdCtlrCommon::prepareNextCmd] "

int32_t o_rc = SUCCESS;

do
{
//----------------------------------------------------------------------
// Clean up previous command
//----------------------------------------------------------------------

o_rc = cleanupPrevCmd();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "cleanupPrevCmd() failed" );
break;
}

//----------------------------------------------------------------------
// Clear ECC counters
//----------------------------------------------------------------------

const char * reg_str = NULL;

if ( i_clearStats )
{
reg_str = (0 == iv_mbaPos) ? "MBSTR_0" : "MBSTR_1";
SCAN_COMM_REGISTER_CLASS * mbstr =
iv_membChip->getRegister( reg_str );

// MBSTR's content could be modified from cleanupCmd()
// so we need to refresh
o_rc = mbstr->ForceRead();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "ForceRead() failed on %s", reg_str );
break;
}

mbstr->SetBit(53); // Setting this bit clears all counters.

o_rc = mbstr->Write();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Write() failed on %s", reg_str );
break;
}

// Hardware automatically clears bit 53, so flush this register out
// of the register cache to avoid clearing the counters again with
// a write from the out-of-date cached copy.
RegDataCache & cache = RegDataCache::getCachedRegisters();
cache.flush( iv_membChip, mbstr );
}

//----------------------------------------------------------------------
// Clear ECC FIRs
//----------------------------------------------------------------------

reg_str = (0 == iv_mbaPos) ? "MBSECCFIR_0_AND" : "MBSECCFIR_1_AND";
SCAN_COMM_REGISTER_CLASS * firand = iv_membChip->getRegister( reg_str );
firand->setAllBits();

// Clear all scrub MPE bits.
// This will need to be done when starting a TD procedure or background
// scrubbing. iv_rank may not be set when starting background scrubbing
// and technically there should only be one of these MPE bits on at a
// time so we should not have to worry about losing an attention by
// clearing them all.
firand->SetBitFieldJustified( 20, 8, 0 );

// Clear scrub NCE, SCE, MCE, RCE, SUE, UE bits (36-41)
firand->SetBitFieldJustified( 36, 6, 0 );

o_rc = firand->Write();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Write() failed on %s", reg_str );
break;
}

SCAN_COMM_REGISTER_CLASS * spaAnd =
iv_mbaChip->getRegister("MBASPA_AND");
spaAnd->setAllBits();

// Clear threshold exceeded attentions
spaAnd->SetBitFieldJustified( 1, 4, 0 );

o_rc = spaAnd->Write();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Write() failed on MBASPA_AND" );
break;
}

} while (0);

return o_rc;

#undef PRDF_FUNC
}

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

int32_t CenMbaTdCtlrCommon::chipMarkCleanup()
{
#define PRDF_FUNC "[CenMbaTdCtlrCommon::chipMarkCleanup] "

int32_t o_rc = SUCCESS;

do
{
SCAN_COMM_REGISTER_CLASS * ddrPhyAndFir =
iv_mbaChip->getRegister( "MBADDRPHYFIR_AND" );
ddrPhyAndFir->setAllBits();

ddrPhyAndFir->ClearBit(50); // Calibration Error RE 0
ddrPhyAndFir->ClearBit(58); // Calibration Error RE 1

o_rc = ddrPhyAndFir->Write();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Write() failed on MBADDRPHYFIR_AND" );
break;
}

} while(0);

return o_rc;

#undef PRDF_FUNC
}

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

int32_t CenMbaTdCtlrCommon::checkEccErrors( uint16_t & o_eccErrorMask,
STEP_CODE_DATA_STRUCT & io_sc )
{
#define PRDF_FUNC "[CenMbaTdCtlrCommon::checkEccErrors] "

int32_t o_rc = SUCCESS;

o_eccErrorMask = NO_ERROR;

do
{
const char * reg_str = (0 == iv_mbaPos) ? "MBSECCFIR_0" : "MBSECCFIR_1";
SCAN_COMM_REGISTER_CLASS * mbsEccFir
= iv_membChip->getRegister( reg_str );
o_rc = mbsEccFir->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() failed on %s", reg_str );
break;
}

if ( mbsEccFir->IsBitSet(20 + iv_rank.getMaster()) )
{
o_eccErrorMask |= MPE;
io_sc.service_data->AddSignatureList(iv_mbaTrgt, PRDFSIG_MaintMPE);

// Clean up side-effect FIRs that may be set due to the chip mark.
o_rc = chipMarkCleanup();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "chipMarkCleanup() failed" );
break;
}
}

if ( mbsEccFir->IsBitSet(38) )
{
// No need to add error signature. MCE is not error. It will be
// handled only in VCM/DSD phase 2.
o_eccErrorMask |= MCE;
}

if ( mbsEccFir->IsBitSet(41) )
{
o_eccErrorMask |= UE;
io_sc.service_data->AddSignatureList( iv_mbaTrgt, PRDFSIG_MaintUE );
}

SCAN_COMM_REGISTER_CLASS * mbaSpaFir =
iv_mbaChip->getRegister("MBASPA");
o_rc = mbaSpaFir->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Failed to read MBASPA Regsiter");
break;
}

if ( mbaSpaFir->IsBitSet(1) )
{
o_eccErrorMask |= HARD_CTE;
io_sc.service_data->AddSignatureList( iv_mbaTrgt,
PRDFSIG_MaintHARD_CTE );
}

if ( mbaSpaFir->IsBitSet(2) )
{
o_eccErrorMask |= SOFT_CTE;
io_sc.service_data->AddSignatureList( iv_mbaTrgt,
PRDFSIG_MaintSOFT_CTE );
}

if ( mbaSpaFir->IsBitSet(3) )
{
o_eccErrorMask |= INTER_CTE;
io_sc.service_data->AddSignatureList( iv_mbaTrgt,
PRDFSIG_MaintINTER_CTE );
}

if ( mbaSpaFir->IsBitSet(4) )
{
o_eccErrorMask |= RETRY_CTE;
io_sc.service_data->AddSignatureList( iv_mbaTrgt,
PRDFSIG_MaintRETRY_CTE );
}

} while(0);

return o_rc;

#undef PRDF_FUNC
}

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

int32_t CenMbaTdCtlrCommon::handleMCE_VCM2( STEP_CODE_DATA_STRUCT & io_sc )
{
#define PRDF_FUNC "[CenMbaTdCtlrCommon::handleMCE_VCM2] "
Expand Down Expand Up @@ -572,65 +297,5 @@ int32_t CenMbaTdCtlrCommon::handleMCE_DSD2( STEP_CODE_DATA_STRUCT & io_sc )
#undef PRDF_FUNC
}

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

int32_t CenMbaTdCtlrCommon::setRtEteThresholds()
{
int32_t o_rc = SUCCESS;

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Moved to setBgScrubThresholds() in prdfMemScrubUtils.C
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

return o_rc;
}

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

void CenMbaTdCtlrCommon::badPathErrorHandling( STEP_CODE_DATA_STRUCT & io_sc )
{
#define PRDF_FUNC "[CenMbaTdCtlrCommon::badPathErrorHandling] "

PRDF_ERR( PRDF_FUNC "iv_mbaChip:0x%08x iv_initialized:%c iv_tdState:%d "
"iv_rank:M%dS%d iv_mark:%2d %2d", iv_mbaChip->GetId(),
iv_initialized ? 'T' : 'F', iv_tdState, iv_rank.getMaster(),
iv_rank.getSlave(), iv_mark.getCM().getSymbol(),
iv_mark.getSM().getSymbol() );

iv_tdState = NO_OP;

setTdSignature( io_sc, PRDFSIG_MaintCmdComplete_ERROR );
io_sc.service_data->setServiceCall();

// There may have been a code bug, callout 2nd level support.
io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_HIGH );

// Callout the rank if no other callouts have been made (besides 2nd
// Level Support). Note that iv_mark is not always guaranteed to be
// valid for every error scenario. For simplicity, callout the rank that
// was targeted with low priority.
if ( 1 == io_sc.service_data->getMruListSize() )
{
MemoryMru memmru ( iv_mbaTrgt, iv_rank, MemoryMruData::CALLOUT_RANK );
io_sc.service_data->SetCallout( memmru, MRU_LOW );
}

// Just in case it was a legitimate maintenance command complete (error
// log not committed) but something else failed.
io_sc.service_data->clearDontCommitErrl();

#undef PRDF_FUNC
}

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

void CenMbaTdCtlrCommon::setTdSignature( STEP_CODE_DATA_STRUCT & io_sc,
uint32_t i_sig )
{
HUID mbaId = iv_mbaChip->GetId();
(io_sc.service_data->GetErrorSignature())->setChipId(mbaId);
io_sc.service_data->SetErrorSig( i_sig );
}

} // end namespace PRDF

0 comments on commit aa0df6e

Please sign in to comment.