diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2014-02-05 14:28:52 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-02-27 11:10:47 -0600 |
commit | 5c9a8bfc67a350c5caaed4d2cc9c7adae55c027e (patch) | |
tree | e327fe80aa2c4a38ed7dff6d9fc106570a489d5f /src/usr/diag/prdf/common/framework/service | |
parent | d5157a46fc961a7a64c96d49710c219f82d42d0e (diff) | |
download | talos-hostboot-5c9a8bfc67a350c5caaed4d2cc9c7adae55c027e.tar.gz talos-hostboot-5c9a8bfc67a350c5caaed4d2cc9c7adae55c027e.zip |
PRD: TPS support
Change-Id: I63465b70623184d4bd6b509db656931057710579
Squashed: I69d487e7c5965d817cb4b86fbeb3fc08f3f0a8c8
Squashed: I1d3486b83ec1817af1c0ed71c7d19c249bca4c79
Squashed: Ia1dccf1d1418d26a049e223cd491e79687b1d04f
Squashed: I41ed4ba671361abe9749344bb34e5d699fa5a718
Squashed: I37e82f9604c5a20552e9c94e910583ed094c68f5
Squashed: Ic3125d70979e029c0d4f2bd9f9647db2bc94ed5d
Squashed: I2cbdf7eb254ce9055586f494ae859032e5759336
Squashed: I4f00d81457c392919547dd4569233c06d7bfc131
RTC: 87720
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7471
Tested-by: Jenkins Server
Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
Reviewed-by: Bilicon Patil <bilpatil@in.ibm.com>
Reviewed-by: Christopher T. Phan <cphan@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9140
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/9154
Diffstat (limited to 'src/usr/diag/prdf/common/framework/service')
-rwxr-xr-x | src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C | 41 | ||||
-rwxr-xr-x | src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H | 27 |
2 files changed, 48 insertions, 20 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C index ab837246c..4489bb0d7 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C +++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C @@ -1,11 +1,11 @@ /* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ -/* $Source: ./common/framework/service/prdfPlatServices_common.C $ */ +/* $Source: src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C $ */ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -439,7 +439,7 @@ int32_t mssGetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank, //------------------------------------------------------------------------------ int32_t mssSetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank, - const CenMark & i_mark, bool & o_writeBlocked, + CenMark & io_mark, bool & o_writeBlocked, bool i_allowWriteBlocked ) { #define PRDF_FUNC "[PlatServices::mssSetMarkStore] " @@ -448,19 +448,31 @@ int32_t mssSetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank, errlHndl_t errl = NULL; - uint8_t symbolMark = i_mark.getSM().isValid() ? i_mark.getSM().getSymbol() - : MSS_INVALID_SYMBOL; - uint8_t chipMark = i_mark.getCM().isValid() ? i_mark.getCM().getDramSymbol() - : MSS_INVALID_SYMBOL; + uint8_t sm = io_mark.getSM().isValid() ? io_mark.getSM().getSymbol() + : MSS_INVALID_SYMBOL; + uint8_t cm = io_mark.getCM().isValid() ? io_mark.getCM().getDramSymbol() + : MSS_INVALID_SYMBOL; fapi::ReturnCode l_rc = mss_put_mark_store( getFapiTarget(i_mba), - i_rank.getMaster(), symbolMark, - chipMark ); + i_rank.getMaster(), sm, cm ); if ( i_allowWriteBlocked && fapi::RC_MSS_MAINT_MARKSTORE_WRITE_BLOCKED == l_rc ) { o_writeBlocked = true; + + // Read hardware and get the new chip mark. + CenMark hwMark; + o_rc = mssGetMarkStore( i_mba, i_rank, hwMark ); + if ( SUCCESS != o_rc ) + { + PRDF_ERR( PRDF_FUNC"mssGetMarkStore() failed." ); + } + else + { + // Update io_mark with the new chip mark. + io_mark.setCM( hwMark.getCM() ); + } } else { @@ -469,7 +481,7 @@ int32_t mssSetMarkStore( TargetHandle_t i_mba, const CenRank & i_rank, { PRDF_ERR( PRDF_FUNC"mss_put_mark_store() failed. HUID: 0x%08x " "rank: %d sm: %d cm: %d", getHuid(i_mba), - i_rank.getMaster(), symbolMark, chipMark ); + i_rank.getMaster(), sm, cm ); PRDF_COMMIT_ERRL( errl, ERRL_ACTION_REPORT ); o_rc = FAIL; } @@ -749,7 +761,8 @@ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType, mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType, TargetHandle_t i_mba, const CenRank & i_rank, uint32_t i_stopCond, - uint32_t i_flags ) + uint32_t i_flags, + const CenAddr * i_sAddrOverride ) { mss_MaintCmdWrapper * o_cmd = NULL; @@ -768,6 +781,12 @@ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType, i_rank.getSlave(), slaveOnly ); if ( SUCCESS != l_rc ) break; + // Override the start address, if needed. + if ( NULL != i_sAddrOverride ) + { + sAddr.setDoubleWord( 0, i_sAddrOverride->toReadAddr() ); + } + // Get the last address in memory, if needed. if ( allMemory ) { diff --git a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H index 02e0c8ca5..2586e54c2 100755 --- a/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H +++ b/src/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H @@ -234,7 +234,10 @@ int32_t mssGetMarkStore( TARGETING::TargetHandle_t i_mba, * @brief Invokes the set mark store hardware procedure. * @param i_mba Target MBA. * @param i_rank Target rank. - * @param i_mark The mark to write. + * @param io_mark The mark to write. If hardware blocks the write + * to markstore and the block is allowed, io_mark + * will be updated with the new chip mark set by + * hardware. * @param o_writeBlocked TRUE if a blocke write is allowed and hardware * blocked the write to markstore. * @param i_allowWriteBlocked TRUE if a blocked write is allowed. This means @@ -248,7 +251,7 @@ int32_t mssGetMarkStore( TARGETING::TargetHandle_t i_mba, * @return Non-SUCCESS in internal function fails, SUCCESS otherwise. */ int32_t mssSetMarkStore( TARGETING::TargetHandle_t i_mba, - const CenRank & i_rank, const CenMark & i_mark, + const CenRank & i_rank, CenMark & io_mark, bool & o_writeBlocked, bool i_allowWriteBlocked = false ); @@ -417,20 +420,26 @@ class mss_MaintCmdWrapper /** * @brief Create a maintenance command object. - * @param i_cmdType Maintenance command type which we want to create. - * @param i_mba An MBA target. - * @param i_rank The first rank to start with (see enum CtrlFlags for - * more details). - * @param i_stopCond Bit mask for conditions in which to stop command. - * @param i_flags See enum CtrlFlags for details. + * @param i_cmdType Maintenance command type which we want to create. + * @param i_mba An MBA target. + * @param i_rank The first rank to start with (see enum CtrlFlags for + * more details). + * @param i_stopCond Bit mask for conditions in which to stop command. + * @param i_flags See enum CtrlFlags for details. + * @param i_sAddrOverride A non-NULL value indicates to use this start address + * and not the start address of i_rank. * @return A mss_MaintCmdWrapper object, NULL if an internal function failed. * @note This function allocates memory on heap for mss_MaintCmdWrapper * object. It is the caller's responsibilty to delete this object. + * @note By default this maintenance command will operate on the address range + * that contains i_rank, but the target address range can be modified + * with i_flags and/or i_sAddrOverride. */ mss_MaintCmdWrapper * createMssCmd( mss_MaintCmdWrapper::CmdType i_cmdType, TARGETING::TargetHandle_t i_mba, const CenRank & i_rank, uint32_t i_stopCond, - uint32_t i_flags = mss_MaintCmdWrapper::NO_FLAGS ); + uint32_t i_flags = mss_MaintCmdWrapper::NO_FLAGS, + const CenAddr * i_sAddrOverride = NULL ); } // end namespace PlatServices |