summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2017-07-28 08:48:22 -0500
committerZane C. Shelley <zshelle@us.ibm.com>2017-08-04 12:19:11 -0400
commit257aab6a9a44b6235fc26a486540f0c0c647b155 (patch)
treec9c5a39f026231a754deb849761e669aa58e7c54 /src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
parentf5f23ca47e19694a636f3798b44e7398f9d09503 (diff)
downloadtalos-hostboot-257aab6a9a44b6235fc26a486540f0c0c647b155.tar.gz
talos-hostboot-257aab6a9a44b6235fc26a486540f0c0c647b155.zip
PRD: Make collectStateCaptureData common for ipl and rt
Change-Id: I8441111491f2b9466834dde4d194fa19521c1f2b RTC: 167827 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43838 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com> Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com> Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44172 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C')
-rw-r--r--src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C72
1 files changed, 71 insertions, 1 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
index 6454ed7fe..e338c7b4d 100644
--- a/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
+++ b/src/usr/diag/prdf/plat/mem/prdfMemTdCtlr.C
@@ -32,6 +32,7 @@
#include <prdfP9McaDataBundle.H>
#include <prdfP9McbistExtraSig.H>
#include <prdfParserEnums.H>
+#include <UtilHash.H> // for Util::hashString
// External includes
#include <util/misc.H>
@@ -228,7 +229,7 @@ uint32_t __analyzeCmdComplete<TYPE_MCBIST>( ExtensibleChip * i_chip,
// subtest will be the last configured address. To maintain sanity, we
// will simply short-circuit the code and ensure we always get the last
// configured rank.
- if ( Util::isSimicsRunning() )
+ if ( ::Util::isSimicsRunning() )
{
std::vector<MemRank> list;
getSlaveRanks<TYPE_MCA>( stopChip->getTrgt(), list );
@@ -553,6 +554,75 @@ uint32_t MemTdCtlr<TYPE_MBA>::unmaskEccAttns()
//------------------------------------------------------------------------------
+template <TARGETING::TYPE T>
+void MemTdCtlr<T>::collectStateCaptureData( STEP_CODE_DATA_STRUCT & io_sc,
+ const char * i_startEnd )
+{
+ #define PRDF_FUNC "[MemTdCtlr<T>::collectStateCaptureData] "
+
+ // Get the number of entries in the TD queue (limit 15)
+ TdQueue::Queue queue = iv_queue.getQueue();
+ uint8_t queueCount = queue.size();
+ if ( 15 < queueCount ) queueCount = 15;
+
+ // Get the buffer
+ uint32_t bitLen = 22 + queueCount*10; // Header + TD queue
+ BitStringBuffer bsb( bitLen );
+ uint32_t curPos = 0;
+
+ //######################################################################
+ // Header data (18 bits)
+ //######################################################################
+
+ // Specifies running at IPL. Also ensures our data is non-zero. 4-bit
+ bsb.setFieldJustify( curPos, 4, TD_CTLR_DATA::Version::IPL ); curPos+=4;
+
+ uint8_t mrnk = 0;
+ uint8_t srnk = 0;
+ uint8_t phase = TdEntry::Phase::TD_PHASE_0;
+ uint8_t type = TdEntry::TdType::INVALID_EVENT;
+
+ if ( nullptr != iv_curProcedure )
+ {
+ mrnk = iv_curProcedure->getRank().getMaster(); // 3-bit
+ srnk = iv_curProcedure->getRank().getSlave(); // 3-bit
+ phase = iv_curProcedure->getPhase(); // 4-bit
+ type = iv_curProcedure->getType(); // 4-bit
+ }
+
+ bsb.setFieldJustify( curPos, 3, mrnk ); curPos+=3;
+ bsb.setFieldJustify( curPos, 3, srnk ); curPos+=3;
+ bsb.setFieldJustify( curPos, 4, phase ); curPos+=4;
+ bsb.setFieldJustify( curPos, 4, type ); curPos+=4;
+
+ //######################################################################
+ // TD Request Queue (min 4 bits, max 164 bits)
+ //######################################################################
+
+ bsb.setFieldJustify( curPos, 4, queueCount ); curPos+=4; // 4-bit
+
+ for ( uint32_t n = 0; n < queueCount; n++ )
+ {
+ uint8_t itMrnk = queue[n]->getRank().getMaster(); // 3-bit
+ uint8_t itSrnk = queue[n]->getRank().getSlave(); // 3-bit
+ uint8_t itType = queue[n]->getType(); // 4-bit
+
+ bsb.setFieldJustify( curPos, 3, itMrnk ); curPos+=3;
+ bsb.setFieldJustify( curPos, 3, itSrnk ); curPos+=3;
+ bsb.setFieldJustify( curPos, 4, itType ); curPos+=4;
+ }
+
+ //######################################################################
+ // Add the capture data
+ //######################################################################
+ CaptureData & cd = io_sc.service_data->GetCaptureData();
+ cd.Add( iv_chip->getTrgt(), Util::hashString(i_startEnd), bsb );
+
+ #undef PRDF_FUNC
+}
+
+//------------------------------------------------------------------------------
+
// Avoid linker errors with the template.
template class MemTdCtlr<TYPE_MCBIST>;
template class MemTdCtlr<TYPE_MBA>;
OpenPOWER on IntegriCloud