summaryrefslogtreecommitdiffstats
path: root/src/hwpf
diff options
context:
space:
mode:
authorSantosh Puranik <santosh.puranik@in.ibm.com>2017-04-12 04:55:13 -0500
committerSantosh S. Puranik <santosh.puranik@in.ibm.com>2017-04-28 08:52:02 -0400
commit534354add3280bec554c62ac158b3ec7fc3a68ef (patch)
tree1934d40cc65999f4436e356af9ec909bd7f69a9b /src/hwpf
parent72102d343243212d239b1a637ad7a530b353a22c (diff)
downloadtalos-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')
-rw-r--r--src/hwpf/src/plat/plat_hw_access.C45
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;
}
OpenPOWER on IntegriCloud