Skip to content

Commit

Permalink
PRD: Remove use of unsupported MEM_PORT ExtensibleChip
Browse files Browse the repository at this point in the history
Change-Id: I2fe2952854a62ce0b562eacdb7a554ed6a9f1881
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79344
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com>
Reviewed-by: Benjamen G. Tyner <ben.tyner@ibm.com>
Reviewed-by: Paul Greenwood <paul.greenwood@ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/79346
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
cnpalmer authored and zane131 committed Jun 28, 2019
1 parent 8db1ba5 commit 8e6a69d
Show file tree
Hide file tree
Showing 15 changed files with 165 additions and 257 deletions.
Expand Up @@ -241,18 +241,18 @@ int32_t RdfRcdParityError( ExtensibleChip * i_chip,
if ( rdffir->IsBitSet(40) )
{
// callout MEM_PORT on 1st occurrence
ExtensibleChip * memPort =
getConnectedChild( i_chip, TYPE_MEM_PORT, 0 );
io_sc.service_data->SetCallout( memPort->getTrgt() );
TargetHandle_t memPort =
getConnectedChild( i_chip->getTrgt(), TYPE_MEM_PORT, 0 );
io_sc.service_data->SetCallout( memPort );
}
// Else this is 'confirmed RCD parity error' case
else
{
// callout DIMM high priority, MEM_PORT low on 1st occurrence
CalloutAttachedDimmsHigh( i_chip, io_sc );
ExtensibleChip * memPort =
getConnectedChild( i_chip, TYPE_MEM_PORT, 0 );
io_sc.service_data->SetCallout( memPort->getTrgt(), MRU_LOW );
TargetHandle_t memPort =
getConnectedChild( i_chip->getTrgt(), TYPE_MEM_PORT, 0 );
io_sc.service_data->SetCallout( memPort, MRU_LOW );
}

// Mask bit 40 as well
Expand Down
87 changes: 0 additions & 87 deletions src/usr/diag/prdf/common/plat/mem/prdfMemAddress.C
Expand Up @@ -611,93 +611,6 @@ uint32_t getMcbistMaintPort<TYPE_MCBIST>( ExtensibleChip * i_mcbChip,
#undef PRDF_FUNC
}

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

template<>
uint32_t getMcbistMaintPort<TYPE_OCMB_CHIP>( ExtensibleChip * i_ocmbChip,
ExtensibleChipList & o_portList )
{
#define PRDF_FUNC "[getMcbistMaintPort] "

// Check parameters
PRDF_ASSERT( nullptr != i_ocmbChip );
PRDF_ASSERT( TYPE_OCMB_CHIP == i_ocmbChip->getType() );

uint32_t o_rc = SUCCESS;

o_portList.clear();

SCAN_COMM_REGISTER_CLASS * mcbagra = i_ocmbChip->getRegister( "MCBAGRA" );
SCAN_COMM_REGISTER_CLASS * mcbmcat = i_ocmbChip->getRegister( "MCBMCAT" );
SCAN_COMM_REGISTER_CLASS * mcb_cntl = i_ocmbChip->getRegister( "MCB_CNTL" );

do
{
o_rc = mcbagra->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() failed on MCBAGRA: i_ocmbChip=0x%08x",
i_ocmbChip->getHuid() );
break;
}

// Get a mask of all ports in which the command was executed. Use
// MCB_CNTL[2:5] only if MCBAGRA[10] is b0 OR MCBAGRA[10:11] is b11.
// Otherwise, use MCBMCAT[38:39].
uint8_t portMask = 0;
if ( !mcbagra->IsBitSet(10) || mcbagra->IsBitSet(11) ) // broadcast mode
{
o_rc = mcb_cntl->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() failed on MCB_CNTL: "
"i_ocmbChip=0x%08x", i_ocmbChip->getHuid() );
break;
}

portMask = mcb_cntl->GetBitFieldJustified( 2, 4 );
}
else // non-broadcast mode
{
o_rc = mcbmcat->Read();
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "Read() failed on MCBMCAT: "
"i_ocmbChip=0x%08x", i_ocmbChip->getHuid() );
break;
}

portMask = 0x8 >> mcbmcat->GetBitFieldJustified( 38, 2 );
}

// Get MEM_PORTs from all targeted ports.
ExtensibleChipList portList = getConnected( i_ocmbChip, TYPE_MEM_PORT );
for ( auto & port : portList )
{
// Get the MEM_PORT position relative to the OCMB
uint8_t portRelPos = port->getTrgt()->getAttr<ATTR_REL_POS>();

// If the port wasn't targeted by the command, skip to next port
if ( 0 == (portMask & (0x8 >> portRelPos)) ) continue;

o_portList.push_back( port );
}

