diff options
| author | Doug Gilbert <dgilbert@us.ibm.com> | 2013-09-16 16:13:27 -0500 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-17 11:26:40 -0500 |
| commit | 498291a1a22d35ffb27ba7d6665d9cec22d8d98e (patch) | |
| tree | cd4d2efcff399b2a91858f56e6a6654d91513c21 /src/usr/xscom/runtime/test | |
| parent | 25a68ad9643b83001dbe80120f854221e65e9585 (diff) | |
| download | talos-hostboot-498291a1a22d35ffb27ba7d6665d9cec22d8d98e.tar.gz talos-hostboot-498291a1a22d35ffb27ba7d6665d9cec22d8d98e.zip | |
Hostboot runtime scom support
RTC: 79407
RTC: 79406
Change-Id: I8cbf1f21e8e9e205eb0130ce96187619647cf486
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6350
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/xscom/runtime/test')
| -rw-r--r-- | src/usr/xscom/runtime/test/makefile | 29 | ||||
| -rw-r--r-- | src/usr/xscom/runtime/test/testxscom_rt.H | 159 |
2 files changed, 188 insertions, 0 deletions
diff --git a/src/usr/xscom/runtime/test/makefile b/src/usr/xscom/runtime/test/makefile new file mode 100644 index 000000000..23939761e --- /dev/null +++ b/src/usr/xscom/runtime/test/makefile @@ -0,0 +1,29 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/xscom/runtime/test/makefile $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2013 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG +HOSTBOOT_RUNTIME = 1 +ROOTPATH = ../../../../.. + +MODULE = testxscom_rt +TESTS = *.H + +include ${ROOTPATH}/config.mk diff --git a/src/usr/xscom/runtime/test/testxscom_rt.H b/src/usr/xscom/runtime/test/testxscom_rt.H new file mode 100644 index 000000000..943d6381e --- /dev/null +++ b/src/usr/xscom/runtime/test/testxscom_rt.H @@ -0,0 +1,159 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/xscom/runtime/test/testxscom_rt.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2013 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +#include <cxxtest/TestSuite.H> +#include <errl/errlmanager.H> +#include <errl/errlentry.H> +#include <devicefw/userif.H> +#include <xscom/xscomreasoncodes.H> + +extern trace_desc_t* g_trac_xscom; + +using namespace TARGETING; + +// Address and data to read/write +struct testXscomAddrData +{ + uint32_t addr; + uint64_t data; +}; + +// Test table values +const testXscomAddrData g_xscomAddrTable[] = +{ + // Write data to be ORed with read value + {0x15013288, 0x0000040000000000}, + {0x15010002, 0xC000000000000000}, + {0x00040001, 0xE000000000000000}, //TP Chiplet + // TODO - more tests +}; +const uint32_t g_xscomAddrTableSz = + sizeof(g_xscomAddrTable)/sizeof(testXscomAddrData); + +class XscomTestSuite : public CxxTest::TestSuite +{ + public: + /** + * @brief XSCOM test #1 + * Write value and read back to verify + */ + void testXscom1(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); + + // Loop thru table + 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 + uint64_t l_readData = 0; + uint64_t l_writeData = 0; + uint64_t l_savedData = 0; + l_err = deviceRead(l_testTarget, + &l_readData, + l_size, + DEVICE_SCOM_ADDRESS(l_testEntry.addr)); + if (l_err) + { + TS_FAIL("testXscom1: XSCom read: deviceRead() fails! Error committed."); + break; + } + else + { + TS_TRACE("testXscom1: XSCom read, Address 0x%.8X, Data %llx", + l_testEntry.addr, + (long long unsigned)l_readData); + } + + // Perform an XSCom write + l_savedData = l_readData; + l_writeData = (l_readData | l_testEntry.data); + l_err = deviceWrite(l_testTarget, + &l_writeData, + l_size, + DeviceFW::SCOM, + l_testEntry.addr); + + if (l_err) + { + TS_FAIL("testXscom1: XSCom write: deviceWrite() fails!"); + break; + } + else + { + TS_TRACE("testXscom1: XSCom write, Address 0x%.8X, Data %llx", + l_testEntry.addr, + (long long unsigned)l_writeData); + } + + // 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("testXscom1: XSCom read back: deviceRead() fails!"); + break; + } + + if( l_readData != l_writeData ) + { + TS_FAIL("testXscom1: XSCom read back doesn't match write!"); + break; + } + + // Write back original value + l_err = deviceWrite(l_testTarget, + &l_savedData, + l_size, + DeviceFW::SCOM, + l_testEntry.addr); + + if (l_err) + { + TS_FAIL("testXscom1: XSCom write back original fails!"); + break; + } + } + + if (l_err) + { + TS_FAIL("testXscom1 failed! Error committed."); + errlCommit(l_err,XSCOM_COMP_ID); + } + else + { + TS_TRACE("testXscom1 runs successfully!"); + } + return; + } +}; |

