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.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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.