// The list should never be empty.
size_t sz_list = o_portList.size();
if ( 0 == sz_list )
{
PRDF_ERR( PRDF_FUNC "o_portList is empty: i_ocmbChip=0x%08x "
"portMask=0x%0x", i_ocmbChip->getHuid(), portMask );
PRDF_ASSERT( false ); // mcbist functional but no configured ports
}

} while (0);

return o_rc;

#undef PRDF_FUNC
}
#endif

//------------------------------------------------------------------------------
Expand Down
53 changes: 32 additions & 21 deletions src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C
Expand Up @@ -535,25 +535,27 @@ void addEccData<TYPE_MCBIST>( ExtensibleChip * i_chip,
}

template<>
void addEccData<TYPE_MEM_PORT>( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
void addEccData<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
PRDF_ASSERT( TYPE_MEM_PORT == i_chip->getType() );
PRDF_ASSERT( TYPE_OCMB_CHIP == i_chip->getType() );

CaptureData & cd = io_sc.service_data->GetCaptureData();

TargetHandle_t trgt = i_chip->getTrgt();
ExtensibleChip * ocmb = getConnectedParent( i_chip, TYPE_OCMB_CHIP );
OcmbDataBundle * db = getOcmbDataBundle( ocmb );
OcmbDataBundle * db = getOcmbDataBundle( i_chip );
TargetHandle_t ocmbTrgt = i_chip->getTrgt();

// Add DRAM repairs data from hardware.
captureDramRepairsData<TYPE_OCMB_CHIP>( ocmb->getTrgt(), cd );
captureDramRepairsData<TYPE_OCMB_CHIP>( ocmbTrgt, cd );

// Add DRAM repairs data from VPD.
captureDramRepairsVpd<TYPE_MEM_PORT>( trgt, cd );
// TODO RTC 210072 - Explorer only has one port, however, multiple ports
// will be supported in the future. Updates will need to be made here so we
// can get the relevant port.
TargetHandle_t memPort = getConnectedChild( ocmbTrgt, TYPE_MEM_PORT, 0 );
captureDramRepairsVpd<TYPE_MEM_PORT>( memPort, cd );

// Add IUE counts to capture data.
captureIueCounts<OcmbDataBundle*>( ocmb->getTrgt(), db, cd );
captureIueCounts<OcmbDataBundle*>( ocmbTrgt, db, cd );

// Add CE table to capture data.
db->iv_ceTable.addCapData( cd );
Expand All @@ -562,17 +564,6 @@ void addEccData<TYPE_MEM_PORT>( ExtensibleChip * i_chip,
db->iv_ueTable.addCapData( cd );
}

template<>
void addEccData<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
{
PRDF_ASSERT( TYPE_OCMB_CHIP == i_chip->getType() );

// Add data for each connected MEM_PORT.
ExtensibleChipList list = getConnected( i_chip, TYPE_MEM_PORT );
for ( auto & port : list ) { addEccData<TYPE_MEM_PORT>(port, io_sc); }
}

template<>
void addEccData<TYPE_MBA>( ExtensibleChip * i_chip,
STEP_CODE_DATA_STRUCT & io_sc )
Expand Down Expand Up @@ -635,6 +626,26 @@ void addEccData<TYPE_MBA>( TargetHandle_t i_trgt, errlHndl_t io_errl )
ErrDataService::AddCapData( cd, io_errl );
}

template<>
void addEccData<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt,
errlHndl_t io_errl )
{
PRDF_ASSERT( TYPE_OCMB_CHIP == getTargetType(i_trgt) );

CaptureData cd;

// Add DRAM repairs data from hardware.
captureDramRepairsData<TYPE_OCMB_CHIP>( i_trgt, cd );

// Add DRAM repairs data from VPD.
// TODO RTC 210072 - Explorer only has one port, however, multiple ports
// will be supported in the future. Updates will need to be made here so we
// can get the relevant port.
TargetHandle_t memPort = getConnectedChild( i_trgt, TYPE_MEM_PORT, 0 );
captureDramRepairsVpd<TYPE_MEM_PORT>( memPort, cd );

ErrDataService::AddCapData( cd, io_errl );
}

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

Expand Down
24 changes: 10 additions & 14 deletions src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C
Expand Up @@ -700,7 +700,7 @@ uint32_t MemDqBitmap::setEccSpare( uint8_t i_pins )
// Utility Functions
//##############################################################################

