summaryrefslogtreecommitdiffstats
path: root/src/sbefw/sbeMemAccessInterface.C
diff options
context:
space:
mode:
authorspashabk-in <shakeebbk@in.ibm.com>2017-05-19 01:52:07 -0500
committerSachin Gupta <sgupta2m@in.ibm.com>2017-05-19 06:47:35 -0400
commit3b3b66ac88691a5e83baf8a623b428c21528c92a (patch)
tree3171ffd1a35671dadafb924e9582f1e4de3858ea /src/sbefw/sbeMemAccessInterface.C
parentdb756f42aea0751b81cbbb2438c8e16d6bb005c5 (diff)
downloadtalos-sbe-3b3b66ac88691a5e83baf8a623b428c21528c92a.tar.gz
talos-sbe-3b3b66ac88691a5e83baf8a623b428c21528c92a.zip
Mem interface fapi rc check
Propogate fapi rc properly and break access on setup failure Change-Id: If4c308fab0f67237fbb4faf7869a49d6c7ef3af7 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40743 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Diffstat (limited to 'src/sbefw/sbeMemAccessInterface.C')
-rw-r--r--src/sbefw/sbeMemAccessInterface.C77
1 files changed, 44 insertions, 33 deletions
diff --git a/src/sbefw/sbeMemAccessInterface.C b/src/sbefw/sbeMemAccessInterface.C
index 22756164..7e99b426 100644
--- a/src/sbefw/sbeMemAccessInterface.C
+++ b/src/sbefw/sbeMemAccessInterface.C
@@ -6,6 +6,7 @@
/* OpenPOWER sbe Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2016,2017 */
+/* [+] International Business Machines Corp. */
/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
@@ -81,28 +82,35 @@ ReturnCode sbeMemAccessInterface::accessGranule()
{
ReturnCode l_fapiRc = FAPI2_RC_SUCCESS;
- // Check if we need to do a setup before access
- if(iv_maxGranule == 0)
- {
- l_fapiRc = setup();
- }
- if(iv_interface == SBE_MEM_ACCESS_PBA)
- {
- // Call PBA access for read/write
- SBE_EXEC_HWP(l_fapiRc,
- p9_pba_access,
- plat_getChipTarget(),
- iv_addr,
- (iv_mode == SBE_MEM_ACCESS_READ),
- ((p9_PBA_oper_flag*)iv_flags)->setFlag(),
- (iv_currGranule == 0),
- (iv_lastGranule || (iv_maxGranule == 1)),
- (uint8_t *)&iv_buffer);
- }
- if(iv_interface == SBE_MEM_ACCESS_ADU)
+ do
{
- // Call ADU access HWP for ADU write/read request
- SBE_EXEC_HWP(l_fapiRc,
+ // Check if we need to do a setup before access
+ if(iv_maxGranule == 0)
+ {
+ l_fapiRc = setup();
+ // if setup returns error
+ if( l_fapiRc != FAPI2_RC_SUCCESS )
+ {
+ break;
+ }
+ }
+ if(iv_interface == SBE_MEM_ACCESS_PBA)
+ {
+ // Call PBA access for read/write
+ SBE_EXEC_HWP(l_fapiRc,
+ p9_pba_access,
+ plat_getChipTarget(),
+ iv_addr,
+ (iv_mode == SBE_MEM_ACCESS_READ),
+ ((p9_PBA_oper_flag*)iv_flags)->setFlag(),
+ (iv_currGranule == 0),
+ (iv_lastGranule || (iv_maxGranule == 1)),
+ (uint8_t *)&iv_buffer);
+ }
+ if(iv_interface == SBE_MEM_ACCESS_ADU)
+ {
+ // Call ADU access HWP for ADU write/read request
+ SBE_EXEC_HWP(l_fapiRc,
p9_adu_access_hwp,
plat_getChipTarget(),
iv_addr,
@@ -111,22 +119,20 @@ ReturnCode sbeMemAccessInterface::accessGranule()
(iv_currGranule == 0),
(iv_lastGranule || (iv_maxGranule == 1)),
(uint8_t *)&iv_buffer)
- }
-
- // if access returns error
- if( l_fapiRc != FAPI2_RC_SUCCESS )
- {
- SBE_ERROR(SBE_FUNC" access Failed");
- }
- else
- {
+ }
+ if(l_fapiRc != FAPI2_RC_SUCCESS)
+ {
+ SBE_ERROR(SBE_FUNC" access HWP failed");
+ break;
+ }
iv_maxGranule--;
iv_currGranule++;
// Advance the address
iv_addr += iv_granuleSize;
iv_iterator = (iv_mode == SBE_MEM_ACCESS_READ)?
iv_granuleSize : 0;
- }
+ } while(false);
+
return l_fapiRc;
}
@@ -181,6 +187,11 @@ ReturnCode sbeMemAccessInterface::accessWithBuffer(const void *io_buffer,
}
}
l_fapiRc = accessGranule();
+ // Break out on error
+ if(l_fapiRc != FAPI2_RC_SUCCESS)
+ {
+ break;
+ }
}
if(iv_mode == SBE_MEM_ACCESS_READ)
@@ -209,8 +220,8 @@ ReturnCode sbeMemAccessInterface::accessWithBuffer(const void *io_buffer,
}
}
- // Break out on error or if the data is completely sent
- if((l_fapiRc != FAPI2_RC_SUCCESS) || (l_iterator >= i_len))
+ // data is completely processed
+ if(l_iterator >= i_len)
{
break;
}
OpenPOWER on IntegriCloud