diff options
author | Santosh Puranik <santosh.puranik@in.ibm.com> | 2017-04-12 04:55:13 -0500 |
---|---|---|
committer | Santosh S. Puranik <santosh.puranik@in.ibm.com> | 2017-04-28 08:52:02 -0400 |
commit | 534354add3280bec554c62ac158b3ec7fc3a68ef (patch) | |
tree | 1934d40cc65999f4436e356af9ec909bd7f69a9b /src/hwpf/src/plat/plat_hw_access.C | |
parent | 72102d343243212d239b1a637ad7a530b353a22c (diff) | |
download | talos-sbe-534354add3280bec554c62ac158b3ec7fc3a68ef.tar.gz talos-sbe-534354add3280bec554c62ac158b3ec7fc3a68ef.zip |
Set unique FAPI RC for SCOM failures
Allows HWP code to infer the PCB-PIB error by looking at the FAPI RC
Change-Id: I1853391c6c5aa3c19ba08e80c5819139d39b78b0
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39147
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Santosh S. Puranik <santosh.puranik@in.ibm.com>
Diffstat (limited to 'src/hwpf/src/plat/plat_hw_access.C')
-rw-r--r-- | src/hwpf/src/plat/plat_hw_access.C | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/hwpf/src/plat/plat_hw_access.C b/src/hwpf/src/plat/plat_hw_access.C index a87e864a..11ecca1a 100644 --- a/src/hwpf/src/plat/plat_hw_access.C +++ b/src/hwpf/src/plat/plat_hw_access.C @@ -246,6 +246,39 @@ static uint32_t getEffectiveAddress(const plat_target_handle_t &i_target, const return l_addr; } +static fapi2::ReturnCode pibRcToFapiRc(const uint32_t i_pibRc) +{ + fapi2::ReturnCode l_fapiRc = FAPI2_RC_SUCCESS; + switch(i_pibRc) + { + case PIB_XSCOM_ERROR: + l_fapiRc = RC_SBE_PIB_XSCOM_ERROR; + break; + case PIB_OFFLINE_ERROR: + l_fapiRc = RC_SBE_PIB_OFFLINE_ERROR; + break; + case PIB_PARTIAL_ERROR: + l_fapiRc = RC_SBE_PIB_PARTIAL_ERROR; + break; + case PIB_ADDRESS_ERROR: + l_fapiRc = RC_SBE_PIB_ADDRESS_ERROR; + break; + case PIB_CLOCK_ERROR: + l_fapiRc = RC_SBE_PIB_CLOCK_ERROR; + break; + case PIB_PARITY_ERROR: + l_fapiRc = RC_SBE_PIB_PARITY_ERROR; + break; + case PIB_TIMEOUT_ERROR: + l_fapiRc = RC_SBE_PIB_TIMEOUT_ERROR; + break; + case PIB_NO_ERROR: + default: + break; + } + return l_fapiRc; +} + fapi2::ReturnCode getscom_abs_wrap(const void *i_target, const uint32_t i_addr, uint64_t *o_data) { @@ -271,6 +304,12 @@ fapi2::ReturnCode getscom_abs_wrap(const void *i_target, "getScom:pcb pib error, pibRc[0x%08X] Scom_Addr[0x%08X]", l_pibRc,l_addr); fapi_try_exit: + if(PIB_NO_ERROR != l_pibRc) + { + // Override FAPI RC based on PIB RC + fapi2::current_err = pibRcToFapiRc(l_pibRc); + fapi2::g_FfdcData.fapiRc = fapi2::current_err; + } return fapi2::current_err; } @@ -302,6 +341,12 @@ fapi2::ReturnCode putscom_abs_wrap(const void *i_target, l_pibRc,l_addr,(i_data >> 32), static_cast<uint32_t>(i_data & 0xFFFFFFFF)); fapi_try_exit: + if(PIB_NO_ERROR != l_pibRc) + { + // Override FAPI RC based on PIB RC + fapi2::current_err = pibRcToFapiRc(l_pibRc); + fapi2::g_FfdcData.fapiRc = fapi2::current_err; + } return fapi2::current_err; } |