summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2015-08-04 15:11:45 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-08-26 21:45:16 -0500
commitf1f91e02d2ce0703784f217f2ea542adf3c9e635 (patch)
tree533f9232a2839e184406064bb543ba2fe7d12ca8 /src
parentd774efe81a106739311388eb78ec4be20fb1901a (diff)
downloadtalos-hostboot-f1f91e02d2ce0703784f217f2ea542adf3c9e635.tar.gz
talos-hostboot-f1f91e02d2ce0703784f217f2ea542adf3c9e635.zip
PRD: IPL CS Analysis Init HOMER Data
Change-Id: Ie35ad0ae8e8282f06e4b6bf882ec643138a88132 RTC: 132362 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19802 Tested-by: Jenkins Server Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Reviewed-by: Zane Shelley <zshelle@us.ibm.com> Depends-on: I6255033e5da9db9a4c917e70ee2e7adf0f444ad6 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/20083 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW
Diffstat (limited to 'src')
-rw-r--r--src/include/usr/diag/prdf/prdfWriteHomerFirData.H13
-rw-r--r--src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C222
-rwxr-xr-xsrc/usr/diag/prdf/test/makefile9
-rw-r--r--src/usr/diag/prdf/test/prdfTest_WriteHomerFir.H262
-rwxr-xr-xsrc/usr/diag/prdf/test/prdf_hb_common_test.mk7
5 files changed, 434 insertions, 79 deletions
diff --git a/src/include/usr/diag/prdf/prdfWriteHomerFirData.H b/src/include/usr/diag/prdf/prdfWriteHomerFirData.H
index eb98f96bd..f4e3590f0 100644
--- a/src/include/usr/diag/prdf/prdfWriteHomerFirData.H
+++ b/src/include/usr/diag/prdf/prdfWriteHomerFirData.H
@@ -28,13 +28,22 @@
namespace PRDF
{
+// enum to determine what hardware is currently initialized
+enum HwInitialized_t
+{
+ MASTER_PROC_CORE, //master processor and master core
+ ALL_PROC_MASTER_CORE, //all processors and master core
+ ALL_PROC_MEM_MASTER_CORE, //all processors, all memory, and master core
+ ALL_HARDWARE //all processors, all memory, and all cores
+};
+
/** @brief Writes register lists and hardware config in the HOMER data for
* the OCC to capture in the event of a system checkstop.
* @param i_hBuf SRAM pointer to the beginning of the HOMER data buffer.
* @param i_hBufSize Total size of the HOMER data buffer.
* @return An error log on failure. NULL on success.
*/
-errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize );
-
+errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize,
+ const HwInitialized_t i_curHw = ALL_HARDWARE );
}; // end namespace PRDF
diff --git a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
index db6f6c565..808c11589 100644
--- a/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
+++ b/src/usr/diag/prdf/occ_firdata/prdfWriteHomerFirData.C
@@ -28,6 +28,7 @@
#include <prdfErrlUtil.H>
#include <prdfPlatServices.H>
#include <prdfTrace.H>
+#include <prdfWriteHomerFirData.H>
#include <fsi/fsiif.H>
#include <pnor/pnorif.H>
@@ -464,20 +465,17 @@ static uint64_t mba_id_reg[] =
//------------------------------------------------------------------------------
-errlHndl_t getHwConfig( HOMER_Data_t & o_data )
+errlHndl_t getPnorInfo( HOMER_Data_t & o_data )
{
- #define FUNC "[PRDF::getHwConfig] "
+ #define FUNC "[PRDF::getPnorInfo] "
errlHndl_t errl = NULL;
- o_data = HOMER_getData(); // Initializes data.
-
+ //----------------------------------------------------------------------
+ // Get the PNOR information.
+ //----------------------------------------------------------------------
do
{
- //----------------------------------------------------------------------
- // Get the PNOR information.
- //----------------------------------------------------------------------
-
PNOR::SectionInfo_t sectionInfo;
errl = PNOR::getSectionInfo( PNOR::FIRDATA, sectionInfo );
if ( NULL != errl )
@@ -493,7 +491,23 @@ errlHndl_t getHwConfig( HOMER_Data_t & o_data )
o_data.pnorInfo.pnorSize = sectionInfo.size;
o_data.pnorInfo.mmioOffset = pnorInfo.mmioOffset;
o_data.pnorInfo.norWorkarounds = pnorInfo.norWorkarounds;
+ }while(0);
+
+ return errl;
+
+ #undef FUNC
+}
+//------------------------------------------------------------------------------
+
+errlHndl_t getHwConfig( HOMER_Data_t & o_data, const HwInitialized_t i_curHw )
+{
+ #define FUNC "[PRDF::getHwConfig] "
+
+ errlHndl_t errl = NULL;
+
+ do
+ {
//----------------------------------------------------------------------
// Get hardware config information.
//----------------------------------------------------------------------
@@ -547,41 +561,44 @@ errlHndl_t getHwConfig( HOMER_Data_t & o_data )
o_data.exMasks[procPos] |= 0x8000 >> exPos;
}
- // Iterate the connected MCSs.
- TargetHandleList mcsList = getConnected( *procIt, TYPE_MCS );
- for ( TargetHandleList::iterator mcsIt = mcsList.begin();
- mcsIt != mcsList.end(); ++mcsIt )
+ if (ALL_PROC_MEM_MASTER_CORE == i_curHw || ALL_HARDWARE == i_curHw)
{
- uint32_t mcsPos = getTargetPosition( *mcsIt );
- PRDF_ASSERT( mcsPos < MAX_MCS_PER_PROC );
-
- o_data.mcsMasks[procPos] |= 0x80 >> mcsPos;
- }
-
- // Iterate the connected MEMBUFs.
- TargetHandleList membList = getConnected( *procIt, TYPE_MEMBUF );
- for ( TargetHandleList::iterator membIt = membList.begin();
- membIt != membList.end(); ++membIt )
- {
- uint32_t membPos = getTargetPosition(*membIt);
- PRDF_ASSERT( membPos < MAX_MEMB_PER_PROC );
-
- o_data.membMasks[procPos] |= 0x80 >> membPos;
+ // Iterate the connected MCSs.
+ TargetHandleList mcsList = getConnected( *procIt, TYPE_MCS );
+ for ( TargetHandleList::iterator mcsIt = mcsList.begin();
+ mcsIt != mcsList.end(); ++mcsIt )
+ {
+ uint32_t mcsPos = getTargetPosition( *mcsIt );
+ PRDF_ASSERT( mcsPos < MAX_MCS_PER_PROC );
- // Get the MEMBUF FSI address.
- getFsiLinkInfo( *membIt, fsiInfo );
- o_data.membFsiBaseAddr[procPos][membPos] = fsiInfo.baseAddr;
+ o_data.mcsMasks[procPos] |= 0x80 >> mcsPos;
+ }
- // Iterate the connected MBAs.
- TargetHandleList mbaList = getConnected( *membIt, TYPE_MBA );
- for ( TargetHandleList::iterator mbaIt = mbaList.begin();
- mbaIt != mbaList.end(); ++mbaIt )
+ // Iterate the connected MEMBUFs.
+ TargetHandleList membList = getConnected(*procIt, TYPE_MEMBUF );
+ for ( TargetHandleList::iterator membIt = membList.begin();
+ membIt != membList.end(); ++membIt )
{
- uint32_t mbaPos = getTargetPosition(*mbaIt);
- uint32_t shift = membPos * MAX_MBA_PER_MEMBUF + mbaPos;
- PRDF_ASSERT( shift < MAX_MBA_PER_PROC );
-
- o_data.mbaMasks[procPos] |= 0x8000 >> shift;
+ uint32_t membPos = getTargetPosition(*membIt);
+ PRDF_ASSERT( membPos < MAX_MEMB_PER_PROC );
+
+ o_data.membMasks[procPos] |= 0x80 >> membPos;
+
+ // Get the MEMBUF FSI address.
+ getFsiLinkInfo( *membIt, fsiInfo );
+ o_data.membFsiBaseAddr[procPos][membPos] = fsiInfo.baseAddr;
+
+ // Iterate the connected MBAs.
+ TargetHandleList mbaList = getConnected(*membIt, TYPE_MBA );
+ for ( TargetHandleList::iterator mbaIt = mbaList.begin();
+ mbaIt != mbaList.end(); ++mbaIt )
+ {
+ uint32_t mbaPos = getTargetPosition(*mbaIt);
+ uint32_t shift = membPos * MAX_MBA_PER_MEMBUF + mbaPos;
+ PRDF_ASSERT( shift < MAX_MBA_PER_PROC );
+
+ o_data.mbaMasks[procPos] |= 0x8000 >> shift;
+ }
}
}
}
@@ -595,22 +612,15 @@ errlHndl_t getHwConfig( HOMER_Data_t & o_data )
//------------------------------------------------------------------------------
-errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize )
+errlHndl_t writeData( uint8_t * i_hBuf, size_t i_hBufSize,
+ const HwInitialized_t i_curHw, HOMER_Data_t & o_data )
{
- #define FUNC "[PRDF::writeHomerFirData] "
+ #define FUNC "[PRDF::writeData] "
errlHndl_t errl = NULL;
do
{
- // Get the hardware configuration.
- HOMER_Data_t data;
- errl = getHwConfig( data );
- if ( NULL != errl )
- {
- PRDF_ERR( FUNC "getHwConfig() failed" );
- break;
- }
// Get the ultimate buffer size.
size_t s[MAX_TRGTS][MAX_REGS];
@@ -618,28 +628,34 @@ errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize )
size_t sz_hBuf = 0;
- size_t sz_data = sizeof(data); sz_hBuf += sz_data;
+ size_t sz_data = sizeof(o_data); sz_hBuf += sz_data;
s[PROC][GLBL] = sizeof(proc_glbl); sz_hBuf += s[PROC][GLBL];
s[PROC][FIR] = sizeof(proc_fir); sz_hBuf += s[PROC][FIR];
s[PROC][REG] = sizeof(proc_reg); sz_hBuf += s[PROC][REG];
s[EX][GLBL] = sizeof(ex_glbl); sz_hBuf += s[EX][GLBL];
s[EX][FIR] = sizeof(ex_fir); sz_hBuf += s[EX][FIR];
s[EX][REG] = sizeof(ex_reg); sz_hBuf += s[EX][REG];
- s[MCS][FIR] = sizeof(mcs_fir); sz_hBuf += s[MCS][FIR];
- s[MCS][REG] = sizeof(mcs_reg); sz_hBuf += s[MCS][REG];
- s[MEMB][GLBL] = sizeof(memb_glbl); sz_hBuf += s[MEMB][GLBL];
- s[MEMB][FIR] = sizeof(memb_fir); sz_hBuf += s[MEMB][FIR];
- s[MEMB][REG] = sizeof(memb_reg); sz_hBuf += s[MEMB][REG];
- s[MBA][FIR] = sizeof(mba_fir); sz_hBuf += s[MBA][FIR];
- s[MBA][REG] = sizeof(mba_reg); sz_hBuf += s[MBA][REG];
- s[MBA][IDFIR] = sizeof(mba_id_fir); sz_hBuf += s[MBA][IDFIR];
- s[MBA][IDREG] = sizeof(mba_id_reg); sz_hBuf += s[MBA][IDREG];
+
+ if ((ALL_PROC_MEM_MASTER_CORE == i_curHw) || (ALL_HARDWARE == i_curHw))
+ {
+ s[MCS][FIR] = sizeof(mcs_fir); sz_hBuf += s[MCS][FIR];
+ s[MCS][REG] = sizeof(mcs_reg); sz_hBuf += s[MCS][REG];
+ s[MEMB][GLBL] = sizeof(memb_glbl); sz_hBuf += s[MEMB][GLBL];
+ s[MEMB][FIR] = sizeof(memb_fir); sz_hBuf += s[MEMB][FIR];
+ s[MEMB][REG] = sizeof(memb_reg); sz_hBuf += s[MEMB][REG];
+ s[MBA][FIR] = sizeof(mba_fir); sz_hBuf += s[MBA][FIR];
+ s[MBA][REG] = sizeof(mba_reg); sz_hBuf += s[MBA][REG];
+ s[MBA][IDFIR] = sizeof(mba_id_fir); sz_hBuf += s[MBA][IDFIR];
+ s[MBA][IDREG] = sizeof(mba_id_reg); sz_hBuf += s[MBA][IDREG];
+ }
// Verify data will fit in HOMER.
if ( i_hBufSize < sz_hBuf )
{
+
PRDF_ERR( FUNC "Required data size %d is greater that available "
"HOMER data %d", sz_hBuf, i_hBufSize );
+
/*@
* @errortype
* @reasoncode PRDF_INVALID_CONFIG
@@ -663,32 +679,89 @@ errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize )
for ( uint32_t c = FIRST_TRGT; c < MAX_TRGTS; c++ )
{
- data.counts[c][GLBL] = s[c][GLBL] / u32;
- data.counts[c][FIR] = s[c][FIR] / u32;
- data.counts[c][REG] = s[c][REG] / u32;
- data.counts[c][IDFIR] = s[c][IDFIR] / u64;
- data.counts[c][IDREG] = s[c][IDREG] / u64;
+ o_data.counts[c][GLBL] = s[c][GLBL] / u32;
+ o_data.counts[c][FIR] = s[c][FIR] / u32;
+ o_data.counts[c][REG] = s[c][REG] / u32;
+ o_data.counts[c][IDFIR] = s[c][IDFIR] / u64;
+ o_data.counts[c][IDREG] = s[c][IDREG] / u64;
}
// Add everything to the buffer.
uint32_t idx = 0;
- memcpy( &i_hBuf[idx], &data, sz_data ); idx += sz_data;
+ memcpy( &i_hBuf[idx], &o_data, sz_data ); idx += sz_data;
memcpy( &i_hBuf[idx], proc_glbl, s[PROC][GLBL] ); idx += s[PROC][GLBL];
memcpy( &i_hBuf[idx], proc_fir, s[PROC][FIR] ); idx += s[PROC][FIR];
memcpy( &i_hBuf[idx], proc_reg, s[PROC][REG] ); idx += s[PROC][REG];
memcpy( &i_hBuf[idx], ex_glbl, s[EX][GLBL] ); idx += s[EX][GLBL];
memcpy( &i_hBuf[idx], ex_fir, s[EX][FIR] ); idx += s[EX][FIR];
memcpy( &i_hBuf[idx], ex_reg, s[EX][REG] ); idx += s[EX][REG];
- memcpy( &i_hBuf[idx], mcs_fir, s[MCS][FIR] ); idx += s[MCS][FIR];
- memcpy( &i_hBuf[idx], mcs_reg, s[MCS][REG] ); idx += s[MCS][REG];
- memcpy( &i_hBuf[idx], memb_glbl, s[MEMB][GLBL] ); idx += s[MEMB][GLBL];
- memcpy( &i_hBuf[idx], memb_fir, s[MEMB][FIR] ); idx += s[MEMB][FIR];
- memcpy( &i_hBuf[idx], memb_reg, s[MEMB][REG] ); idx += s[MEMB][REG];
- memcpy( &i_hBuf[idx], mba_fir, s[MBA][FIR] ); idx += s[MBA][FIR];
- memcpy( &i_hBuf[idx], mba_reg, s[MBA][REG] ); idx += s[MBA][REG];
- memcpy( &i_hBuf[idx], mba_id_fir, s[MBA][IDFIR] ); idx += s[MBA][IDFIR];
- memcpy( &i_hBuf[idx], mba_id_reg, s[MBA][IDREG] ); idx += s[MBA][IDREG];
+
+ if ((ALL_PROC_MEM_MASTER_CORE == i_curHw) || (ALL_HARDWARE == i_curHw))
+ {
+ memcpy( &i_hBuf[idx], mcs_fir, s[MCS][FIR] );
+ idx += s[MCS][FIR];
+ memcpy( &i_hBuf[idx], mcs_reg, s[MCS][REG] );
+ idx += s[MCS][REG];
+ memcpy( &i_hBuf[idx], memb_glbl, s[MEMB][GLBL] );
+ idx += s[MEMB][GLBL];
+ memcpy( &i_hBuf[idx], memb_fir, s[MEMB][FIR] );
+ idx += s[MEMB][FIR];
+ memcpy( &i_hBuf[idx], memb_reg, s[MEMB][REG] );
+ idx += s[MEMB][REG];
+ memcpy( &i_hBuf[idx], mba_fir, s[MBA][FIR] );
+ idx += s[MBA][FIR];
+ memcpy( &i_hBuf[idx], mba_reg, s[MBA][REG] );
+ idx += s[MBA][REG];
+ memcpy( &i_hBuf[idx], mba_id_fir, s[MBA][IDFIR] );
+ idx += s[MBA][IDFIR];
+ memcpy( &i_hBuf[idx], mba_id_reg, s[MBA][IDREG] );
+ idx += s[MBA][IDREG];
+ }
+
+ }while(0);
+
+ return errl;
+
+ #undef FUNC
+}
+
+//------------------------------------------------------------------------------
+
+errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize,
+ const HwInitialized_t i_curHw )
+{
+ #define FUNC "[PRDF::writeHomerFirData] "
+
+ errlHndl_t errl = NULL;
+
+ do
+ {
+ HOMER_Data_t data = HOMER_getData(); // Initializes data
+
+ // Get the PNOR information
+ errl = getPnorInfo( data );
+ if ( NULL != errl )
+ {
+ PRDF_ERR( FUNC "getPnorInfo() failed" );
+ break;
+ }
+
+ // Get the hardware configuration
+ errl = getHwConfig( data, i_curHw );
+ if ( NULL != errl )
+ {
+ PRDF_ERR( FUNC "getHwConfig() failed" );
+ break;
+ }
+
+ // Write the HOMER data
+ errl = writeData( i_hBuf, i_hBufSize, i_curHw, data );
+ if ( NULL != errl )
+ {
+ PRDF_ERR( FUNC "writeData() failed" );
+ break;
+ }
} while (0);
@@ -700,6 +773,7 @@ errlHndl_t writeHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize )
return errl;
#undef FUNC
+
}
}; // end namespace PRDF
diff --git a/src/usr/diag/prdf/test/makefile b/src/usr/diag/prdf/test/makefile
index b9229e11d..6119a5615 100755
--- a/src/usr/diag/prdf/test/makefile
+++ b/src/usr/diag/prdf/test/makefile
@@ -33,7 +33,9 @@ include prdf_hb_common_test.mk
#------------------------------------------------------------------------------
# paths
#------------------------------------------------------------------------------
-PRD_USR_PATH = ${ROOTPATH}/src/usr/diag/prdf
+PRD_SRC_PATH = ${ROOTPATH}/src/usr/diag/prdf
+
+VPATH += ${PRD_SRC_PATH}/occ_firdata
#------------------------------------------------------------------------------
# objects
@@ -41,6 +43,11 @@ PRD_USR_PATH = ${ROOTPATH}/src/usr/diag/prdf
OBJS += prdfsimMfgSync.o
OBJS += prdfsimFspSyncSvc.o
+ifneq (${HOSTBOOT_RUNTIME},1)
+OBJS += prdfWriteHomerFirData.o
+TESTS += prdfTest_WriteHomerFir.H
+endif
+
TESTS += prdfTest_MfgSync.H
include ${ROOTPATH}/config.mk
diff --git a/src/usr/diag/prdf/test/prdfTest_WriteHomerFir.H b/src/usr/diag/prdf/test/prdfTest_WriteHomerFir.H
new file mode 100644
index 000000000..c2d40bcdf
--- /dev/null
+++ b/src/usr/diag/prdf/test/prdfTest_WriteHomerFir.H
@@ -0,0 +1,262 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/diag/prdf/test/prdfTest_WriteHomerFir.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+#ifndef __TEST_PRDFWRITEHOMERFIR_H
+#define __TEST_PRDFWRITEHOMERFIR_H
+
+/**
+ * @file prdfTest_WriteHomerFir.H
+ *
+ * @brief prdf testing writeHomerFirData()
+ */
+
+#ifdef __HOSTBOOT_MODULE
+ #include <cxxtest/TestSuite.H>
+ #include <errl/errlentry.H>
+ #include <errl/errlmanager.H>
+#else
+ #include <cxxtest/TestSuite.h>
+ #include <fsp/FipsGlobalFixture.H>
+ #include <errlentry.H>
+#endif
+
+#include <prdfTrace.H>
+#include <prdfMain.H>
+#include "prdfsimMacros.H"
+#include <homerData_common.h>
+#include <prdfWriteHomerFirData.H>
+
+namespace PRDF
+{
+// these functions from prdfWriteHomerFirData.C are needed for the
+// fakeWriteHomerFirData() function
+errlHndl_t getHwConfig( HOMER_Data_t & o_data, const HwInitialized_t i_curHw );
+errlHndl_t writeData( uint8_t * i_hBuf, size_t i_hBufSize,
+ const HwInitialized_t i_curHw, HOMER_Data_t & o_data );
+};
+
+class WriteHomerFir: public CxxTest::TestSuite
+{
+private:
+
+ //faked getPnorInfo() function to accommodate unsupported getSectioninfo()
+ void fakeGetPnorInfo( HOMER_Data_t & o_data )
+ {
+ o_data.pnorInfo.pnorOffset = 0;
+ o_data.pnorInfo.pnorSize = 0;
+ o_data.pnorInfo.mmioOffset = 0;
+ o_data.pnorInfo.norWorkarounds = 0;
+ }
+
+//------------------------------------------------------------------------------
+
+ // faked writeHomerFirData() function since getSectionInfo() in
+ // getPnorInfo() is unsupported during CxxTest cases
+ errlHndl_t fakeWriteHomerFirData( uint8_t * i_hBuf, size_t i_hBufSize,
+ const PRDF::HwInitialized_t i_curHw )
+ {
+ using namespace PRDF;
+
+ errlHndl_t errl = NULL;
+
+ do
+ {
+ HOMER_Data_t data = HOMER_getData(); // Initializes data
+
+ // Get the PNOR information, faked function
+ fakeGetPnorInfo( data );
+
+ // Get the hardware configuration
+ errl = getHwConfig( data, i_curHw );
+ if ( NULL != errl )
+ {
+ TS_FAIL("getHwConfig() failed");
+ break;
+ }
+
+ // Write the HOMER data
+ errl = writeData( i_hBuf, i_hBufSize, i_curHw, data );
+ if ( NULL != errl )
+ {
+ TS_FAIL("writeData() failed");
+ break;
+ }
+
+ } while (0);
+
+ if ( NULL != errl )
+ {
+ errl->collectTrace( PRDF_COMP_NAME, 512 );
+ }
+
+ return errl;
+ }
+
+//------------------------------------------------------------------------------
+
+ // check if data exists in HOMER when it should not
+ void checkHomerData(HOMER_Data_t d, const PRDF::HwInitialized_t i_curHw)
+ {
+ using namespace PRDF;
+
+ if (MASTER_PROC_CORE == i_curHw || ALL_PROC_MASTER_CORE == i_curHw)
+ {
+ // check if mcs, membuf, or mba data is available
+ for (uint32_t i = 0; i < PRDF::MAX_PROC_PER_NODE; i++)
+ {
+ // mcs
+ if (d.mcsMasks[i] != 0)
+ {
+ TS_FAIL("ERROR: MCS should not be available. "
+ "(MCS: 0x%02x)", d.mcsMasks[i]);
+ break;
+ }
+
+ // membuf
+ if (d.membMasks[i] != 0)
+ {
+ TS_FAIL("ERROR: MEMBUF should not be available. "
+ "(MEMBUF: 0x%02x)", d.membMasks[i]);
+ break;
+ }
+
+ // mba
+ if (d.mbaMasks[i] != 0)
+ {
+ TS_FAIL("ERROR: MBA should not be available. "
+ "(MBA: 0x%02x)", d.mbaMasks[i]);
+ break;
+ }
+ }
+ }
+ }
+
+//------------------------------------------------------------------------------
+
+public:
+
+ uint8_t hBuf[3072];
+
+ // called at the beginning of each test
+ void setUp()
+ {
+ memset(hBuf, 0x00, sizeof(hBuf));
+ }
+
+//------------------------------------------------------------------------------
+
+ // test when the master processor and core are the configured hw
+ void TestWriteHomerMasterProcCore(void)
+ {
+ using namespace PRDF;
+
+ TS_TRACE("- Write Homer Test 1 - Master Proc Core - Start -");
+
+ errlHndl_t errl = fakeWriteHomerFirData(hBuf, sizeof(hBuf),
+ MASTER_PROC_CORE);
+ if (NULL != errl)
+ {
+ TS_FAIL("ERROR: writeHomerFirData failed.");
+ }
+
+ HOMER_Data_t * d = reinterpret_cast<HOMER_Data_t *>(hBuf);
+ checkHomerData(*d, MASTER_PROC_CORE);
+
+ TS_TRACE("- Write Homer Test 1 - Master Proc Core - End-");
+ }
+
+//------------------------------------------------------------------------------
+
+ // test when all processors and the master core are the configured hw
+ void TestWriteHomerAllProcMasterCore(void)
+ {
+ using namespace PRDF;
+
+ TS_TRACE("- Write Homer Test 2 - All Proc Master Core - Start -");
+
+ errlHndl_t errl = fakeWriteHomerFirData(hBuf, sizeof(hBuf),
+ ALL_PROC_MASTER_CORE);
+ if (NULL != errl)
+ {
+ TS_FAIL("ERROR: writeHomerFirData failed.");
+ }
+
+ HOMER_Data_t * d = reinterpret_cast<HOMER_Data_t *>(hBuf);
+ checkHomerData(*d, ALL_PROC_MASTER_CORE);
+
+ TS_TRACE("- Write Homer Test 2 - All Proc Master Core - End-");
+
+ }
+
+//------------------------------------------------------------------------------
+
+ // test when all processors, all memory, master core are the configured hw
+ void TestWriteHomerAllProcMemMasterCore(void)
+ {
+ using namespace PRDF;
+
+ TS_TRACE("- Write Homer Test 3 - All Proc Mem Master Core - Start -");
+
+ errlHndl_t errl = fakeWriteHomerFirData(hBuf, sizeof(hBuf),
+ ALL_PROC_MEM_MASTER_CORE);
+ if (NULL != errl)
+ {
+ TS_FAIL("ERROR: writeHomerFirData failed.");
+ }
+
+ HOMER_Data_t * d = reinterpret_cast<HOMER_Data_t *>(hBuf);
+ checkHomerData(*d, ALL_PROC_MEM_MASTER_CORE);
+
+ TS_TRACE("- Write Homer Test 3 - All Proc Mem Master Core - End-");
+
+ }
+
+//------------------------------------------------------------------------------
+
+ // test when all hardware is configured
+ void TestWriteHomerAllHardware(void)
+ {
+ using namespace PRDF;
+
+ TS_TRACE("- Write Homer Test 4 - All Hardware - Start -");
+
+ errlHndl_t errl = fakeWriteHomerFirData(hBuf, sizeof(hBuf),
+ ALL_HARDWARE);
+ if (NULL != errl)
+ {
+ TS_FAIL("ERROR: writeHomerFirData failed.");
+ }
+
+ HOMER_Data_t * d = reinterpret_cast<HOMER_Data_t *>(hBuf);
+ checkHomerData(*d, ALL_HARDWARE);
+
+ TS_TRACE("- Write Homer Test 4 - All Hardware - End-");
+
+ }
+
+//------------------------------------------------------------------------------
+
+};
+#endif
diff --git a/src/usr/diag/prdf/test/prdf_hb_common_test.mk b/src/usr/diag/prdf/test/prdf_hb_common_test.mk
index 0d068bb48..d8fef5ffa 100755
--- a/src/usr/diag/prdf/test/prdf_hb_common_test.mk
+++ b/src/usr/diag/prdf/test/prdf_hb_common_test.mk
@@ -28,9 +28,11 @@
#------------------------------------------------------------------------------
PRD_USR_PATH = ${ROOTPATH}/src/usr/diag/prdf
PRD_USR_TEST_PATH = ${ROOTPATH}/src/usr/diag/prdf/test
+PRD_INC_PATH = ${ROOTPATH}/src/include/usr/diag/prdf
+
+EXTRAINCDIR += ${PRD_INC_PATH}
+EXTRAINCDIR += ${PRD_INC_PATH}/common
-EXTRAINCDIR += ${ROOTPATH}/src/include/usr/diag/prdf
-EXTRAINCDIR += ${ROOTPATH}/src/include/usr/diag/prdf/common
EXTRAINCDIR += ${PRD_USR_PATH}
EXTRAINCDIR += ${PRD_USR_PATH}/common
EXTRAINCDIR += ${PRD_USR_PATH}/common/plugins
@@ -45,6 +47,7 @@ EXTRAINCDIR += ${PRD_USR_PATH}/common/plat/pegasus
EXTRAINCDIR += ${PRD_USR_PATH}/common/mnfgtools
EXTRAINCDIR += ${PRD_USR_PATH}/mnfgtools
EXTRAINCDIR += ${PRD_USR_PATH}/framework/service
+EXTRAINCDIR += ${PRD_USR_PATH}/occ_firdata
EXTRAINCDIR += ${PRD_USR_PATH}/test
EXTRAINCDIR += ${ROOTPATH}/src/include/usr/ecmddatabuffer
OpenPOWER on IntegriCloud