From 708be51a63b378eb92a85e30661f77cbaf0d8807 Mon Sep 17 00:00:00 2001 From: spashabk-in Date: Mon, 31 Jul 2017 07:10:40 -0500 Subject: Secure Memory Manager implementation Support to update and manage the memory window list Opening of HB Dump window in istep 5.1 Enabled memory filtering in mem access chip-ops Change-Id: I72b68ac099371babe47a64689fa38927934625b7 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/43929 Tested-by: Jenkins Server Tested-by: FSP CI Jenkins Reviewed-by: AMIT J. TENDOLKAR Reviewed-by: RAJA DAS Reviewed-by: Sachin Gupta --- src/test/testcases/test.xml | 4 +- src/test/testcases/testIstep.xml | 7 +- src/test/testcases/testMatchStashPair.xml | 30 --- src/test/testcases/testMemUtil.py | 30 +++ src/test/testcases/testUnsecureMemRegions.py | 206 ++++++++++++++++++++- src/test/testcases/testUnsecureMemRegions.xml | 30 +++ src/test/testcases/testUnsecureMemRegionsClose.py | 53 ------ src/test/testcases/testUnsecureMemRegionsClose.xml | 30 --- src/test/testcases/testUnsecureMemRegionsOpen.py | 59 ------ src/test/testcases/testUnsecureMemRegionsOpen.xml | 30 --- 10 files changed, 271 insertions(+), 208 deletions(-) delete mode 100755 src/test/testcases/testMatchStashPair.xml create mode 100644 src/test/testcases/testUnsecureMemRegions.xml delete mode 100644 src/test/testcases/testUnsecureMemRegionsClose.py delete mode 100644 src/test/testcases/testUnsecureMemRegionsClose.xml delete mode 100644 src/test/testcases/testUnsecureMemRegionsOpen.py delete mode 100644 src/test/testcases/testUnsecureMemRegionsOpen.xml (limited to 'src/test/testcases') diff --git a/src/test/testcases/test.xml b/src/test/testcases/test.xml index 677cf9b2..0b3f432a 100755 --- a/src/test/testcases/test.xml +++ b/src/test/testcases/test.xml @@ -32,16 +32,14 @@ ../simics/targets/p9_nimbus/sbeTest/testPSUSetStashPair.xml ../simics/targets/p9_nimbus/sbeTest/testIstep.xml - ../simics/targets/p9_nimbus/sbeTest/testMatchStashPair.xml ../simics/targets/p9_nimbus/sbeTest/testSuspendIO.xml ../simics/targets/p9_nimbus/sbeTest/testScom.xml ../simics/targets/p9_nimbus/sbeTest/testGeneric.xml - ../simics/targets/p9_nimbus/sbeTest/testUnsecureMemRegionsOpen.xml + ../simics/targets/p9_nimbus/sbeTest/testUnsecureMemRegions.xml ../simics/targets/p9_nimbus/sbeTest/testPutGetMem.xml ../simics/targets/p9_nimbus/sbeTest/testAduMem.xml ../simics/targets/p9_nimbus/sbeTest/testPSUSetFFDCAddr.xml - ../simics/targets/p9_nimbus/sbeTest/testUnsecureMemRegionsClose.xml ../simics/targets/p9_nimbus/sbeTest/testSram.xml ../simics/targets/p9_nimbus/sbeTest/testRegAccess.xml diff --git a/src/test/testcases/testIstep.xml b/src/test/testcases/testIstep.xml index 86fa6a35..00362545 100644 --- a/src/test/testcases/testIstep.xml +++ b/src/test/testcases/testIstep.xml @@ -5,7 +5,7 @@ - + @@ -321,6 +321,11 @@ sbe-istep 5 2 yes + + + run-python-file targets/p9_nimbus/sbeTest/testMatchStashPair.py + yes + run-python-file targets/p9_nimbus/sbeTest/testIstepInvalid.py diff --git a/src/test/testcases/testMatchStashPair.xml b/src/test/testcases/testMatchStashPair.xml deleted file mode 100755 index 56e1d0a1..00000000 --- a/src/test/testcases/testMatchStashPair.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - run-python-file targets/p9_nimbus/sbeTest/testMatchStashPair.py - yes - - diff --git a/src/test/testcases/testMemUtil.py b/src/test/testcases/testMemUtil.py index 1014f46c..fce1eae2 100644 --- a/src/test/testcases/testMemUtil.py +++ b/src/test/testcases/testMemUtil.py @@ -89,7 +89,35 @@ def putmem(addr, data, flags, ecc=0): testUtil.readDsFifo(expData) testUtil.readEot( ) +def putmem_failure(addr, data, flags, responseWord, ecc=0): + lenInBytes = len(data) + if(len(data) < 8): + data = data+[0]*(4-len(data)) + totalLen = 5 + len(data)/4 + coreChipletId = 0x00 + if (flags & 0x0040): + # LCO mode is set, so chiplet id - 0x20 + coreChipletId = 0x20 + req = (getsingleword(totalLen) + +[ 0,0,0xA4,0x02] + +[coreChipletId, ecc] + +gethalfword(flags) + #0,0,0x0,0xA5] #CoreChipletId/EccByte/Flags -> NoEccOverride/CacheInhibit/FastMode/NoTag/NoEcc/AutoIncr/Adu/Proc + + getdoubleword(addr) + + getsingleword(lenInBytes) # length of data + + data) + testUtil.writeUsFifo(req) + testUtil.writeEot( ) + testUtil.runCycles( 10000000 ) + expResp = ([0x0, 0x0, 0x0, 0x0] + + [0xc0,0xde,0xa4,0x02] + + getsingleword(responseWord) + + [0x0,0x0,0x0,0x03]) + testUtil.readDsFifo(expResp) + testUtil.readEot( ) + def getmem(addr, len, flags): + testUtil.runCycles( 10000000 ) req = (getsingleword(6) + [0, 0, 0xA4, 0x01] + getsingleword(flags) @@ -122,6 +150,7 @@ def getmem(addr, len, flags): return data[:lenExp] def getmem_failure(addr, len, flags, responseWord): + testUtil.runCycles( 10000000 ) req = (getsingleword(6) + [0, 0, 0xA4, 0x01] + getsingleword(flags) @@ -137,6 +166,7 @@ def getmem_failure(addr, len, flags, responseWord): testUtil.readEot( ) def setUnsecureMemRegion(addr, size, controlFlag, responseWord): + testUtil.runCycles( 10000000 ) req = (["write", reg.REG_MBOX0,"0"*(8-len(hex(controlFlag).split('0x')[-1]))+hex(controlFlag).split('0x')[-1] +"00F0D601", 8, "None", "Writing to MBOX0 address"], ["write", reg.REG_MBOX1, "0"*(16-len(hex(size).split('0x')[-1]))+hex(size).split('0x')[-1], 8, "None", "Writing to MBOX1 address"], ["write", reg.REG_MBOX2, "0"*(16-len(hex(addr).split('0x')[-1]))+hex(addr).split('0x')[-1], 8, "None", "Writing to MBOX1 address"], diff --git a/src/test/testcases/testUnsecureMemRegions.py b/src/test/testcases/testUnsecureMemRegions.py index 129b80c4..7087e32e 100644 --- a/src/test/testcases/testUnsecureMemRegions.py +++ b/src/test/testcases/testUnsecureMemRegions.py @@ -6,6 +6,7 @@ # OpenPOWER sbe Project # # Contributors Listed Below - COPYRIGHT 2017 +# [+] International Business Machines Corp. # # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,5 +35,206 @@ err = False def main(): testUtil.runCycles( 10000000 ) - # Test case 1: open RO mem region - success - testMemProcUtil.setUnsecureMemRegion(0x08000000, 1024, 0x0000) + try: + # Close the HB dump region + testMemProcUtil.setUnsecureMemRegion(0x08000000, 32*1024*1024, 0x0120, 0) + + # Test case 1: open RO mem region - success + testcase = 1 + testMemProcUtil.setUnsecureMemRegion(0x07000000, 1024, 0x0111, 0) + # Test case 2: open RW mem region - success + # This region is kept open for mem testcases - will be closed by + # testUnsecureMemRegionsClose.py + testcase = 2 + testMemProcUtil.setUnsecureMemRegion(0x08000000, 0x2000, 0x0112, 0) + # Test case 3: close RO mem region - success + testcase = 3 + testMemProcUtil.setUnsecureMemRegion(0x07000000, 1024, 0x0120, 0) + + # Test case 4: open 9th window - failure + testcase = 4 + # 2 + testMemProcUtil.setUnsecureMemRegion(0x07000000, 0x10, 0x0111, 0) + # 3 + testMemProcUtil.setUnsecureMemRegion(0x07000010, 0x10, 0x0111, 0) + # 4 + testMemProcUtil.setUnsecureMemRegion(0x07000020, 0x10, 0x0111, 0) + # 5 + testMemProcUtil.setUnsecureMemRegion(0x07000030, 0x10, 0x0111, 0) + # 6 + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x10, 0x0111, 0) + # 7 + testMemProcUtil.setUnsecureMemRegion(0x07000050, 0x10, 0x0111, 0) + # 8 + testMemProcUtil.setUnsecureMemRegion(0x07000060, 0x10, 0x0111, 0) + # 9 - failed - response expected - + # SBE_PRI_USER_ERROR = 0x03 + # SBE_SEC_MAXIMUM_MEM_REGION_EXCEEDED = 0x16 + testMemProcUtil.setUnsecureMemRegion(0x07000070, 0x10, 0x0111, 0x00030016) + # Test case 5: open existing window - failure + testcase = 5 + # response expected + # SBE_PRI_USER_ERROR = 0x03 + # SBE_SEC_MEM_REGION_AMEND_ATTEMPTED = 0x17 + testMemProcUtil.setUnsecureMemRegion(0x07000060, 0x10, 0x0111, 0x00030017) + # Test case 6: close non-existing window - failure + testcase = 6 + # response expected + # SBE_PRI_USER_ERROR = 0x03 + # SBE_SEC_MEM_REGION_NOT_FOUND = 0x15 + testMemProcUtil.setUnsecureMemRegion(0x07000070, 0x10, 0x0120, 0x00030015) + # Test case 7: remove a window in between - adding it again should pass + testcase = 7 + testMemProcUtil.setUnsecureMemRegion(0x07000020, 0x10, 0x0120, 0) + testMemProcUtil.setUnsecureMemRegion(0x07000020, 0x10, 0x0111, 0) + # Test case 8: remove all and open again to validate removal + testcase = 8 + # 1 + testMemProcUtil.setUnsecureMemRegion(0x08000000, 0x2000, 0x0120, 0) + # Open Window with start address not exsting, but size spanning across + # existing window + # failed - response expected - + # SBE_PRI_USER_ERROR = 0x03 + # SBE_SEC_MEM_REGION_AMEND_ATTEMPTED = 0x17 + testMemProcUtil.setUnsecureMemRegion(0x06FFFFF0, 0x20, 0x0111, 0x00030017) + # 2 + testMemProcUtil.setUnsecureMemRegion(0x07000000, 0x10, 0x0120, 0) + # 3 + testMemProcUtil.setUnsecureMemRegion(0x07000010, 0x10, 0x0120, 0) + # 4 + testMemProcUtil.setUnsecureMemRegion(0x07000020, 0x10, 0x0120, 0) + # 5 + testMemProcUtil.setUnsecureMemRegion(0x07000030, 0x10, 0x0120, 0) + # 6 + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x10, 0x0120, 0) + # 7 + testMemProcUtil.setUnsecureMemRegion(0x07000050, 0x10, 0x0120, 0) + # 8 + testMemProcUtil.setUnsecureMemRegion(0x07000060, 0x10, 0x0120, 0) + # 1 + testMemProcUtil.setUnsecureMemRegion(0x08000000, 0x2000, 0x0112, 0) + # 2 + testMemProcUtil.setUnsecureMemRegion(0x07000000, 0x10, 0x0111, 0) + testcase = "8: new window subsuming exsiting windows" + # failed - response expected - + # SBE_PRI_USER_ERROR = 0x03 + # SBE_SEC_MEM_REGION_AMEND_ATTEMPTED = 0x17 + testMemProcUtil.setUnsecureMemRegion(0x06FFFFF0, 0x30, 0x0111, 0x00030017) + testcase = "8" + # 3 + testMemProcUtil.setUnsecureMemRegion(0x07000010, 0x10, 0x0111, 0) + # 4 + testMemProcUtil.setUnsecureMemRegion(0x07000020, 0x10, 0x0111, 0) + # 5 + testMemProcUtil.setUnsecureMemRegion(0x07000030, 0x10, 0x0111, 0) + # 6 + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x10, 0x0111, 0) + # 7 + testMemProcUtil.setUnsecureMemRegion(0x07000050, 0x10, 0x0111, 0) + # 8 + testMemProcUtil.setUnsecureMemRegion(0x07000060, 0x10, 0x0111, 0) + # 9 - failed - response expected - + # SBE_PRI_USER_ERROR = 0x03 + # SBE_SEC_MAXIMUM_MEM_REGION_EXCEEDED = 0x16 + testMemProcUtil.setUnsecureMemRegion(0x07000070, 0x10, 0x0111, 0x00030016) + + # Cleanup - close all the windows open except the one for mem testcases + # 2 + testMemProcUtil.setUnsecureMemRegion(0x07000000, 0x10, 0x0120, 0) + # 3 + testMemProcUtil.setUnsecureMemRegion(0x07000010, 0x10, 0x0120, 0) + # 4 + testMemProcUtil.setUnsecureMemRegion(0x07000020, 0x10, 0x0120, 0) + # 5 + testMemProcUtil.setUnsecureMemRegion(0x07000030, 0x10, 0x0120, 0) + # 6 + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x10, 0x0120, 0) + # 7 + testMemProcUtil.setUnsecureMemRegion(0x07000050, 0x10, 0x0120, 0) + # 8 + testMemProcUtil.setUnsecureMemRegion(0x07000060, 0x10, 0x0120, 0) + + # Test case 9: access memory in unopened window - ADU + testcase = 9 + testMemProcUtil.getmem_failure(0x07000060, 0x40, 0xA5, 0x00050014) + # Test case 10: access memory in unopened window - PBA + testcase = 10 + testMemProcUtil.getmem_failure(0x07000080, 0x80, 0x02, 0x00050014) + + # Test case 11: access memory spanning across two windows + testcase = 11 + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x40, 0x0111, 0) + testUtil.runCycles(100000) + testMemProcUtil.setUnsecureMemRegion(0x07000080, 0x40, 0x0111, 0) + testUtil.runCycles(100000) + testMemProcUtil.setUnsecureMemRegion(0x070000C0, 0x40, 0x0111, 0) + testUtil.runCycles(1000000) + # start and end on edges + testMemProcUtil.getmem(0x07000040, 0x80, 0xA5) + testUtil.runCycles(100000) + # start in between and end on edge + testMemProcUtil.getmem(0x07000060, 0x60, 0xA5) + testUtil.runCycles(100000) + # start on edge and end in between + testMemProcUtil.getmem(0x07000040, 0x60, 0xA5) + testUtil.runCycles(100000) + # start on edge and end in between - 3rd window + testMemProcUtil.getmem(0x07000040, 0xA0, 0xA5) + testUtil.runCycles(100000) + + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x40, 0x0120, 0) + testUtil.runCycles(100000) + testMemProcUtil.setUnsecureMemRegion(0x07000080, 0x40, 0x0120, 0) + testUtil.runCycles(100000) + testMemProcUtil.setUnsecureMemRegion(0x070000C0, 0x40, 0x0120, 0) + testUtil.runCycles(100000) + + # Test case 12: read access in read-write window - ADU + testcase = 12 + testMemProcUtil.setUnsecureMemRegion(0x07000080, 128, 0x0112, 0) + testMemProcUtil.getmem(0x07000080, 128, 0xA5) + testMemProcUtil.setUnsecureMemRegion(0x07000080, 128, 0x0120, 0) + # Test case 13: read access in read-write window - PBA + testcase = 13 + testMemProcUtil.getmem(0x08000080, 128, 0x02) + + # Test case 14: write access in read-only window - ADU + testcase = 14 + testMemProcUtil.setUnsecureMemRegion(0x07000080, 128, 0x0111, 0) + data = os.urandom(8) + data = [ord(c) for c in data] + testMemProcUtil.putmem_failure(0x07000080, data, 0xA5, 0x00050014) + # Test case 15: write access in read-only window - PBA + testcase = 15 + data = os.urandom(128) + data = [ord(c) for c in data] + testMemProcUtil.putmem_failure(0x07000080, data, 0x02, 0x00050014) + testMemProcUtil.setUnsecureMemRegion(0x07000080, 128, 0x0120, 0) + # Test case 16: access memory for which a partial window is open + testcase = 16 + testUtil.runCycles(1000000) + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x30, 0x0111, 0) + # start in between and end outside + testUtil.runCycles(1000000) + testMemProcUtil.getmem_failure(0x07000060, 0x40, 0xA5, 0x00050014) + # start on edge and end outside + testUtil.runCycles(1000000) + testMemProcUtil.getmem_failure(0x07000040, 0x40, 0xA5, 0x00050014) + # start and end within + testUtil.runCycles(1000000) + testMemProcUtil.getmem(0x07000050, 0x10, 0xA5) + testMemProcUtil.setUnsecureMemRegion(0x07000040, 0x30, 0x0120, 0) + except: + print "FAILED Test Case:"+str(testcase) + raise Exception('Failure') +#------------------------------------------------- +# Calling all test code +#------------------------------------------------- +main() + +if err: + print ("\nTest Suite completed with error(s)") + #sys.exit(1) +else: + print ("\nTest Suite completed with no errors") + #sys.exit(0); diff --git a/src/test/testcases/testUnsecureMemRegions.xml b/src/test/testcases/testUnsecureMemRegions.xml new file mode 100644 index 00000000..588cf358 --- /dev/null +++ b/src/test/testcases/testUnsecureMemRegions.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + run-python-file targets/p9_nimbus/sbeTest/testUnsecureMemRegions.py + yes + + diff --git a/src/test/testcases/testUnsecureMemRegionsClose.py b/src/test/testcases/testUnsecureMemRegionsClose.py deleted file mode 100644 index 3d7b04b4..00000000 --- a/src/test/testcases/testUnsecureMemRegionsClose.py +++ /dev/null @@ -1,53 +0,0 @@ -# IBM_PROLOG_BEGIN_TAG -# This is an automatically generated prolog. -# -# $Source: src/test/testcases/testUnsecureMemRegionsClose.py $ -# -# OpenPOWER sbe Project -# -# Contributors Listed Below - COPYRIGHT 2017 -# -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. -# -# IBM_PROLOG_END_TAG -import sys -import os -import struct -sys.path.append("targets/p9_nimbus/sbeTest" ) -import testUtil -import testMemUtil as testMemProcUtil -err = False - -# MAIN Test Run Starts Here... -#------------------------------------------------- -def main(): - testUtil.runCycles( 10000000 ) - - # Test case 1: close RW mem region - success - # This region is kept closed after mem testcases - it is opened by - # testUnsecureMemRegionsOpen.py - testMemProcUtil.setUnsecureMemRegion(0x08000000, 1024, 0x0120, 0) - print ("Success - setUnsecureMemRegion - close RW") - -#------------------------------------------------- -# Calling all test code -#------------------------------------------------- -main() - -if err: - print ("\nTest Suite completed with error(s)") - #sys.exit(1) -else: - print ("\nTest Suite completed with no errors") - #sys.exit(0); diff --git a/src/test/testcases/testUnsecureMemRegionsClose.xml b/src/test/testcases/testUnsecureMemRegionsClose.xml deleted file mode 100644 index 925b108e..00000000 --- a/src/test/testcases/testUnsecureMemRegionsClose.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - run-python-file targets/p9_nimbus/sbeTest/testUnsecureMemRegionsClose.py - yes - - diff --git a/src/test/testcases/testUnsecureMemRegionsOpen.py b/src/test/testcases/testUnsecureMemRegionsOpen.py deleted file mode 100644 index 2f5dddde..00000000 --- a/src/test/testcases/testUnsecureMemRegionsOpen.py +++ /dev/null @@ -1,59 +0,0 @@ -# IBM_PROLOG_BEGIN_TAG -# This is an automatically generated prolog. -# -# $Source: src/test/testcases/testUnsecureMemRegionsOpen.py $ -# -# OpenPOWER sbe Project -# -# Contributors Listed Below - COPYRIGHT 2017 -# -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. See the License for the specific language governing -# permissions and limitations under the License. -# -# IBM_PROLOG_END_TAG -import sys -import os -import struct -sys.path.append("targets/p9_nimbus/sbeTest" ) -import testUtil -import testMemUtil as testMemProcUtil -err = False - -# MAIN Test Run Starts Here... -#------------------------------------------------- -def main(): - testUtil.runCycles( 10000000 ) - - # Test case 1: open RO mem region - success - testMemProcUtil.setUnsecureMemRegion(0x07000000, 1024, 0x0111, 0) - print ("Success - setUnsecureMemRegion - open RO") - # Test case 2: close RW mem region - success - # This region is kept open for mem testcases - will be closed by - # testUnsecureMemRegionsClose.py - testMemProcUtil.setUnsecureMemRegion(0x08000000, 1024, 0x0112, 0) - print ("Success - setUnsecureMemRegion - open RW") - # Test case 3: close RO mem region - success - testMemProcUtil.setUnsecureMemRegion(0x07000000, 1024, 0x0120, 0) - print ("Success - setUnsecureMemRegion - close RO") - -#------------------------------------------------- -# Calling all test code -#------------------------------------------------- -main() - -if err: - print ("\nTest Suite completed with error(s)") - #sys.exit(1) -else: - print ("\nTest Suite completed with no errors") - #sys.exit(0); diff --git a/src/test/testcases/testUnsecureMemRegionsOpen.xml b/src/test/testcases/testUnsecureMemRegionsOpen.xml deleted file mode 100644 index 010f4779..00000000 --- a/src/test/testcases/testUnsecureMemRegionsOpen.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - run-python-file targets/p9_nimbus/sbeTest/testUnsecureMemRegionsOpen.py - yes - - -- cgit v1.2.1