summaryrefslogtreecommitdiffstats
path: root/src/usr/xscom/runtime/test
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2013-09-16 16:13:27 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-17 11:26:40 -0500
commit498291a1a22d35ffb27ba7d6665d9cec22d8d98e (patch)
treecd4d2efcff399b2a91858f56e6a6654d91513c21 /src/usr/xscom/runtime/test
parent25a68ad9643b83001dbe80120f854221e65e9585 (diff)
downloadtalos-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/makefile29
-rw-r--r--src/usr/xscom/runtime/test/testxscom_rt.H159
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;
+ }
+};
OpenPOWER on IntegriCloud