uint32_t setDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,
uint32_t setDramInVpd( TargetHandle_t i_trgt, const MemRank & i_rank,
MemSymbol i_symbol )
{
#define PRDF_FUNC "[MemDqBitmap::__setDramInVpd] "
Expand All @@ -709,14 +709,12 @@ uint32_t setDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,

do
{
TARGETING::TargetHandle_t trgt = i_chip->getTrgt();

MemDqBitmap dqBitmap;
o_rc = getBadDqBitmap( trgt, i_rank, dqBitmap );
o_rc = getBadDqBitmap( i_trgt, i_rank, dqBitmap );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "getBadDqBitmap(0x%08x, 0x%02x) failed.",
getHuid(trgt), i_rank.getKey() );
getHuid(i_trgt), i_rank.getKey() );
break;
}

Expand All @@ -727,11 +725,11 @@ uint32_t setDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,
break;
}

o_rc = setBadDqBitmap( trgt, i_rank, dqBitmap );
o_rc = setBadDqBitmap( i_trgt, i_rank, dqBitmap );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "setBadDqBitmap(0x%08x, 0x%02x) failed.",
getHuid(trgt), i_rank.getKey() );
getHuid(i_trgt), i_rank.getKey() );
break;
}
}while(0);
Expand All @@ -743,7 +741,7 @@ uint32_t setDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,

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

uint32_t clearDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,
uint32_t clearDramInVpd( TargetHandle_t i_trgt, const MemRank & i_rank,
MemSymbol i_symbol )
{
#define PRDF_FUNC "[MemDqBitmap::__clearDramInVpd] "
Expand All @@ -752,14 +750,12 @@ uint32_t clearDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,

do
{
TARGETING::TargetHandle_t trgt = i_chip->getTrgt();

MemDqBitmap dqBitmap;
o_rc = getBadDqBitmap( trgt, i_rank, dqBitmap );
o_rc = getBadDqBitmap( i_trgt, i_rank, dqBitmap );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "getBadDqBitmap(0x%08x, 0x%02x) failed.",
getHuid(trgt), i_rank.getKey() );
getHuid(i_trgt), i_rank.getKey() );
break;
}

Expand All @@ -770,11 +766,11 @@ uint32_t clearDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,
break;
}

o_rc = setBadDqBitmap( trgt, i_rank, dqBitmap );
o_rc = setBadDqBitmap( i_trgt, i_rank, dqBitmap );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "setBadDqBitmap(0x%08x, 0x%02x) failed.",
getHuid(trgt), i_rank.getKey() );
getHuid(i_trgt), i_rank.getKey() );
break;
}
}while(0);
Expand Down
9 changes: 5 additions & 4 deletions src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H
Expand Up @@ -250,20 +250,21 @@ class MemDqBitmap

/**
* @brief Sets the inputted dram in DRAM repairs VPD.
* @param i_chip MBA or MCA chip.
* @param i_trgt MBA, MCA, MEM_PORT, or OCMB chip.
* @param i_rank Target rank.
* @return Non-SUCCESS if an internal function fails. SUCCESS otherwise.
*/
uint32_t setDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,
uint32_t setDramInVpd( TARGETING::TargetHandle_t i_trgt, const MemRank & i_rank,
MemSymbol i_symbol );

