From 2e593961823791a39b81bdea1e5efb3866638a39 Mon Sep 17 00:00:00 2001 From: Zane Shelley Date: Fri, 22 Mar 2013 13:42:52 -0500 Subject: PRD: Add support for Centaur addresses Change-Id: I318ea9394f7d38659ac9f72a62124faa004b7ccb RTC: 67315 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3700 Tested-by: Jenkins Server Reviewed-by: Sachin Gupta Reviewed-by: A. Patrick Williams III Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3891 --- src/usr/diag/prdf/common/plat/pegasus/Mba.rule | 4 +- .../prdf/common/plat/pegasus/Membuf_regs_NEST.rule | 60 +++++ .../diag/prdf/common/plat/pegasus/prdfCenAddress.C | 277 +++++++++++++++++++++ .../diag/prdf/common/plat/pegasus/prdfCenAddress.H | 274 ++++++++++++++++++++ src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C | 45 ++-- .../prdf/common/plat/pegasus/prdfCenMbaAddress.C | 40 --- .../prdf/common/plat/pegasus/prdfCenMbaAddress.H | 101 -------- src/usr/diag/prdf/common/prd_pegasus.mk | 2 +- 8 files changed, 634 insertions(+), 169 deletions(-) create mode 100755 src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.C create mode 100755 src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H delete mode 100755 src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.C delete mode 100755 src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.H (limited to 'src/usr/diag') diff --git a/src/usr/diag/prdf/common/plat/pegasus/Mba.rule b/src/usr/diag/prdf/common/plat/pegasus/Mba.rule index 4bb8fb3c0..3e8c67925 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Mba.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Mba.rule @@ -251,14 +251,14 @@ chip Mba register MBMACA { - name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBMACAQ"; + name "MBA Maintenance Command Start Address Register"; scomaddr 0x0301060D; capture group default; }; register MBMEA { - name "MBU.MBA01.MBA_MCBIST.SCOMFIR.MBMEAQ"; + name "MBA Maintenance Command End Address Register"; scomaddr 0x0301060E; capture group default; }; diff --git a/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule b/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule index e3888b164..5e6d4e31b 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule +++ b/src/usr/diag/prdf/common/plat/pegasus/Membuf_regs_NEST.rule @@ -456,3 +456,63 @@ capture group default; }; + ############################################################################ + # Memory ECC Error Address Registers + ############################################################################ + + register MBNCER_0 + { + name "MBS Memory NCE Error Address 0 Register"; + scomaddr 0x02011660; + capture group default; + }; + + register MBRCER_0 + { + name "MBS Memory RCE Error Address 0 Register"; + scomaddr 0x02011661; + capture group default; + }; + + register MBMPER_0 + { + name "MBS Memory MPE Error Address 0 Register"; + scomaddr 0x02011662; + capture group default; + }; + + register MBUER_0 + { + name "MBS Memory UE Error Address 0 Register"; + scomaddr 0x02011663; + capture group default; + }; + + register MBNCER_1 + { + name "MBS Memory NCE Error Address 1 Register"; + scomaddr 0x02011760; + capture group default; + }; + + register MBRCER_1 + { + name "MBS Memory RCE Error Address 1 Register"; + scomaddr 0x02011761; + capture group default; + }; + + register MBMPER_1 + { + name "MBS Memory MPE Error Address 1 Register"; + scomaddr 0x02011762; + capture group default; + }; + + register MBUER_1 + { + name "MBS Memory UE Error Address 1 Register"; + scomaddr 0x02011763; + capture group default; + }; + diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.C new file mode 100755 index 000000000..e50fc5045 --- /dev/null +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.C @@ -0,0 +1,277 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfCenAddress.C + * @brief General utilities to read, modify, and write the memory address + * registers (MBMACA, MBMEA, etc.). Also includes the CenRank class. + */ + +#include + +#include +#include +#include + +using namespace TARGETING; + +namespace PRDF +{ + +using namespace PlatServices; + +//------------------------------------------------------------------------------ +// MBS Address Registers +//------------------------------------------------------------------------------ + +ReadAddrReg READ_NCE_ADDR_0 = "MBNCER_0"; +ReadAddrReg READ_RCE_ADDR_0 = "MBRCER_0"; +ReadAddrReg READ_MPE_ADDR_0 = "MBMPER_0"; +ReadAddrReg READ_UE_ADDR_0 = "MBUER_0"; + +ReadAddrReg READ_NCE_ADDR_1 = "MBNCER_1"; +ReadAddrReg READ_RCE_ADDR_1 = "MBRCER_1"; +ReadAddrReg READ_MPE_ADDR_1 = "MBMPER_1"; +ReadAddrReg READ_UE_ADDR_1 = "MBUER_1"; + +//------------------------------------------------------------------------------ + +int32_t cenGetReadAddr( ExtensibleChip * i_mbChip, ReadAddrReg i_addrReg, + CenAddr & o_addr ) +{ + #define PRDF_FUNC "[cenGetReadAddr] " + + int32_t o_rc = SUCCESS; + + TargetHandle_t mbTarget = i_mbChip->GetChipHandle(); + + do + { + if ( TYPE_MEMBUF != getTargetType(mbTarget) ) + { + PRDF_ERR( PRDF_FUNC"Unsupported target type" ); + o_rc = FAIL; break; + } + + SCAN_COMM_REGISTER_CLASS * reg = i_mbChip->getRegister(i_addrReg); + o_rc = reg->Read(); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC" %s Read() failed", i_addrReg ); + break; + } + + uint32_t rank = reg->GetBitFieldJustified( 1, 3); + uint32_t bank = reg->GetBitFieldJustified( 7, 4); + uint32_t row = reg->GetBitFieldJustified(11,17); + uint32_t col = reg->GetBitFieldJustified(28,12); + + uint32_t types = CenAddr::NONE; + if ( READ_NCE_ADDR_0 == i_addrReg || READ_NCE_ADDR_1 == i_addrReg ) + types = CenAddr::NCE; + else if ( READ_RCE_ADDR_0 == i_addrReg || READ_RCE_ADDR_1 == i_addrReg ) + types = CenAddr::RCE; + else if ( READ_MPE_ADDR_0 == i_addrReg || READ_MPE_ADDR_1 == i_addrReg ) + types = CenAddr::MPE; + else if ( READ_UE_ADDR_0 == i_addrReg || READ_UE_ADDR_1 == i_addrReg ) + types = CenAddr::UE; + else + { + PRDF_ERR( PRDF_FUNC"Unsupported register" ); + o_rc = FAIL; break; + } + + o_addr = CenAddr ( rank, bank, row, col, types ); + + } while (0); + + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC"Failed: HUID=0x%08x addrReg='%s'", + getHuid(mbTarget), i_addrReg ); + } + + return o_rc; + + #undef PRDF_FUNC +} + +//------------------------------------------------------------------------------ + +int32_t cenSetReadAddr( ExtensibleChip * i_mbChip, ReadAddrReg i_addrReg, + CenAddr i_addr ) +{ + #define PRDF_FUNC "[cenSetReadAddr] " + + int32_t o_rc = SUCCESS; + + TargetHandle_t mbTarget = i_mbChip->GetChipHandle(); + + do + { + if ( TYPE_MEMBUF != getTargetType(mbTarget) ) + { + PRDF_ERR( PRDF_FUNC"Unsupported target type" ); + o_rc = FAIL; break; + } + + SCAN_COMM_REGISTER_CLASS * reg = i_mbChip->getRegister(i_addrReg); + reg->clearAllBits(); // clears out all status bits + + reg->SetBitFieldJustified( 1, 3, i_addr.getRank().flatten() ); + reg->SetBitFieldJustified( 7, 4, i_addr.getBank() ); + reg->SetBitFieldJustified( 11, 17, i_addr.getRow() ); + reg->SetBitFieldJustified( 28, 12, i_addr.getCol() ); + + o_rc = reg->Write(); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC" %s Write() failed", i_addrReg ); + break; + } + + } while (0); + + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC"Failed: HUID=0x%08x addrReg='%s'", + getHuid(mbTarget), i_addrReg ); + } + + return o_rc; + + #undef PRDF_FUNC +} + +//------------------------------------------------------------------------------ +// MBA Address Registers +//------------------------------------------------------------------------------ + +MaintAddrReg MAINT_START_ADDR = "MBMACA"; +MaintAddrReg MAINT_END_ADDR = "MBMEA"; + +//------------------------------------------------------------------------------ + +int32_t cenGetMaintAddr( ExtensibleChip * i_mbaChip, MaintAddrReg i_addrReg, + CenAddr & o_addr ) +{ + #define PRDF_FUNC "[cenGetMaintAddr] " + + int32_t o_rc = SUCCESS; + + TargetHandle_t mbaTarget = i_mbaChip->GetChipHandle(); + + do + { + if ( TYPE_MBA != getTargetType(mbaTarget) ) + { + PRDF_ERR( PRDF_FUNC"Unsupported target type" ); + o_rc = FAIL; break; + } + + SCAN_COMM_REGISTER_CLASS * reg = i_mbaChip->getRegister(i_addrReg); + o_rc = reg->Read(); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC" %s Read() failed", i_addrReg ); + break; + } + + uint32_t rank = reg->GetBitFieldJustified( 1, 3); + uint32_t bank = reg->GetBitFieldJustified( 7, 4); + uint32_t row = reg->GetBitFieldJustified(11,17); + uint32_t col = reg->GetBitFieldJustified(28,12); + + uint32_t types = CenAddr::NONE; + if ( MAINT_START_ADDR == i_addrReg ) + types = reg->GetBitFieldJustified(40,7); + else if ( MAINT_END_ADDR == i_addrReg ) + types = CenAddr::NONE; + else + { + PRDF_ERR( PRDF_FUNC"Unsupported register" ); + o_rc = FAIL; break; + } + + o_addr = CenAddr ( rank, bank, row, col, types ); + + } while (0); + + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC"Failed: HUID=0x%08x addrReg='%s'", + getHuid(mbaTarget), i_addrReg ); + } + + return o_rc; + + #undef PRDF_FUNC +} + +//------------------------------------------------------------------------------ + +int32_t cenSetMaintAddr( ExtensibleChip * i_mbaChip, MaintAddrReg i_addrReg, + CenAddr i_addr ) +{ + #define PRDF_FUNC "[cenSetMaintAddr] " + + int32_t o_rc = SUCCESS; + + TargetHandle_t mbaTarget = i_mbaChip->GetChipHandle(); + + do + { + if ( TYPE_MBA != getTargetType(mbaTarget) ) + { + PRDF_ERR( PRDF_FUNC"Unsupported target type" ); + o_rc = FAIL; break; + } + + SCAN_COMM_REGISTER_CLASS * reg = i_mbaChip->getRegister(i_addrReg); + reg->clearAllBits(); // clears out all status bits + + reg->SetBitFieldJustified( 1, 3, i_addr.getRank().flatten() ); + reg->SetBitFieldJustified( 7, 4, i_addr.getBank() ); + reg->SetBitFieldJustified( 11, 17, i_addr.getRow() ); + reg->SetBitFieldJustified( 28, 12, i_addr.getCol() ); + + o_rc = reg->Write(); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC" %s Write() failed", i_addrReg ); + break; + } + + } while (0); + + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC"Failed: HUID=0x%08x addrReg='%s'", + getHuid(mbaTarget), i_addrReg ); + } + + return o_rc; + + #undef PRDF_FUNC +} + +} // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H new file mode 100755 index 000000000..960e9d484 --- /dev/null +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H @@ -0,0 +1,274 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfCenAddress.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/** @file prdfCenAddress.H + * @brief General utilities to read, modify, and write the memory address + * registers (MBMACA, MBMEA, etc.). Also includes the CenRank class. + */ + +#ifndef __prdfCenAddress_H +#define __prdfCenAddress_H + +#include + +namespace PRDF +{ + +class ExtensibleChip; + +//------------------------------------------------------------------------------ +// Class CenRank +//------------------------------------------------------------------------------ + +/** + * @brief Container for a memory rank. + */ +class CenRank +{ + public: // constructor + + /** @brief Default constructor */ + CenRank() { iv_rank.u = 0; } + + /** + * @brief Constructor from flattened rank. + * @param i_rank The 3-bit rank. + * @note The rank format should be 0bDRR (D=DIMM select, R=rank select). + */ + explicit CenRank( uint8_t i_rank ) { iv_rank.u = i_rank; } + + /** + * @brief Constructor from components. + * @param i_dimmSlct The 1-bit DIMM select. + * @param i_rankSlct The 2-bit rank select. + */ + CenRank( uint8_t i_dimmSlct, uint8_t i_rankSlct ) + { + iv_rank.s.ds = i_dimmSlct; + iv_rank.s.rs = i_rankSlct; + } + + /** @return The 1-bit DIMM select. */ + uint8_t getDimmSlct() const { return iv_rank.s.ds; } + + /** @return The 2-bit rank select. */ + uint8_t getRankSlct() const { return iv_rank.s.rs; } + + /** + * @brief Converts internal data structure to a uint8_t. + * @note The format will be 0bDRR (D=DIMM select, R=rank select). + * @return A uint8_t version of the rank. + */ + uint8_t flatten() const { return iv_rank.u; } + + /** @brief '==' operator */ + bool operator==( const CenRank & i_rank ) const + { return ( this->flatten() == i_rank.flatten() ); } + + /** @brief '<' operator */ + bool operator<( const CenRank & i_rank ) const + { return ( this->flatten() < i_rank.flatten() ); } + + private: // data + + union + { + struct { uint8_t unused : 5; uint8_t ds : 1; uint8_t rs : 2; } s; + uint8_t u; + } iv_rank; +}; + +//------------------------------------------------------------------------------ +// Class CenAddr +//------------------------------------------------------------------------------ + +/** + * @brief Simple container for a memory address. + */ +class CenAddr +{ + public: // constants, enums + + /** Some addresses are associated with a specific error type. For example, + * the address in the MBMACA will indicate what type of CE/UE caused the + * maintenance command to stop. + * + * From the MBMACA SCOM def: + * Multiple error status bits may be set due to unique errors on each + * 64 byte pieces of read data. + * + * Since it is possible to have multiple error types, iv_types will need to + * be an OR of all error types. The enum values will be mapped directly + * with MBMACA[40:46] so that the user can simply pass that 7-bit field + * into the i_types parameter of the contructor. + */ + enum ErrorType + { + NONE = 0, ///< Unknown attention + NCE = 0x40, ///< New CE + SCE = 0x20, ///< CE on a symbol mark + MCE = 0x10, ///< CE on a chip mark + RCE = 0x08, ///< Retry CE + MPE = 0x04, ///< Mark placed error + SUE = 0x02, ///< SUE + UE = 0x01, ///< UE + }; + + public: // functions + + /** @brief Default constructor. */ + CenAddr() : + iv_rank(0), iv_types(NONE) + { + iv_bankRowCol.bank = 0; + iv_bankRowCol.row = 0; + iv_bankRowCol.col = 0; + } + + /** + * @brief Constructor from components. + * @param i_rank The 3-bit master rank. + * @param i_bank The 4-bit bank. + * @param i_row The 17-bit row. + * @param i_col The 12-bit column. + * @param i_types An OR of all error types associated with this address (see + * enum ErrorType). + */ + CenAddr( uint32_t i_rank, uint32_t i_bank, uint32_t i_row, + uint32_t i_col, uint32_t i_types = NONE ) : + iv_rank(i_rank), iv_types(i_types) + { + iv_bankRowCol.bank = i_bank; + iv_bankRowCol.row = i_row; + iv_bankRowCol.col = i_col; + } + + /** @return This address's rank. */ + const CenRank& getRank() const { return iv_rank; }; + + /** @return This address's bank. */ + uint32_t getBank() const { return iv_bankRowCol.bank; }; + + /** @return This address's row. */ + uint32_t getRow() const { return iv_bankRowCol.row; }; + + /** @return This address's column. */ + uint32_t getCol() const { return iv_bankRowCol.col; }; + + /** @brief '==' operator */ + bool operator==( const CenAddr & i_addr ) const + { + return ( this->getRank() == i_addr.getRank() && + this->getBank() == i_addr.getBank() && + this->getRow() == i_addr.getRow() && + this->getCol() == i_addr.getCol() ); + } + + private: // instance variable + + CenRank iv_rank; ///< Master rank (see CenRank class) + + /** The bank, row, and column. Note that these are all packed in a struct + * to save space. */ + struct __attribute__((__packed__)) + { + uint32_t bank : 4; ///< b2-b0 + uint32_t col : 12; ///< c13,c11,c9-c3 (c2-c0 are tied to 0) + uint32_t row : 17; ///< r16-r0 + } iv_bankRowCol; + + /** An OR of all error types assoiated with this address (see enum + * ErrorType). */ + uint32_t iv_types; + +}; + +//------------------------------------------------------------------------------ +// MBS Address Registers +//------------------------------------------------------------------------------ + +typedef const char * const ReadAddrReg; + +extern ReadAddrReg READ_NCE_ADDR_0; ///< For the MBNCER_0 register +extern ReadAddrReg READ_RCE_ADDR_0; ///< For the MBRCER_0 register +extern ReadAddrReg READ_MPE_ADDR_0; ///< For the MBMPER_0 register +extern ReadAddrReg READ_UE_ADDR_0; ///< For the MBUER_0 register + +extern ReadAddrReg READ_NCE_ADDR_1; ///< For the MBNCER_1 register +extern ReadAddrReg READ_RCE_ADDR_1; ///< For the MBRCER_1 register +extern ReadAddrReg READ_MPE_ADDR_1; ///< For the MBMPER_1 register +extern ReadAddrReg READ_UE_ADDR_1; ///< For the MBUER_1 register + +/** + * @brief Returns the address from the specified register. + * @param i_mbChip A Centaur chip. + * @param i_addrReg The target address register. + * @param o_addr The returned address from hardware. + * @return Non-SUCCESS if a register read fails, SUCCESS otherwise. + */ +int32_t cenGetReadAddr( ExtensibleChip * i_mbChip, ReadAddrReg i_addrReg, + CenAddr & o_addr ); + +/** + * @brief Writes an address to the specified register. + * @param i_mbChip A Centaur chip. + * @param i_addrReg The target address register. + * @param i_addr The address to write to hardware. + * @return Non-SUCCESS if a register read fails, SUCCESS otherwise. + */ +int32_t cenSetReadAddr( ExtensibleChip * i_mbChip, ReadAddrReg i_addrReg, + CenAddr i_addr ); + +//------------------------------------------------------------------------------ +// MBA Address Registers +//------------------------------------------------------------------------------ + +typedef const char * const MaintAddrReg; + +extern MaintAddrReg MAINT_START_ADDR; ///< For the MBMACA register +extern MaintAddrReg MAINT_END_ADDR; ///< For the MBMEA register + +/** + * @brief Returns the address from the specified register. + * @param i_mbaChip An MBA chip. + * @param i_addrReg The target address register. + * @param o_addr The returned address from hardware. + * @return Non-SUCCESS if a register read fails, SUCCESS otherwise. + */ +int32_t cenGetMaintAddr( ExtensibleChip * i_mbaChip, MaintAddrReg i_addrReg, + CenAddr & o_addr ); + +/** + * @brief Writes an address to the specified register. + * @param i_mbaChip An MBA chip. + * @param i_addrReg The target address register. + * @param i_addr The address to write to hardware. + * @return Non-SUCCESS if a register read fails, SUCCESS otherwise. + */ +int32_t cenSetMaintAddr( ExtensibleChip * i_mbChip, MaintAddrReg i_addrReg, + CenAddr i_addr ); + +} // end namespace PRDF + +#endif // __prdfCenAddress_H + diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C index 5bb2b1620..ef6727f55 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMba.C @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -119,6 +120,8 @@ PRDF_PLUGIN_DEFINE( Mba, PostAnalysis ); int32_t MaintCmdComplete( ExtensibleChip * i_mbaChip, STEP_CODE_DATA_STRUCT & i_sc ) { + #define PRDF_FUNC "[Mba::MaintCmdComplete] " + using namespace TARGETING; int32_t l_rc = SUCCESS; @@ -128,20 +131,16 @@ int32_t MaintCmdComplete( ExtensibleChip * i_mbaChip, { #ifdef __HOSTBOOT_MODULE - if ( PlatServices::isInMdiaMode() ) + if ( isInMdiaMode() ) { // Immediately inform mdia that the command // has finished. - l_rc = PlatServices::mdiaSendEventMsg( mbaTarget, - MDIA::RESET_TIMER ); + l_rc = mdiaSendEventMsg( mbaTarget, MDIA::RESET_TIMER ); if(l_rc) { - PRDF_ERR( "[Mba::MaintCmdComplete] " - "PlatServices::mdiaSendEventMsg" - " failed" ); - + PRDF_ERR( PRDF_FUNC"PlatServices::mdiaSendEventMsg() failed" ); // keep going } @@ -150,25 +149,20 @@ int32_t MaintCmdComplete( ExtensibleChip * i_mbaChip, // the command will need to be restarted. // Tuck this away until PostAnalysis. - CenMbaDataBundle * mbadb = getMbaDataBundle( i_mbaChip ); - - SCAN_COMM_REGISTER_CLASS * MBMACA = - i_mbaChip->getRegister("MBMACA"); - SCAN_COMM_REGISTER_CLASS * MBMEA = i_mbaChip->getRegister("MBMEA"); - - l_rc = MBMACA->Read(); - if (l_rc != SUCCESS) break; - - l_rc = MBMEA->Read(); - if (l_rc != SUCCESS) break; + CenAddr startAddr, endAddr; + l_rc = cenGetMaintAddr( i_mbaChip, MAINT_START_ADDR, startAddr ); + l_rc |= cenGetMaintAddr( i_mbaChip, MAINT_END_ADDR, endAddr ); + if ( SUCCESS != l_rc ) + { + PRDF_ERR( PRDF_FUNC"cenGetMbaAddr() failed" ); + break; + } + CenMbaDataBundle * mbadb = getMbaDataBundle( i_mbaChip ); mbadb->iv_sendCmdCompleteMsg = true; mbadb->iv_cmdCompleteMsgData = - (MBMACA->GetBitFieldJustified(0, 40) - == MBMEA->GetBitFieldJustified(0, 40)) - ? MDIA::COMMAND_COMPLETE - : MDIA::COMMAND_STOPPED; - + startAddr == endAddr ? MDIA::COMMAND_COMPLETE + : MDIA::COMMAND_STOPPED; // Do not commit error log for a successful command complete. if ( MDIA::COMMAND_COMPLETE == mbadb->iv_cmdCompleteMsgData ) i_sc.service_data->DontCommitErrorLog(); @@ -183,12 +177,13 @@ int32_t MaintCmdComplete( ExtensibleChip * i_mbaChip, if ( SUCCESS != l_rc ) { - PRDF_ERR( "[Mba::MaintCmdComplete] failed on MBA 0x%08x", - PlatServices::getHuid(mbaTarget) ); + PRDF_ERR( PRDF_FUNC"failed on MBA 0x%08x", getHuid(mbaTarget) ); CalloutUtil::defaultError( i_sc ); } return l_rc; + + #undef PRDF_FUNC } PRDF_PLUGIN_DEFINE( Mba, MaintCmdComplete ); diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.C deleted file mode 100755 index 88bfbc8f9..000000000 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.C +++ /dev/null @@ -1,40 +0,0 @@ -/* IBM_PROLOG_BEGIN_TAG */ -/* This is an automatically generated prolog. */ -/* */ -/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.C $ */ -/* */ -/* IBM CONFIDENTIAL */ -/* */ -/* COPYRIGHT International Business Machines Corp. 2008,2013 */ -/* */ -/* p1 */ -/* */ -/* Object Code Only (OCO) source materials */ -/* Licensed Internal Code Source Materials */ -/* IBM HostBoot Licensed Internal Code */ -/* */ -/* The source code for this program is not published or otherwise */ -/* divested of its trade secrets, irrespective of what has been */ -/* deposited with the U.S. Copyright Office. */ -/* */ -/* Origin: 30 */ -/* */ -/* IBM_PROLOG_END_TAG */ - -#include - -// FIXME : via RTC 65231 -// Needs to revisit this file -// There will be changes specific to P8 Addressing scheme -// Currently This file only have skeleton code - -namespace PRDF -{ -//------------------------------------------------------------------------------ - -uint8_t CenMbaRank::toUint8() const -{ - uint8_t temp = 0; - return temp; -} -} diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.H deleted file mode 100755 index d6df76870..000000000 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.H +++ /dev/null @@ -1,101 +0,0 @@ -/* IBM_PROLOG_BEGIN_TAG */ -/* This is an automatically generated prolog. */ -/* */ -/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaAddress.H $ */ -/* */ -/* IBM CONFIDENTIAL */ -/* */ -/* COPYRIGHT International Business Machines Corp. 2008,2013 */ -/* */ -/* p1 */ -/* */ -/* Object Code Only (OCO) source materials */ -/* Licensed Internal Code Source Materials */ -/* IBM HostBoot Licensed Internal Code */ -/* */ -/* The source code for this program is not published or otherwise */ -/* divested of its trade secrets, irrespective of what has been */ -/* deposited with the U.S. Copyright Office. */ -/* */ -/* Origin: 30 */ -/* */ -/* IBM_PROLOG_END_TAG */ - -#ifndef PRDF_CEN_MBA_ADDRESS_H -#define PRDF_CEN_MBA_ADDRESS_H -#include - -/** @file prdfCenMbaAddress.H - * @brief General utilities to read, modify, and write the memory controller's - * address registers (MCMACA, MCMEA, MCRADR, MCRADRSDUE). Also includes - * the CenMbaRank class. - */ - -//------------------------------------------------------------------------------ -// Includes -//------------------------------------------------------------------------------ - -namespace PRDF -{ -// FIXME : via RTC 65231 -// Needs to revisit this file -// There will be changes specific to P8 Addressing scheme -// Currently This file has just skeleton code -//------------------------------------------------------------------------------ -// Class CenMbaRank -//------------------------------------------------------------------------------ - -/** - * @brief Container for a memory rank. - */ -class CenMbaRank -{ - public: // constructor - - /** - * @brief Default constructor - */ - CenMbaRank() {}; - - /** - * @brief convert internal data structure to rank number - * @return rank number - */ - uint8_t toUint8() const; -}; - -/** - * @brief Simple container for a memory address. - */ -class CenMbaAddr -{ - public: - - /** Starting with P7 DD2.0 each memory read error (MCRADR, MCRADRSDUE), or - * maintenance command stopped by an error (MCMACA) will have a tag to - * identify which type of error occured. */ - enum AttnType - { - UNKNOWN, ///< Unknown attention (default for DD1.0) - CE, ///< CE - READ_INT_UE, ///< Read-intermittent UE - UE_WITH_CM, ///< Fast decoder UE fixed by a chip mark - SLOW_DEC_UE, ///< Slow decoder UE - MIRROR_SD_UE, ///< Mirrored slow decoder UE - }; - - /** @brief Default constructor. */ - CenMbaAddr() {}; - - /** - * @return rank class reference - */ - const CenMbaRank& getRank() const { return iv_rank; }; - - private: - CenMbaRank iv_rank; ///< See class CenMbaRank -}; - -} //namespace PRDF -#endif /* PRDF_CEN_MBA_ADDRESS_H */ - diff --git a/src/usr/diag/prdf/common/prd_pegasus.mk b/src/usr/diag/prdf/common/prd_pegasus.mk index de609ba57..614022a99 100755 --- a/src/usr/diag/prdf/common/prd_pegasus.mk +++ b/src/usr/diag/prdf/common/prd_pegasus.mk @@ -38,7 +38,7 @@ PRDF_RULE_PLUGINS_PEGASUS_WSIM = \ # PEGASUS specific objects, not rule related. prd_pegasus_specific = \ prdfCalloutUtil.o \ - prdfCenMbaAddress.o \ + prdfCenAddress.o \ prdfLineDelete.o \ prdfPegasusConfigurator.o \ prdfCenMbaCaptureData.o \ -- cgit v1.2.1