diff options
9 files changed, 39 insertions, 53 deletions
diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C index 25db47d64..548f47f56 100644 --- a/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemCaptureData.C @@ -542,17 +542,14 @@ void addEccData<TYPE_OCMB_CHIP>( ExtensibleChip * i_chip, CaptureData & cd = io_sc.service_data->GetCaptureData(); OcmbDataBundle * db = getOcmbDataBundle( i_chip ); + TargetHandle_t ocmbTrgt = i_chip->getTrgt(); // Add DRAM repairs data from hardware. captureDramRepairsData<TYPE_OCMB_CHIP>( ocmbTrgt, 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( ocmbTrgt, TYPE_MEM_PORT, 0 ); - captureDramRepairsVpd<TYPE_MEM_PORT>( memPort, cd ); + captureDramRepairsVpd<TYPE_OCMB_CHIP>( ocmbTrgt, cd ); // Add IUE counts to capture data. captureIueCounts<OcmbDataBundle*>( ocmbTrgt, db, cd ); @@ -638,11 +635,7 @@ void addEccData<TYPE_OCMB_CHIP>( TargetHandle_t i_trgt, 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 ); + captureDramRepairsVpd<TYPE_OCMB_CHIP>( i_trgt, cd ); ErrDataService::AddCapData( cd, io_errl ); } diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C index 10f7125dd..5db522818 100644 --- a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.C @@ -450,6 +450,9 @@ std::vector<MemSymbol> MemDqBitmap::getSymbolList( uint8_t i_portSlct ) case TYPE_MEM_PORT: symbol = dq2Symbol<TYPE_MEM_PORT>( dq, i_portSlct ); break; + case TYPE_OCMB_CHIP: + symbol = dq2Symbol<TYPE_OCMB_CHIP>(dq, i_portSlct); + break; default: PRDF_ERR( "Invalid trgt type" ); PRDF_ASSERT( false ); diff --git a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H index 9ba927432..c3648dbc5 100644 --- a/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H +++ b/src/usr/diag/prdf/common/plat/mem/prdfMemDqBitmap.H @@ -75,8 +75,11 @@ class MemDqBitmap BitmapData i_d ) : iv_trgt(i_trgt), iv_rank(i_rank), iv_x4Dram(true), iv_data(i_d) { - if ( TARGETING::TYPE_MEM_PORT == PlatServices::getTargetType(iv_trgt) ) + if ( TARGETING::TYPE_MEM_PORT == PlatServices::getTargetType(iv_trgt) || + TARGETING::TYPE_OCMB_CHIP == + PlatServices::getTargetType(iv_trgt) ) { + // TODO RTC 210072 - Support multiple ports TARGETING::TargetHandle_t dimm = PlatServices::getConnectedDimm( iv_trgt, iv_rank ); iv_x4Dram = PlatServices::isDramWidthX4( dimm ); @@ -236,7 +239,7 @@ class MemDqBitmap private: // instance variables - TARGETING::TargetHandle_t iv_trgt; ///< Target MBA/MCA/MEM_PORT + TARGETING::TargetHandle_t iv_trgt; ///< Target MBA/MCA/MEM_PORT/OCMB_CHIP MemRank iv_rank; ///< Target rank bool iv_x4Dram; ///< TRUE if iv_trgt uses x4 DRAMs diff --git a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C index 8e9f11807..d7bd5b46b 100644 --- a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C +++ b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.C @@ -695,6 +695,10 @@ uint32_t getBadDqBitmap( TargetHandle_t i_trgt, const MemRank & i_rank, o_rc = __getBadDqBitmap<fapi2::TARGET_TYPE_MEM_PORT>( i_trgt, i_rank, o_bitmap ); break; + case TYPE_OCMB_CHIP: + o_rc = __getBadDqBitmap<fapi2::TARGET_TYPE_OCMB_CHIP>( i_trgt, + i_rank, o_bitmap ); + break; default: PRDF_ERR( PRDF_FUNC "Invalid trgt type" ); o_rc = FAIL; @@ -777,6 +781,10 @@ uint32_t setBadDqBitmap( TargetHandle_t i_trgt, const MemRank & i_rank, o_rc = __setBadDqBitmap<fapi2::TARGET_TYPE_MEM_PORT>( i_trgt, i_rank, i_bitmap ); break; + case TYPE_OCMB_CHIP: + o_rc = __setBadDqBitmap<fapi2::TARGET_TYPE_OCMB_CHIP>( i_trgt, + i_rank, i_bitmap ); + break; default: PRDF_ERR( PRDF_FUNC "Invalid trgt type" ); o_rc = FAIL; diff --git a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H index 5d41d96e0..203703b42 100755 --- a/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H +++ b/src/usr/diag/prdf/common/plat/prdfPlatServices_common.H @@ -193,7 +193,7 @@ bool obusInSmpMode(TARGETING::TargetHandle_t obusTgt); /** * @brief Reads the bad DQ bitmap attribute for both ports of the target rank. - * @param i_trgt A MCA/MBA/MEM_PORT target. + * @param i_trgt A MCA/MBA/MEM_PORT/OCMB_CHIP target. * @param i_rank Target rank. * @param o_bitmap DQ bitmap container. * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. @@ -203,7 +203,7 @@ uint32_t getBadDqBitmap( TARGETING::TargetHandle_t i_trgt, /** * @brief Writes the bad DQ bitmap attribute for both ports of the target rank. - * @param i_trgt A MCA/MBA/MEM_PORT target. + * @param i_trgt A MCA/MBA/MEM_PORT/OCMB_CHIP target. * @param i_rank Target rank. * @param i_bitmap DQ bitmap container. * @note This is a no-op if DRAM Repairs are disabled in manufacturing. @@ -215,7 +215,7 @@ uint32_t setBadDqBitmap( TARGETING::TargetHandle_t i_trgt, /** * @brief Clears the bad DQ bitmap attribute for all ports of the target rank. - * @param i_trgt A MCA/MBA/MEM_PORT target. + * @param i_trgt A MCA/MBA/MEM_PORT/OCMB_CHIP target. * @param i_rank Target rank. * @note This is a no-op if DRAM Repairs are disabled in manufacturing. * @return Non-SUCCESS if an internal function fails, SUCCESS otherwise. diff --git a/src/usr/diag/prdf/common/plat/prdfTargetServices.H b/src/usr/diag/prdf/common/plat/prdfTargetServices.H index bd02cc44c..74ccbbc85 100755 --- a/src/usr/diag/prdf/common/plat/prdfTargetServices.H +++ b/src/usr/diag/prdf/common/plat/prdfTargetServices.H @@ -311,7 +311,7 @@ TARGETING::TargetHandle_t getConnectedPeerTarget( TARGETING::TargetHandle_t i_tgt); /** - * @param i_trgt The target MBA, MCA, or MEM_PORT. + * @param i_trgt The target MBA, MCA, OCMB_CHIP, or MEM_PORT. * @param i_rank The target rank. * @return A list of DIMMs connected to the target and rank. */ @@ -319,7 +319,7 @@ TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_trgt, const MemRank & i_rank ); /** - * @param i_trgt The target MBA, MCA, or MEM_PORT. + * @param i_trgt The target MBA, MCA, OCMB_CHIP, or MEM_PORT. * @param i_rank The target rank. * @param i_port Port select, only needed for MBA. MCA and MEM_PORT are * targets equivalent to the port already. diff --git a/src/usr/diag/prdf/common/plugins/prdfParserUtils.C b/src/usr/diag/prdf/common/plugins/prdfParserUtils.C index 2409295c1..2f9bdb458 100644 --- a/src/usr/diag/prdf/common/plugins/prdfParserUtils.C +++ b/src/usr/diag/prdf/common/plugins/prdfParserUtils.C @@ -151,8 +151,8 @@ uint8_t dq2Symbol<TARGETING::TYPE_MBA>( uint8_t i_dq, uint8_t i_ps ) //------------------------------------------------------------------------------ -template<> -uint8_t dq2Symbol<TARGETING::TYPE_MCA>( uint8_t i_dq, uint8_t i_ps ) +template<TARGETING::TYPE T> +uint8_t dq2Symbol( uint8_t i_dq, uint8_t i_ps ) { uint8_t symbol = SYMBOLS_PER_RANK; @@ -177,14 +177,12 @@ uint8_t dq2Symbol<TARGETING::TYPE_MCA>( uint8_t i_dq, uint8_t i_ps ) return symbol; } -//------------------------------------------------------------------------------ - -template<> -uint8_t dq2Symbol<TARGETING::TYPE_MEM_PORT>( uint8_t i_dq, uint8_t i_ps ) -{ - // MEM_PORT case is identical to MCA - return dq2Symbol<TARGETING::TYPE_MCA>( i_dq, i_ps ); -} +template +uint8_t dq2Symbol<TARGETING::TYPE_MCA>( uint8_t i_dq, uint8_t i_ps ); +template +uint8_t dq2Symbol<TARGETING::TYPE_MEM_PORT>( uint8_t i_dq, uint8_t i_ps ); +template +uint8_t dq2Symbol<TARGETING::TYPE_OCMB_CHIP>( uint8_t i_dq, uint8_t i_ps ); //------------------------------------------------------------------------------ diff --git a/src/usr/diag/prdf/plat/mem/prdfMemDsd_ipl.C b/src/usr/diag/prdf/plat/mem/prdfMemDsd_ipl.C index 0e6069315..7abab6368 100644 --- a/src/usr/diag/prdf/plat/mem/prdfMemDsd_ipl.C +++ b/src/usr/diag/prdf/plat/mem/prdfMemDsd_ipl.C @@ -122,15 +122,8 @@ uint32_t DsdEvent<T>::verifySpare( const uint32_t & i_eccAttns, // Set the bad spare in the VPD. At this point, the chip mark // should have already been set in the VPD because it was recently // verified. - TargetHandle_t bitmapTrgt = iv_chip->getTrgt(); - if ( TYPE_OCMB_CHIP == T ) - { - ExtensibleChip * bitmapChip = getConnectedChild( iv_chip, - TYPE_MEM_PORT, iv_mark.getSymbol().getPortSlct() ); - bitmapTrgt = bitmapChip->getTrgt(); - } MemDqBitmap bitmap; - o_rc = getBadDqBitmap( bitmapTrgt, iv_rank, bitmap ); + o_rc = getBadDqBitmap( iv_chip->getTrgt(), iv_rank, bitmap ); if ( SUCCESS != o_rc ) { PRDF_ERR( PRDF_FUNC "getBadDqBitmap() failed" ); @@ -150,7 +143,7 @@ uint32_t DsdEvent<T>::verifySpare( const uint32_t & i_eccAttns, } } - o_rc = setBadDqBitmap( bitmapTrgt, iv_rank, bitmap ); + o_rc = setBadDqBitmap( iv_chip->getTrgt(), iv_rank, bitmap ); if ( SUCCESS != o_rc ) { PRDF_ERR( PRDF_FUNC "setBadDqBitmap() failed" ); diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C index 28988f1ab..23f08d6eb 100644 --- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C +++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr_rt.C @@ -1169,19 +1169,13 @@ uint32_t __findChipMarks<TYPE_MEM_PORT>( if ( !chipMark.isValid() ) continue; // no chip mark present - // 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( ocmb->getTrgt(), - TYPE_MEM_PORT, 0 ); - // Get the DQ Bitmap data. MemDqBitmap dqBitmap; - o_rc = getBadDqBitmap( memPort, rank, dqBitmap ); + o_rc = getBadDqBitmap( ocmb->getTrgt(), rank, dqBitmap ); if ( SUCCESS != o_rc ) { PRDF_ERR( PRDF_FUNC "getBadDqBitmap(0x%08x,0x%02x)", - getHuid(memPort), rank.getKey() ); + ocmb->getHuid(), rank.getKey() ); break; } @@ -1191,7 +1185,7 @@ uint32_t __findChipMarks<TYPE_MEM_PORT>( if ( SUCCESS != o_rc ) { PRDF_ERR( PRDF_FUNC "dqBitmap.isChipMark() failed on 0x%08x " - "0x%02x", getHuid(memPort), rank.getKey() ); + "0x%02x", ocmb->getHuid(), rank.getKey() ); break; } @@ -1529,20 +1523,14 @@ uint32_t MemTdCtlr<TYPE_OCMB_CHIP>::handleRrFo() if ( !chipMark.isValid() ) continue; // no chip mark present - // 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. - // Get the DQ Bitmap data. - TargetHandle_t memPort = getConnectedChild( ocmbChip->getTrgt(), - TYPE_MEM_PORT, 0 ); MemDqBitmap dqBitmap; - o_rc = getBadDqBitmap( memPort, rank, dqBitmap ); + o_rc = getBadDqBitmap( ocmbChip->getTrgt(), rank, dqBitmap ); if ( SUCCESS != o_rc ) { PRDF_ERR( PRDF_FUNC "getBadDqBitmap(0x%08x, %d)", - getHuid(memPort), rank.getMaster() ); + ocmbChip->getHuid(), rank.getMaster() ); break; } |