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/plat_hw_access.C | |
parent | ebeb735ad3227137996822e03cf1108b549b8b69 (diff) | |
download | blackbird-hostboot-83efa306d8460f901459b936c341781633c7b507.tar.gz blackbird-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/plat_hw_access.C')
-rw-r--r-- | src/usr/fapi2/plat_hw_access.C | 59 |
1 files changed, 52 insertions, 7 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; } |