diff options
| author | Dan Crowell <dcrowell@us.ibm.com> | 2012-04-23 14:28:04 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-04-27 14:35:34 -0500 |
| commit | 7b0cefb312c7eae2363eb6f83eb946fc7069cb4f (patch) | |
| tree | 3ceba19abb63ecde1629b339d93f000927de0d9d /src/usr/xscom | |
| parent | 174f7992bf4a73ebb891027084d490a43f257c3b (diff) | |
| download | talos-hostboot-7b0cefb312c7eae2363eb6f83eb946fc7069cb4f.tar.gz talos-hostboot-7b0cefb312c7eae2363eb6f83eb946fc7069cb4f.zip | |
Updating the bbuild to b0419a_1215.810
Moving up levels to get to a stable fips810 driver that
includes some Simics fixes
RTC: 40995
Change-Id: Iedbefc0f765b51d18af5a106fb4db89a9531f739
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/946
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/xscom')
| -rw-r--r-- | src/usr/xscom/test/xscomtest.H | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/usr/xscom/test/xscomtest.H b/src/usr/xscom/test/xscomtest.H index b5bd1c705..187eeaf74 100644 --- a/src/usr/xscom/test/xscomtest.H +++ b/src/usr/xscom/test/xscomtest.H @@ -179,6 +179,133 @@ public: } return; } + + + /** + * @brief XSCOM test #2 + * Write value and read back to verify + */ + void testXscom2(void) + { + + TARGETING::TargetService& l_targetService = TARGETING::targetService(); + TARGETING::Target* l_testTarget = NULL; + l_targetService.masterProcChipTargetHandle( l_testTarget ); + assert(l_testTarget != NULL); + + size_t l_size = sizeof(uint64_t); + + uint64_t l_readData = 0; + uint64_t l_writeData[g_xscomAddrTableSz]; + uint64_t l_savedData[g_xscomAddrTableSz]; + + // Loop thru table to do initial write + errlHndl_t l_err = NULL; + for( uint32_t l_num=0; l_num < g_xscomAddrTableSz; l_num++) + { + testXscomAddrData l_testEntry = g_xscomAddrTable[l_num]; + + // Perform XSComOM read + l_err = deviceRead(l_testTarget, + &l_readData, + l_size, + DEVICE_SCOM_ADDRESS(l_testEntry.addr)); + if (l_err) + { + TS_FAIL("testXscom2: XSCom read: deviceRead() fails! Error committed."); + break; + } + else + { + TS_TRACE("testXscom2: XSCom read, Address 0x%.8X, Data %llx", + l_testEntry.addr, + (long long unsigned)l_readData); + } + + // Perform an XSCom write + l_savedData[l_num] = l_readData; + l_writeData[l_num] = (l_readData | l_testEntry.data); + l_err = deviceWrite(l_testTarget, + &l_writeData[l_num], + l_size, + DeviceFW::SCOM, + l_testEntry.addr); + + if (l_err) + { + TS_FAIL("testXscom2: XSCom write: deviceWrite() fails!"); + break; + } + else + { + TS_TRACE("testXscom2: XSCom write, Address 0x%.8X, Data %llx", + l_testEntry.addr, + (long long unsigned)l_writeData); + } + } + + // Loop through table to do the read and verify + for( uint32_t l_num=0; l_num < g_xscomAddrTableSz; l_num++) + { + testXscomAddrData l_testEntry = g_xscomAddrTable[l_num]; + + // Read back + l_readData = 0; + l_err = deviceRead(l_testTarget, + &l_readData, + l_size, + DEVICE_SCOM_ADDRESS(l_testEntry.addr)); + if (l_err) + { + TS_FAIL("testXscom2: XSCom read back: deviceRead() fails!"); + break; + } + + if( l_readData != l_writeData[l_num] ) + { + TS_FAIL("testXscom2: XSCom read back doesn't match write!"); + /*@ + * @errortype + * @moduleid XSCOM_TEST_XSCOM2 + * @reasoncode XSCOM_DATA_UNMATCHED + * @userdata1 Write value + * @userdata2 Read back value + * @devdesc Read back value doesn't match write + */ + l_err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_INFORMATIONAL, + XSCOM::XSCOM_TEST_XSCOM1, + XSCOM::XSCOM_DATA_UNMATCHED, + l_writeData[l_num], + l_readData); + break; + } + + // Write back original value + l_err = deviceWrite(l_testTarget, + &l_savedData[l_num], + l_size, + DeviceFW::SCOM, + l_testEntry.addr); + + if (l_err) + { + TS_FAIL("testXscom2: XSCom write back original fails!"); + break; + } + } + + if (l_err) + { + TS_FAIL("testXscom2 failed! Error committed."); + errlCommit(l_err,XSCOM_COMP_ID); + } + else + { + TS_TRACE("testXscom2 runs successfully!"); + } + return; + } }; #endif |

