summaryrefslogtreecommitdiffstats
path: root/src/usr/runtime/occ
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2016-04-08 21:03:51 -0500
committerStephen Cprek <smcprek@us.ibm.com>2016-04-21 13:51:32 -0500
commit76f1c48130a060fbe83c851fce2474c17b2df9b2 (patch)
treee258515dcbdab5817603c9d290befe2324df7d59 /src/usr/runtime/occ
parent3967f43b9478d7e6b58180dd0b331e61412997cd (diff)
downloadtalos-hostboot-76f1c48130a060fbe83c851fce2474c17b2df9b2.tar.gz
talos-hostboot-76f1c48130a060fbe83c851fce2474c17b2df9b2.zip
Removing some more old fapi1 and hwp code
Deleted all of the old fapi1 code Moved potentially reuseable occ code to a new dir Deleted a variety of p8 hwp files Change-Id: I8b6ab72fef3f1413d919bdd21bc88f2c4f59c5c3 RTC: 146345 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/23075 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: Matt Derksen <v2cibmd@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/runtime/occ')
-rw-r--r--src/usr/runtime/occ/test/occAccessTest.H325
-rw-r--r--src/usr/runtime/occ/test/rt_occtest.H107
2 files changed, 432 insertions, 0 deletions
diff --git a/src/usr/runtime/occ/test/occAccessTest.H b/src/usr/runtime/occ/test/occAccessTest.H
new file mode 100644
index 000000000..87c222669
--- /dev/null
+++ b/src/usr/runtime/occ/test/occAccessTest.H
@@ -0,0 +1,325 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/runtime/occ/test/occAccessTest.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
+/* [+] 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 __OCCACCESSTEST_H
+#define __OCCACCESSTEST_H
+
+#include <stdint.h>
+
+#include <occ/occAccess.H>
+#include <errl/errlentry.H>
+#include <vfs/vfs.H>
+#include <isteps/hwpf_reasoncodes.H>
+
+// fapi support
+#include <fapi.H>
+
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+#include <targeting/common/targetservice.H>
+#include <targeting/common/util.H>
+
+using namespace TARGETING;
+
+class occAccessTest : public CxxTest::TestSuite
+{
+public:
+
+void testAccessOCBIndirectChannel()
+{
+ TS_TRACE ("testAccessOCBIndirectChannel: enter");
+
+ errlHndl_t l_errl = NULL;
+ bool occ_loaded = false;
+ bool l_error = false;
+
+ do
+ {
+ //*********************************************************************
+ // load occ if needed
+ //*********************************************************************
+
+ if ( !VFS::module_is_loaded( "libocc.so" ) )
+ {
+ TS_TRACE("testAccessOCBIndirectChannel: load occ module");
+ l_errl = VFS::module_load( "libocc.so" );
+
+ if ( l_errl )
+ {
+ // load module returned with errl set
+ TS_FAIL("testAccessOCBIndirectChannel:"
+ " could not load occ module");
+ l_error = true;
+ break;
+ }
+ occ_loaded = true;
+ }
+
+ //*********************************************************************
+ // Find a PROC target and its OCC target
+ //*********************************************************************
+
+ //Get a Proc target
+ TARGETING::TargetHandleList l_procTargetList;
+ getAllChips(l_procTargetList,
+ TYPE_PROC,
+ true);
+
+ if (0==l_procTargetList.size()) //unexpected error
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: No Proc targets");
+ l_error = true;
+ break;
+ }
+ const TARGETING::Target* l_procTarget = l_procTargetList[0];
+
+ //Find an OCC target
+ TARGETING::TargetHandleList l_occTargetList;
+ getChildChiplets( l_occTargetList,
+ l_procTarget,
+ TYPE_OCC,
+ true);
+ // if there are no OCCs in this configuration, use the PROC target
+ if (0==l_occTargetList.size())
+ {
+ TS_TRACE("testAccessOCBIndirectChannel: No OCC targets");
+ l_occTargetList.push_back(l_procTargetList[0]);
+ }
+ const TARGETING::Target* l_occTarget = l_occTargetList[0];
+
+ //*********************************************************************
+ // Read and Write the OCC linear buffer
+ // 1. Read current value
+ // 2. Write test data
+ // 3. Read back and verify
+ // 4. Restore current value
+ //*********************************************************************
+ ecmdDataBufferBase l_currentData(64);
+ ecmdDataBufferBase l_testData(64);
+ ecmdDataBufferBase l_readBackData(64);
+ uint32_t l_addr = 0xFFFF6000;//sample value from TMGT.
+ const uint64_t l_testValue = 0x0123456789ABCDEF;
+
+
+ // read current data (use proc target)
+ TS_TRACE("testAccessOCBIndirectChannel:"
+ " target=%.8x type=%d read current",
+ get_huid(l_procTarget),
+ (l_procTarget)->getAttr<TARGETING::ATTR_TYPE>());
+
+ l_errl = HBOCC::readSRAM(l_procTarget,l_addr,l_currentData);
+ if (l_errl)
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: Read OCC SRAM failed");
+ l_error = true;
+ break;
+ }
+ TS_TRACE("testAccessOCBIndirectChannel: current data=%lx",
+ l_currentData.getDoubleWord(0));
+
+ // write test data (use occ target)
+ TS_TRACE("testAccessOCBIndirectChannel:"
+ " target=%.8x type=%d write test",
+ get_huid(l_occTarget),
+ (l_occTarget)->getAttr<TARGETING::ATTR_TYPE>());
+
+ l_testData.setDoubleWord(0,l_testValue);
+ l_errl = HBOCC::writeSRAM(l_occTarget,l_addr,l_testData);
+ if (l_errl)
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: write test data failed");
+ l_error = true;
+ break;
+ }
+ TS_TRACE("testAccessOCBIndirectChannel: test data=%lx",
+ l_testData.getDoubleWord(0));
+
+ // read test data back (use proc target)
+ TS_TRACE("testAccessOCBIndirectChannel:"
+ " target=%.8x type=%d read test data",
+ get_huid(l_procTarget),
+ (l_procTarget)->getAttr<TARGETING::ATTR_TYPE>());
+
+ l_errl = HBOCC::readSRAM(l_procTarget,l_addr,l_readBackData);
+ if (l_errl)
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: read test data failed");
+ l_error = true;
+ break;
+ }
+ TS_TRACE("testAccessOCBIndirectChannel: read back data=%lx",
+ l_readBackData.getDoubleWord(0));
+
+ if(l_testValue != l_readBackData.getDoubleWord(0))
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: read back compare failed");
+ l_error = true;
+ break;
+ }
+
+ // write original data back (use proc target)
+ TS_TRACE("testAccessOCBIndirectChannel:"
+ " target=%.8x type=%d write orginial back",
+ get_huid(l_procTarget),
+ (l_procTarget)->getAttr<TARGETING::ATTR_TYPE>());
+
+ l_errl = HBOCC::writeSRAM(l_procTarget,l_addr,l_currentData);
+ if (l_errl)
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: restore data failed");
+ l_error = true;
+ break;
+ }
+
+ //*********************************************************************
+ // Test write circular
+ //*********************************************************************
+ ecmdDataBufferBase l_data(64); // value 0
+
+ // write circular (use proc target)
+ TS_TRACE("testAccessOCBIndirectChannel:"
+ " target=%.8x type=%d write circular",
+ get_huid(l_procTarget),
+ (l_procTarget)->getAttr<TARGETING::ATTR_TYPE>());
+
+ l_errl = HBOCC::writeCircularBuffer(l_procTarget,l_data);
+ if (l_errl)
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: write circular failed");
+ l_error = true;
+ break;
+ }
+ TS_TRACE("testAccessOCBIndirectChannel: write circular data=%lx",
+ l_data.getDoubleWord(0));
+
+ //*********************************************************************
+ // Error tests
+ //*********************************************************************
+
+ // null target
+ const TARGETING::Target* l_nullTarget = NULL;
+ l_errl = HBOCC::writeCircularBuffer(l_nullTarget,l_data);
+ if (l_errl) {
+ TS_TRACE("testAccessOCBIndirectChannel: null test rc=%x",
+ static_cast<uint32_t>(l_errl->reasonCode()));
+ }
+ if (!l_errl || (RC_TARGET_UNSUPPORTED != l_errl->reasonCode()))
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: null target test failed");
+ l_error = true;
+ break;
+ }
+ delete l_errl;
+ l_errl = NULL;
+
+ // wrong target type
+ TARGETING::TargetHandleList l_wrongTargetList;
+ getAllChips(l_wrongTargetList,
+ TYPE_MEMBUF,
+ true);
+
+ if (0==l_wrongTargetList.size()) //unexpected error
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: No wrong targets");
+ l_error = true;
+ break;
+ }
+ const TARGETING::Target* l_wrongTarget = l_wrongTargetList[0];
+
+ l_errl = HBOCC::writeCircularBuffer(l_wrongTarget,l_data);
+ if (l_errl) {
+ TS_TRACE("testAccessOCBIndirectChannel: wrong target rc=%x",
+ static_cast<uint32_t>(l_errl->reasonCode()));
+ }
+ if (!l_errl || (RC_TARGET_UNSUPPORTED != l_errl->reasonCode()))
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: wrong target test failed");
+ l_error = true;
+ break;
+ }
+ delete l_errl;
+ l_errl = NULL;
+
+ // wrong data length
+ ecmdDataBufferBase l_wrongData(65);
+
+ l_errl = HBOCC::readSRAM(l_procTarget,l_addr,l_wrongData);
+ if (l_errl) {
+ TS_TRACE("testAccessOCBIndirectChannel: wrong data rc=%x",
+ static_cast<uint32_t>(l_errl->reasonCode()));
+ }
+ if (!l_errl || (RC_INVALID_DATA_BUFFER_LENGTH != l_errl->reasonCode()))
+ {
+ TS_FAIL("testAccessOCBIndirectChannel: wrong data length failed");
+ l_error = true;
+ break;
+ }
+ delete l_errl;
+ l_errl = NULL;
+
+ }
+ while (0);
+
+ //*********************************************************************
+ // unload occ if needed
+ //*********************************************************************
+ if (occ_loaded)
+ {
+ errlHndl_t l_tmpErrl = NULL;
+ l_tmpErrl = VFS::module_unload( "libocc.so" );
+ if ( l_tmpErrl )
+ {
+ TS_WARN("testAccessOCBIndirectChannel:"
+ " Error unloading libocc module" );
+ delete l_tmpErrl;
+ l_tmpErrl = NULL;
+ }
+ else
+ {
+ TS_TRACE("testAccessOCBIndirectChannel: unload occ module");
+ }
+ }
+
+
+ if (l_errl) //Test case failed, commit error
+ {
+ errlCommit(l_errl,HWPF_COMP_ID);
+ TS_TRACE ("testAccessOCBIndirectChannel: exit FAILED log committed");
+ }
+ else if (l_error) //Failed without an error log created
+ {
+ TS_TRACE ("testAccessOCBIndirectChannel: exit FAILED");
+ }
+ else
+ {
+ TS_TRACE ("testAccessOCBIndirectChannel: exit PASSED");
+ }
+
+}
+
+}; // end class
+
+#endif
diff --git a/src/usr/runtime/occ/test/rt_occtest.H b/src/usr/runtime/occ/test/rt_occtest.H
new file mode 100644
index 000000000..0b827ca9a
--- /dev/null
+++ b/src/usr/runtime/occ/test/rt_occtest.H
@@ -0,0 +1,107 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/runtime/occ/test/rt_occtest.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2014,2016 */
+/* [+] 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 __RT_OCCTEST_H
+#define __RT_OCCTEST_H
+
+#include <cxxtest/TestSuite.H>
+#include <runtime/interface.h>
+#include <hwpf/hwp/occ/occ_common.H>
+#include <fapi.H>
+#include <targeting/common/commontargeting.H>
+#include <vmmconst.h>
+#include <sys/mm.h>
+#include <util/utillidmgr.H>
+
+class OccTest: public CxxTest::TestSuite
+{
+ public:
+
+ void testOccIntf()
+ {
+ FAPI_INF("testOccIntf");
+
+ runtimeInterfaces_t* rt_intf = getRuntimeInterfaces();
+ if(rt_intf == NULL)
+ {
+ TS_FAIL("runtimeIntfaces not set");
+ return;
+ }
+
+ if( rt_intf->get_lid_list == NULL )
+ {
+ TS_FAIL("runtimeInterfaces->get_lid_list not set");
+ }
+
+ if( rt_intf->occ_load == NULL )
+ {
+ TS_FAIL("runtimeInterfaces->loadOCC not set");
+ }
+
+ if( rt_intf->occ_start == NULL )
+ {
+ TS_FAIL("runtimeInterfaces->startOCCs not set");
+ }
+
+ if( rt_intf->occ_stop == NULL )
+ {
+ TS_FAIL("runtimeInterfaces->stopOCCs not set");
+ }
+
+ /* Test case for stopAllOCCs
+ int err = stopAllOCCs();
+ if( err == -1 )
+ {
+ TS_FAIL("FAILURE!");
+ }
+ */
+
+ }
+
+ void testGetLidList()
+ {
+ FAPI_INF("testGetLidList");
+ runtimeInterfaces_t* rt_intf = getRuntimeInterfaces();
+ if(rt_intf && rt_intf->get_lid_list)
+ {
+ size_t size = 0;
+ const uint32_t * list = rt_intf->get_lid_list(&size);
+ if(size > 1)
+ {
+ TS_FAIL("runtimeInterfaces->get_lid_list empty list");
+ }
+ else if (list[0] != Util::OCC_LIDID)
+ {
+ TS_FAIL("runtimeInterface->get_lid_list missing OCCLID");
+ }
+ }
+
+ }
+
+
+ private:
+
+};
+
+#endif
OpenPOWER on IntegriCloud