summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRaja Das <rajadas2@in.ibm.com>2016-09-30 00:56:23 -0500
committerAMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>2016-09-30 06:41:44 -0400
commit3d6bb55bc37db22751f1344719ec7799b855a830 (patch)
tree233bf9bedcb75c35ee979f526af52f9bc1256d42 /src
parente34f7c585774440c9e02879993c59bcf08723a9b (diff)
downloadtalos-sbe-3d6bb55bc37db22751f1344719ec7799b855a830.tar.gz
talos-sbe-3d6bb55bc37db22751f1344719ec7799b855a830.zip
LCO Mode Fix in PBA PutMem along with Test Cases
Change-Id: I3aa899dd11bc247b12213233cc605062e455586b Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30518 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/sbefw/sbecmdmemaccess.C21
-rw-r--r--src/test/testcases/testPutMem.py56
2 files changed, 61 insertions, 16 deletions
diff --git a/src/sbefw/sbecmdmemaccess.C b/src/sbefw/sbecmdmemaccess.C
index 84b46dd7..92128b40 100644
--- a/src/sbefw/sbecmdmemaccess.C
+++ b/src/sbefw/sbecmdmemaccess.C
@@ -42,7 +42,7 @@
#include "p9_adu_setup.H"
#include "p9_pba_access.H"
#include "p9_adu_access.H"
-
+#include "p9_pba_coherent_utils.H"
using namespace fapi2;
@@ -287,11 +287,21 @@ uint32_t processPbaRequest(const sbeMemAccessReqMsgHdr_t &i_hdr,
// Default EX Target Init..Not changing it for the time being
Target<fapi2::TARGET_TYPE_EX > l_ex((uint64_t)PBA_DEFAULT_EX_CHIPLET_ID);
+ p9_PBA_oper_flag l_myPbaFlag;
// Determine the access flags
// Fast mode flag
bool l_isFastMode = i_hdr.isFastModeSet();
+ if(l_isFastMode)
+ {
+ l_myPbaFlag.setFastMode(true);
+ }
//LCO Mode for PBA-Put
bool l_isLcoMode = i_hdr.isPbaLcoModeSet();
+ // By default, ex_chipletId printed below won't be used unless accompanied
+ // by LCO_mode.
+ SBE_INFO(SBE_FUNC "FAST_Mode[%d] LCO_Mode[%d] EX_ChipletId[%d]",
+ l_isFastMode, l_isLcoMode, (i_hdr.coreChipletId)/2);
+
if(l_isLcoMode)
{
//Derive the EX target from the input Core Chiplet Id
@@ -299,11 +309,8 @@ uint32_t processPbaRequest(const sbeMemAccessReqMsgHdr_t &i_hdr,
//..so on
l_ex = plat_getTargetHandleByChipletNumber<fapi2::TARGET_TYPE_EX>
(i_hdr.coreChipletId);
+ l_myPbaFlag.setOperationType(p9_PBA_oper_flag::LCO); // LCO operation
}
- // By default, ex_chipletId printed below won't be used unless accompanied
- // by LCO_mode.
- SBE_INFO(SBE_FUNC "FAST_Mode[%d] LCO_Mode[%d] EX_ChipletId[%d]",
- l_isFastMode, l_isLcoMode, (i_hdr.coreChipletId)/2);
// The max granule size for which the ADU/PBA interface if configured
uint32_t l_numGranules = 0;
@@ -324,7 +331,7 @@ uint32_t processPbaRequest(const sbeMemAccessReqMsgHdr_t &i_hdr,
l_ex,
l_addr,
i_isFlagRead,
- ((l_isFastMode) ? (1<<PBA_FAST_MODE_SHIFT) : 0),
+ l_myPbaFlag.setFlag(),
l_numGranules)
// if p9_pba_setup returns error
@@ -378,7 +385,7 @@ uint32_t processPbaRequest(const sbeMemAccessReqMsgHdr_t &i_hdr,
l_proc,
l_addr,
i_isFlagRead,
- ((l_isFastMode) ? (1<<PBA_FAST_MODE_SHIFT) : 0),
+ l_myPbaFlag.setFlag(),
l_firstGran,
l_lastGran,
(uint8_t *)&l_dataFifo)
diff --git a/src/test/testcases/testPutMem.py b/src/test/testcases/testPutMem.py
index d4d73ea8..70996247 100644
--- a/src/test/testcases/testPutMem.py
+++ b/src/test/testcases/testPutMem.py
@@ -30,12 +30,26 @@ err = False
LOOP_COUNT = 4
-PUTMEM_TEST_HDR = [0,0,0,0x86,
- 0,0,0xA4,0x02,
- 0,0,0x0,0x02,
- 0,0,0,0,
- 0x08,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x80]
+PUTMEM_TEST_HDR_WO_FMODE_WO_LCO = [0,0,0,0x86,
+ 0,0,0xA4,0x02,
+ 0,0,0x0,0x02,
+ 0,0,0,0,
+ 0x08,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80]
+
+PUTMEM_TEST_HDR_W_FMODE_WO_LCO = [0,0,0,0x86,
+ 0,0,0xA4,0x02,
+ 0,0,0x0,0x22,
+ 0,0,0,0,
+ 0x08,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80]
+
+PUTMEM_TEST_HDR_W_FMODE_W_LCO = [0,0,0,0x86,
+ 0,0,0xA4,0x02,
+ 0x2E,0,0x0,0x62,
+ 0,0,0,0,
+ 0x08,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80]
PUTMEM_TEST_DATA = [0xAB,0xCD,0xEF,0x01,
0xAB,0xCD,0xEF,0x02,
@@ -55,18 +69,42 @@ PUTMEM_EXPDATA = [0x00,0x00,0x00,0x80,
# MAIN Test Run Starts Here...
#-------------------------------------------------
def main( ):
+# First Case without Fast Mode without LCO
testUtil.runCycles( 10000000 )
+ testUtil.writeUsFifo( PUTMEM_TEST_HDR_WO_FMODE_WO_LCO )
+
+ loop = 1
+ while (loop <= LOOP_COUNT):
+ testUtil.writeUsFifo( PUTMEM_TEST_DATA )
+ loop += 1
+ testUtil.writeEot( )
+
+ testUtil.readDsFifo( PUTMEM_EXPDATA )
+ testUtil.readEot( )
- testUtil.writeUsFifo( PUTMEM_TEST_HDR )
+# Second Case with Fast Mode without LCO
+ testUtil.runCycles( 10000000 )
+ testUtil.writeUsFifo( PUTMEM_TEST_HDR_W_FMODE_WO_LCO )
+
+ loop = 1
+ while (loop <= LOOP_COUNT):
+ testUtil.writeUsFifo( PUTMEM_TEST_DATA )
+ loop += 1
+ testUtil.writeEot( )
+
+ testUtil.readDsFifo( PUTMEM_EXPDATA )
+ testUtil.readEot( )
+
+# Third Case with Fast Mode with LCO
+ testUtil.runCycles( 10000000 )
+ testUtil.writeUsFifo( PUTMEM_TEST_HDR_W_FMODE_W_LCO )
loop = 1
while (loop <= LOOP_COUNT):
- #testUtil.runCycles( 10000000 )
testUtil.writeUsFifo( PUTMEM_TEST_DATA )
loop += 1
testUtil.writeEot( )
- #testUtil.runCycles( 10000000 )
testUtil.readDsFifo( PUTMEM_EXPDATA )
testUtil.readEot( )
OpenPOWER on IntegriCloud