From d770027426ba0c5d6c44fa985e9dfaf28fd6fcce Mon Sep 17 00:00:00 2001 From: spashabk-in Date: Thu, 11 May 2017 13:53:55 -0500 Subject: ADU CI mode - access at offset fix Change-Id: I020387720b499132090394a9155c1a8dbf011cf5 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40406 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: RAJA DAS Reviewed-by: AMIT J. TENDOLKAR Reviewed-by: Sachin Gupta --- src/sbefw/sbecmdmemaccess.C | 10 +++--- src/test/testcases/testAduMem_124B.py | 62 ++++++++++------------------------- 2 files changed, 23 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/sbefw/sbecmdmemaccess.C b/src/sbefw/sbecmdmemaccess.C index 93126d49..a71fe671 100644 --- a/src/sbefw/sbecmdmemaccess.C +++ b/src/sbefw/sbecmdmemaccess.C @@ -45,7 +45,7 @@ using namespace fapi2; // Buffer requirement for ADU and PBA on the stack -constexpr uint32_t MAX_ADU_BUFFER = 10; // 0bytes +constexpr uint32_t MAX_ADU_BUFFER = 5; // 40bytes constexpr uint32_t MAX_PBA_BUFFER = 32; // PBA / ADU Granule size as per the HWP Requirement constexpr uint32_t PBA_GRAN_SIZE_BYTES = 128; @@ -454,9 +454,9 @@ uint32_t processAduRequest(const sbeMemAccessReqMsgHdr_t &i_hdr, (i_isFlagRead ? SBE_MEM_ACCESS_READ : SBE_MEM_ACCESS_WRITE), - l_granuleSize); + ADU_GRAN_SIZE_BYTES); // 8Byte granule for ADU access - uint32_t l_dataFifo[MAX_ADU_BUFFER] = {0}; + uint64_t l_dataFifo[MAX_ADU_BUFFER] = {0}; while (l_granulesCompleted < l_lenCacheAligned) { // With ECC or ITAG the output length of a granule will become @@ -495,7 +495,7 @@ uint32_t processAduRequest(const sbeMemAccessReqMsgHdr_t &i_hdr, // If this is putmem request, read input data from the upstream FIFO if (!i_isFlagRead) { - // l_sizeMultiplier * 4B Upstream FIFO = Granule size 128B + // l_sizeMultiplier * 4B Upstream FIFO = Granule size 8B uint32_t l_len2dequeue = l_sizeMultiplier; l_rc = sbeUpFifoDeq_mult (l_len2dequeue, (uint32_t *)&l_dataFifo, @@ -537,7 +537,7 @@ uint32_t processAduRequest(const sbeMemAccessReqMsgHdr_t &i_hdr, } l_fapiRc = l_ADUInterface.accessWithBuffer( &(((uint8_t *)&(l_dataFifo))[l_bufIdx]), - l_granuleSize, + ADU_GRAN_SIZE_BYTES, (l_granulesCompleted == (l_lenCacheAligned-1))); // if error if( (l_fapiRc != FAPI2_RC_SUCCESS) ) diff --git a/src/test/testcases/testAduMem_124B.py b/src/test/testcases/testAduMem_124B.py index 9d6cd146..f89c05fd 100644 --- a/src/test/testcases/testAduMem_124B.py +++ b/src/test/testcases/testAduMem_124B.py @@ -35,52 +35,26 @@ err = False def main( ): testUtil.runCycles( 10000000 ) -# Test case 1: 1byte access - #PutMemAdu Test - data = os.urandom(1) - data = [ord(c) for c in data] - testMemProcUtil.putmem(0x08000000, data, 0xA5) +# Test case 1: Valid lengths + bytes = [1, 2, 4] + offsets = {1:(0, 1, 2, 3, 4, 5, 6, 7), 2:(0, 2, 4, 6), 4:(0, 4)} + for byte in bytes: + for offset in offsets[byte]: + #PutMemAdu Test + data = os.urandom(byte) + data = [ord(c) for c in data] + testMemProcUtil.putmem(0x08000000 + offset, data, 0xA5) - # GetMemAdu test - readData = testMemProcUtil.getmem(0x08000000, 1, 0xA5) - if(data == readData): - print ("Success - Write-Read ADU 1byte") - else: - print data - print readData - raise Exception('data mistmach') - -# Test case 2: 2byte access - #PutMemAdu Test - data = os.urandom(2) - data = [ord(c) for c in data] - testMemProcUtil.putmem(0x08000000, data, 0xA5) - - # GetMemAdu test - readData = testMemProcUtil.getmem(0x08000000, 2, 0xA5) - if(data == readData): - print ("Success - Write-Read ADU 2byte") - else: - print data - print readData - raise Exception('data mistmach') - -# Test case 3: 4byte access - #PutMemAdu Test - data = os.urandom(4) - data = [ord(c) for c in data] - testMemProcUtil.putmem(0x08000000, data, 0xA5) - - # GetMemAdu test - readData = testMemProcUtil.getmem(0x08000000, 4, 0xA5) - if(data == readData): - print ("Success - Write-Read ADU 4byte") - else: - print data - print readData - raise Exception('data mistmach') + # GetMemAdu test + readData = testMemProcUtil.getmem(0x08000000 + offset, byte, 0xA5) + if(data == readData): + print ("Success - Write-Read ADU byte["+str(byte)+"] offset[" + str(offset)+"]") + else: + print [hex(a) for a in data] + print [hex(a) for a in readData] + raise Exception('data mistmach') -# Test case 4: Invalid length - 3 +# Test case 2: Invalid length - 3 # GetMemAdu test testMemProcUtil.getmem_failure(0x08000000, 3, 0xA5, 0x0002000A) print ("Success - invalid length test") -- cgit v1.2.1