diff options
-rw-r--r-- | src/sbefw/sbecmdmemaccess.C | 21 | ||||
-rw-r--r-- | src/test/testcases/testPutMem.py | 56 |
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( ) |