/**
* @brief Clears the inputted dram in DRAM repairs VPD.
* @param i_chip MBA or MCA chip.
* @param i_trgt MBA, MCA, MEM_PORT, or OCMB chip.
* @param i_rank Target rank.
* @return Non-SUCCESS if an internal function fails. SUCCESS otherwise.
*/
uint32_t clearDramInVpd( ExtensibleChip * i_chip, const MemRank & i_rank,
uint32_t clearDramInVpd( TARGETING::TargetHandle_t i_trgt,
const MemRank & i_rank,
MemSymbol i_symbol );

} // end namespace PRDF
Expand Down
25 changes: 13 additions & 12 deletions src/usr/diag/prdf/common/plat/mem/prdfMemMark.C
Expand Up @@ -1009,7 +1009,7 @@ void __addCallout( ExtensibleChip * i_chip, const MemRank & i_rank,
//------------------------------------------------------------------------------

template<TARGETING::TYPE T>
uint32_t __addRowRepairCallout( ExtensibleChip * i_chip,
uint32_t __addRowRepairCallout( TargetHandle_t i_trgt,
const MemRank & i_rank,
STEP_CODE_DATA_STRUCT & io_sc )
{
Expand All @@ -1018,7 +1018,7 @@ uint32_t __addRowRepairCallout( ExtensibleChip * i_chip,
uint32_t o_rc = SUCCESS;

// Get the dimms on this rank on either port.
TargetHandleList dimmList = getConnectedDimms( i_chip->getTrgt(), i_rank );
TargetHandleList dimmList = getConnectedDimms( i_trgt, i_rank );

// Check for row repairs on each dimm.
for ( auto const & dimm : dimmList )
Expand Down Expand Up @@ -1124,8 +1124,8 @@ uint32_t __applyRasPolicies<TYPE_MBA>( ExtensibleChip * i_chip,
__addCallout( i_chip, i_rank, ecc, io_sc );

// Add the row repairs to the callout list if they exist
o_rc = __addRowRepairCallout<TARGETING::TYPE_MBA>( i_chip, i_rank,
io_sc );
o_rc = __addRowRepairCallout<TARGETING::TYPE_MBA>(
i_chip->getTrgt(), i_rank, io_sc );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "__addRowRepairCallout(0x%08x,0x%02x) "
Expand Down Expand Up @@ -1205,17 +1205,17 @@ uint32_t __applyRasPolicies<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
const uint8_t ps = i_chipMark.getSymbol().getPortSlct();
const uint8_t dram = i_chipMark.getSymbol().getDram();

ExtensibleChip * memPort = getConnectedChild(i_chip, TYPE_MEM_PORT, ps);
TargetHandle_t memPort = getConnectedChild( i_chip->getTrgt(),
TYPE_MEM_PORT, ps );

TargetHandle_t dimmTrgt = getConnectedDimm( memPort->getTrgt(), i_rank,
ps );
TargetHandle_t dimmTrgt = getConnectedDimm( memPort, i_rank, ps );

const bool isX4 = isDramWidthX4( dimmTrgt );

// Determine if DRAM sparing is enabled.
bool isEnabled = false;
o_rc = isDramSparingEnabled<TYPE_MEM_PORT>( memPort->getTrgt(), i_rank,
ps, isEnabled );
o_rc = isDramSparingEnabled<TYPE_MEM_PORT>( memPort, i_rank, ps,
isEnabled );
if ( SUCCESS != o_rc )
{
PRDF_ERR( PRDF_FUNC "isDramSparingEnabled() failed." );
Expand Down Expand Up @@ -1268,7 +1268,7 @@ uint32_t __applyRasPolicies<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip,
// Certain DIMMs may have had spares intentially made unavailable by
// the manufacturer. Check the VPD for available spares.
bool spAvail, eccAvail;
o_rc = isSpareAvailable<TYPE_MEM_PORT>( memPort->getTrgt(), i_rank,
o_rc = isSpareAvailable<TYPE_MEM_PORT>( memPort, i_rank,
ps, spAvail, eccAvail );
if ( spAvail )
{
Expand Down Expand Up @@ -1470,13 +1470,14 @@ uint32_t chipMarkCleanup( ExtensibleChip * i_chip, const MemRank & i_rank,
{
if ( TYPE_OCMB_CHIP == i_chip->getType() )
{
ExtensibleChip * memPort = getConnectedChild( i_chip,
TargetHandle_t memPort = getConnectedChild( i_chip->getTrgt(),
TYPE_MEM_PORT, chipMark.getSymbol().getPortSlct() );
o_rc = setDramInVpd( memPort, i_rank, chipMark.getSymbol() );
}
else
{
o_rc = setDramInVpd( i_chip, i_rank, chipMark.getSymbol() );
o_rc = setDramInVpd( i_chip->getTrgt(), i_rank,
chipMark.getSymbol() );
}
if ( SUCCESS != o_rc )
{
Expand Down
3 changes: 2 additions & 1 deletion src/usr/diag/prdf/common/plat/mem/prdfMemThresholds.C
Expand Up @@ -173,7 +173,8 @@ void getMnfgMemCeTh( ExtensibleChip * i_chip, const MemRank & i_rank,
else
{
// Get DRAM size
uint8_t size = MemUtils::getDramSize<T>( i_chip, i_rank.getDimmSlct() );
uint8_t size = MemUtils::getDramSize<T>( i_chip->getTrgt(),
i_rank.getDimmSlct() );

// Get number of ranks per DIMM select.
uint8_t rankCount = getNumRanksPerDimm<T>( i_chip->getTrgt(),
Expand Down

0 comments on commit 8e6a69d

Please sign in to comment.