summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/framework/service
diff options
context:
space:
mode:
authorZane Shelley <zshelle@us.ibm.com>2014-02-05 14:28:52 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-02-27 11:10:47 -0600
commit5c9a8bfc67a350c5caaed4d2cc9c7adae55c027e (patch)
treee327fe80aa2c4a38ed7dff6d9fc106570a489d5f /src/usr/diag/prdf/common/framework/service
parentd5157a46fc961a7a64c96d49710c219f82d42d0e (diff)
downloadtalos-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-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.C41
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfPlatServices_common.H27
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
OpenPOWER on IntegriCloud