diff options
author | Vitaly Marin <mvitaly@us.ibm.com> | 2016-08-28 15:52:35 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-09-18 13:13:11 -0400 |
commit | 83efa306d8460f901459b936c341781633c7b507 (patch) | |
tree | 86a6b613687f1cbc8e44947dbb42e41aad9084e9 /src/usr/fapi2 | |
parent | ebeb735ad3227137996822e03cf1108b549b8b69 (diff) | |
download | talos-hostboot-83efa306d8460f901459b936c341781633c7b507.tar.gz talos-hostboot-83efa306d8460f901459b936c341781633c7b507.zip |
Added support for 'Put Ring from Image' command on HB for SBE
Change-Id: I4930633f87bdb61acb19e01f17a8006277f7868d
RTC:132654
CMVC-Prereq: 1004971
CMVC-Prereq: 1005024
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/28887
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Vitaly Marin <mvitaly@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/fapi2')
-rw-r--r-- | src/usr/fapi2/plat_hw_access.C | 59 | ||||
-rw-r--r-- | src/usr/fapi2/test/fapi2HwAccessTest.H | 21 | ||||
-rw-r--r-- | src/usr/fapi2/test/p9_hwtests.C | 24 | ||||
-rw-r--r-- | src/usr/fapi2/test/p9_hwtests.H | 2 |
4 files changed, 96 insertions, 10 deletions
diff --git a/src/usr/fapi2/plat_hw_access.C b/src/usr/fapi2/plat_hw_access.C index 2a58e3eba..5626bf4d2 100644 --- a/src/usr/fapi2/plat_hw_access.C +++ b/src/usr/fapi2/plat_hw_access.C @@ -43,6 +43,7 @@ #include <scan/scanif.H> #include <hw_access_def.H> +#include <arch/ppc.H> namespace fapi2 @@ -911,17 +912,61 @@ ReturnCode platModifyRing(const Target<TARGET_TYPE_ALL>& i_target, return l_rc; } - +/// @brief passing a 'Put Ring from Image' message to SBE with RingID ReturnCode platPutRing(const Target<TARGET_TYPE_ALL>& i_target, - const RingID i_ringID, - const RingMode i_ringMode) + const RingID i_ringID, + const RingMode i_ringMode = RING_MODE_HEADER_CHECK) { - FAPI_DBG(ENTER_MRK "platPutRing with RingID"); - ReturnCode l_rc; + FAPI_DBG("Entering: platPutRing() with RingID"); + ReturnCode l_rc = FAPI2_RC_SUCCESS; + errlHndl_t l_err = NULL; + + // Note: Trace is placed here in plat code because PPE doesn't support + // trace in common fapi2_hw_access.H + bool l_traceit = platIsScanTraceEnabled(); - // TODO-RTC:132654:Use SBE to drive scans + //convert const ringID to ringID + RingID l_ringID = reinterpret_cast<RingID>(i_ringID); + + // Extract the component pointer + TARGETING::Target* l_target = + reinterpret_cast<TARGETING::Target*>(i_target.get()); + + // Grab the name of the target + TARGETING::ATTR_FAPI_NAME_type l_targName = {0}; + fapi2::toString(i_target, l_targName, sizeof(l_targName)); + + uint64_t l_flag = platGetDDScanMode(i_ringMode); + size_t l_size = (size_t) 0; + + FAPI_DBG("platPutRing l_target : %.16llX i_targetType %.16llX", + l_target, + l_target->getAttr<TARGETING::ATTR_TYPE>()); + + FAPI_DBG("platPutRing l_RingID :" + " %.16llX i_ringMode %.16llX l_flag %.16llX", + static_cast<uint64_t>(l_ringID), i_ringMode, l_flag ); + + l_err = deviceWrite(l_target, + nullptr, + l_size, + DEVICE_SCAN_SBE_ADDRESS(l_ringID,i_ringMode,l_flag)); + + if(l_err) + { + FAPI_ERR("platPutRing: deviceWrite returns error!"); + // Add the error log pointer as data to the ReturnCode + l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_err)); + } + + if (l_traceit) + { + FAPI_SCAN("TRACE : PUTRING w RingID : %s : %.16llX", + l_targName, + static_cast<uint64_t>(l_ringID)); + } - FAPI_DBG(EXIT_MRK "platPutRing with RingID"); + FAPI_DBG(EXIT_MRK "platPutRing() with RingID"); return l_rc; } diff --git a/src/usr/fapi2/test/fapi2HwAccessTest.H b/src/usr/fapi2/test/fapi2HwAccessTest.H index 0773ced18..c113f5d18 100644 --- a/src/usr/fapi2/test/fapi2HwAccessTest.H +++ b/src/usr/fapi2/test/fapi2HwAccessTest.H @@ -159,6 +159,25 @@ void test_fapi2HwAccess() // a false negative on the next case (future?) } + +// this test should only be run before HOSTBOOT runtime +// otherwise it will trigger false positive test result + +#ifndef __HOSTBOOT_RUNTIME + + //this test should not be run at runtime + numTests++; + FAPI_INVOKE_HWP(l_errl, p9_platPutRingWRingID_pass); + if(l_errl) + { + TS_FAIL("Error from p9_platPutRingWRingID_pass !!"); + numFails++; + errlCommit(l_errl,FAPI2_COMP_ID); + delete l_errl; // delete unexpected error log so we dont get + // a false negative on the next case + } +#endif + numTests++; FAPI_INVOKE_HWP(l_errl, p9_ringtest_getring_fail, fapi2_procTarget); if(l_errl != NULL) @@ -171,7 +190,6 @@ void test_fapi2HwAccess() numFails++; } - numTests++; FAPI_INVOKE_HWP(l_errl, p9_opmodetest_getsetopmode); if(l_errl) @@ -255,7 +273,6 @@ void test_fapi2HwAccess() }while(0); FAPI_INF("fapi2HwAccessTest Test Complete. %d/%d fails", numFails , numTests); - } }; diff --git a/src/usr/fapi2/test/p9_hwtests.C b/src/usr/fapi2/test/p9_hwtests.C index e157092ea..fedf8582f 100644 --- a/src/usr/fapi2/test/p9_hwtests.C +++ b/src/usr/fapi2/test/p9_hwtests.C @@ -298,11 +298,33 @@ fapi2::ReturnCode p9_ringtest_modring_pass( fapi_try_exit: FAPI_INF("Exiting p9_ringtest_modring_pass..."); - return fapi2::current_err; } +fapi2::ReturnCode p9_platPutRingWRingID_pass() +{ + //every test is displayed this way via FAPI_INF + FAPI_INF("Entering p9_platPutRingWRingID_pass ..."); + // get the master proc + TARGETING::Target * l_procTest; + TARGETING::targetService().masterProcChipTargetHandle( l_procTest); + fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> + l_fapi2CpuTarget((l_procTest)); + + fapi2::ReturnCode l_status = + fapi2::putRing(l_fapi2CpuTarget, ob0_fure, + fapi2::RING_MODE_SET_PULSE_NO_OPCG_COND); + + if(l_status!= fapi2::FAPI2_RC_SUCCESS) + { + TS_FAIL("p9_platPutRingWRingID_pass>> proc test - failed"); + } + + return l_status; +} + + fapi2::ReturnCode p9_opmodetest_getsetopmode() { FAPI_INF("Ensure that getOpMode return NORMAL initially"); diff --git a/src/usr/fapi2/test/p9_hwtests.H b/src/usr/fapi2/test/p9_hwtests.H index 06727b9d2..cdafe1b06 100644 --- a/src/usr/fapi2/test/p9_hwtests.H +++ b/src/usr/fapi2/test/p9_hwtests.H @@ -74,6 +74,8 @@ fapi2::ReturnCode p9_cfamtest_putcfam_pass( fapi2::ReturnCode p9_opmodetest_getsetopmode(); +fapi2::ReturnCode p9_platPutRingWRingID_pass(); + fapi2::ReturnCode p9_opmodetest_ignorehwerr( fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target, uint8_t fail); |