summaryrefslogtreecommitdiffstats
path: root/src/usr/scan/test
diff options
context:
space:
mode:
authorMissy Connell <missyc@us.ibm.com>2012-07-16 14:46:47 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-08-27 17:36:28 -0500
commit428319443515f3eca49f4537422103f9534b8dd3 (patch)
treebd3f8fa557088eab78af0eb8e3af4b458fd5730d /src/usr/scan/test
parent0bbf9079c5659d43a79daf54ccf3b1aad7665193 (diff)
downloadblackbird-hostboot-428319443515f3eca49f4537422103f9534b8dd3.tar.gz
blackbird-hostboot-428319443515f3eca49f4537422103f9534b8dd3.zip
Scan Functionality
Supports Scan read/write Change-Id: I3ccecb772cff3de80062a35219fbfd9fdefd3d82 RTC:34014 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1470 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/scan/test')
-rw-r--r--src/usr/scan/test/makefile28
-rw-r--r--src/usr/scan/test/scantest.H200
2 files changed, 228 insertions, 0 deletions
diff --git a/src/usr/scan/test/makefile b/src/usr/scan/test/makefile
new file mode 100644
index 000000000..9b77007df
--- /dev/null
+++ b/src/usr/scan/test/makefile
@@ -0,0 +1,28 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/scan/test/makefile $
+#
+# IBM CONFIDENTIAL
+#
+# COPYRIGHT International Business Machines Corp. 2011,2012
+#
+# 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
+ROOTPATH = ../../../..
+
+MODULE = testscan
+TESTS = *.H
+
+include ${ROOTPATH}/config.mk
diff --git a/src/usr/scan/test/scantest.H b/src/usr/scan/test/scantest.H
new file mode 100644
index 000000000..666dcd590
--- /dev/null
+++ b/src/usr/scan/test/scantest.H
@@ -0,0 +1,200 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/scan/test/scantest.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* 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 */
+#ifndef __SCANTEST_H
+#define __SCANTEST_H
+
+/**
+ * @file scomtest.H
+ *
+ * @brief Test case for scan code
+*/
+
+#include <cxxtest/TestSuite.H>
+#include <errl/errlmanager.H>
+#include <errl/errlentry.H>
+#include <devicefw/userif.H>
+#include <targeting/common/util.H>
+
+
+extern trace_desc_t* g_trac_scandd;
+
+
+class ScanTest: public CxxTest::TestSuite
+{
+public:
+
+ /**
+ * @brief SCAN test
+ *
+ */
+
+ void test_SCANreadWrite_proc(void)
+ {
+
+
+ }
+
+// Skipping the real scan test for now because the SCOM regs are not defined and simics
+// is broken for the actions required.
+
+ void skip_SCANreadWrite_proc(void)
+// void test_SCANreadWrite_proc(void)
+ {
+
+ TRACFCOMP( g_trac_scandd, "scanTest::test_SCANreadWrite_proc> Start" );
+
+ uint64_t fails = 0;
+ uint64_t total = 0;
+ errlHndl_t l_err = NULL;
+
+ // Setup some targets to use
+ enum {
+ myPROC0,
+ centaur0,
+ NUM_TARGETS
+ };
+ TARGETING::Target* scan_targets[NUM_TARGETS];
+ for( uint64_t x = 0; x < NUM_TARGETS; x++ )
+ {
+ scan_targets[x] = NULL;
+ }
+
+ // Target Proc 0
+ TARGETING::EntityPath epath(TARGETING::EntityPath::PATH_PHYSICAL);
+ epath.addLast(TARGETING::TYPE_SYS,0);
+ epath.addLast(TARGETING::TYPE_NODE,0);
+ epath.addLast(TARGETING::TYPE_PROC,0);
+ scan_targets[myPROC0] = TARGETING::targetService().toTarget(epath);
+
+ epath.removeLast();
+ epath.addLast(TARGETING::TYPE_MEMBUF,0);
+ scan_targets[centaur0] = TARGETING::targetService().toTarget(epath);
+
+ for( uint64_t x = 0; x < NUM_TARGETS; x++ )
+ {
+ //only run if the target exists
+ if(scan_targets[x] == NULL)
+ {
+ TRACFCOMP( g_trac_scandd, "scanTest::test_SCANreadWrite_proc> scan target is null %d", x );
+ continue;
+ }
+/* else if (scan_targets[x]->getAttr<TARGETING::ATTR_HWAS_STATE>().functional != true)
+ {
+ TRACFCOMP( g_trac_scandd, "scanTest::test_SCANreadWrite_proc> Target %d is not functional", x );
+ scan_targets[x] = NULL; //remove from our list
+ } */
+ }
+
+ // scratch data to use
+ //@fixme: Need to either fabricate some fake registers to use or save off data before modifying scans to avoid
+ // corrupting the HW.
+ struct {
+ TARGETING::Target* target;
+ uint64_t data;
+ uint64_t ring;
+ uint64_t length;
+ uint64_t flag; // Set to zero now until simics works or the header will fail
+ } test_data[] = {
+ { scan_targets[myPROC0], 0x1234123456785678, 0x1103400A, 96, 0x0},
+ { scan_targets[centaur0], 0xaaaaaaaaaaaaaaaa, 0x00030088, 436, 0x0},
+ };
+ const uint64_t NUM_ADDRS = sizeof(test_data)/sizeof(test_data[0]);
+
+ // allocate space for read data
+ uint64_t read_data[NUM_ADDRS];
+
+ // write all the test registers
+ for( uint64_t x = 0; x < NUM_ADDRS; x++ )
+ {
+ //only run if the target exists
+ if(test_data[x].target == NULL)
+ {
+ TRACDCOMP( g_trac_scandd, "scanTest::test_SCANreadWrite_proc> TARGEt does not exist 2 %d", x );
+
+ continue;
+ }
+
+ size_t op_size = test_data[x].length;
+
+ TRACDCOMP( g_trac_scandd, "scanTest::test_SCANreadWrite_proc> Before Device Write 2>>> " );
+ total++;
+ l_err = deviceWrite( test_data[x].target,
+ &(test_data[x].data),
+ op_size,
+ DEVICE_SCAN_ADDRESS(test_data[x].ring,
+ test_data[x].length,
+ test_data[x].flag) );
+
+ if( l_err )
+ {
+ TRACFCOMP(g_trac_scandd, "scanTest::test_SCANreadWrite_proc> [%d] Write: Error from device : ring=0x%X, RC=%X", x, test_data[x].ring, l_err->reasonCode() );
+ TS_FAIL( "scanTest::test_SCANreadWrite_proc> ERROR : Unexpected error log from write1" );
+ fails++;
+ errlCommit(l_err,SCAN_COMP_ID);
+ }
+ }
+
+ // read all the test registers
+ for( uint64_t x = 0; x < NUM_ADDRS; x++ )
+ {
+ //only run if the target exists
+ if(test_data[x].target == NULL)
+ {
+ continue;
+ }
+
+ size_t op_size = test_data[x].length;
+
+ total++;
+ l_err = deviceRead( test_data[x].target,
+ &(read_data[x]),
+ op_size,
+ DEVICE_SCAN_ADDRESS(test_data[x].ring, test_data[x].length,test_data[x].flag) );
+ if( l_err )
+ {
+ TRACFCOMP(g_trac_scandd, "scanTest::SCANreadWrite_proc> [%d] Read: Error from device : ring=0x%X, RC=%X", x, test_data[x].ring, l_err->reasonCode() );
+ TS_FAIL( "scanTest::test_SCANreadWrite_proc> ERROR : Unexpected error log from write1" );
+ fails++;
+ errlCommit(l_err,SCAN_COMP_ID);
+ }
+// NOTE:: currently expect fails
+ else if(read_data[x] != test_data[x].data)
+ {
+ TRACFCOMP(g_trac_scandd, "scanTest::test_SCANreadWrite_proc> [%d] Read: EXPECTED Data miss-match : ring=0x%X, read_data=0x%llx, write_data=0x%llx", x, test_data[x].ring, read_data[x], test_data[x].data);
+ //TS_FAIL( "scanTest::test_SCANreadWrite_proc> ERROR : Data miss-match between read and expected data" );
+ //fails++;
+ }
+ }
+
+ TRACFCOMP( g_trac_scandd, "scanTest::test_SCANreadWrite_proc> %d/%d fails", fails, total );
+
+ }
+
+
+
+
+
+
+};
+
+#endif
OpenPOWER on IntegriCloud