cache: Allow main memory to be at disjoint address ranges.
authorAli Saidi <Ali.Saidi@ARM.com>
Fri, 9 Mar 2012 14:59:25 +0000 (09:59 -0500)
committerAli Saidi <Ali.Saidi@ARM.com>
Fri, 9 Mar 2012 14:59:25 +0000 (09:59 -0500)
21 files changed:
configs/example/fs.py
src/mem/cache/BaseCache.py
src/mem/cache/base.cc
src/mem/cache/base.hh
src/mem/cache/cache_impl.hh
tests/configs/pc-o3-timing.py
tests/configs/pc-simple-atomic.py
tests/configs/pc-simple-timing.py
tests/configs/realview-o3-dual.py
tests/configs/realview-o3.py
tests/configs/realview-simple-atomic-dual.py
tests/configs/realview-simple-atomic.py
tests/configs/realview-simple-timing-dual.py
tests/configs/realview-simple-timing.py
tests/configs/tsunami-inorder.py
tests/configs/tsunami-o3-dual.py
tests/configs/tsunami-o3.py
tests/configs/tsunami-simple-atomic-dual.py
tests/configs/tsunami-simple-atomic.py
tests/configs/tsunami-simple-timing-dual.py
tests/configs/tsunami-simple-timing.py

index 7a0759e4784f8ce5e0099c571d23d12b97d0cb0a..19c1bd81f5fe1a644c1337d101cbdda674c09dda 100644 (file)
@@ -159,7 +159,7 @@ if bm[0]:
 else:
     mem_size = SysConfig().mem()
 if options.caches or options.l2cache:
-    test_sys.iocache = IOCache(addr_range=test_sys.physmem.range)
+    test_sys.iocache = IOCache(addr_ranges=[mem_size])
     test_sys.iocache.cpu_side = test_sys.iobus.master
     test_sys.iocache.mem_side = test_sys.membus.slave
 else:
index adc48a461aeeefa0577af2d1a4f74d6c519feaf7..83b3c70c2f8cff29c80e1719467da1d056046909 100644 (file)
@@ -60,5 +60,5 @@ class BaseCache(MemObject):
     prefetcher = Param.BasePrefetcher(NULL,"Prefetcher attached to cache")
     cpu_side = SlavePort("Port on side closer to CPU")
     mem_side = MasterPort("Port on side closer to MEM")
-    addr_range = Param.AddrRange(AllMemory, "The address range for the CPU-side port")
+    addr_ranges = VectorParam.AddrRange([AllMemory], "The address range for the CPU-side port")
     system = Param.System(Parent.any, "System we belong to")
index c7c213cc62ec51cc888cee13b6e09dcc60bae402..fb27576163e809e81ec592b088f303b454c977fe 100644 (file)
@@ -83,7 +83,7 @@ BaseCache::BaseCache(const Params *p)
       noTargetMSHR(NULL),
       missCount(p->max_miss_count),
       drainEvent(NULL),
-      addrRange(p->addr_range),
+      addrRanges(p->addr_ranges.begin(), p->addr_ranges.end()),
       system(p->system)
 {
 }
index e522bc0c960b4d6ec1f85bfedb86c733c429d96c..2a79fb354556082df5de530a2880824c5c1e6d86 100644 (file)
@@ -269,7 +269,7 @@ class BaseCache : public MemObject
     /**
      * The address range to which the cache responds on the CPU side.
      * Normally this is all possible memory addresses. */
-    Range<Addr> addrRange;
+    AddrRangeList addrRanges;
 
   public:
     /** System we are currently operating in. */
@@ -439,7 +439,7 @@ class BaseCache : public MemObject
     Addr blockAlign(Addr addr) const { return (addr & ~(Addr(blkSize - 1))); }
 
 
-    const Range<Addr> &getAddrRange() const { return addrRange; }
+    const AddrRangeList &getAddrRanges() const { return addrRanges; }
 
     MSHR *allocateMissBuffer(PacketPtr pkt, Tick time, bool requestBus)
     {
index 024ae32973e300155755a206d36dd13a3363dfe6..f6efc3fb874dfdf6342f31909f00a8174aede808 100644 (file)
@@ -1556,9 +1556,7 @@ template<class TagStore>
 AddrRangeList
 Cache<TagStore>::CpuSidePort::getAddrRanges()
 {
-    AddrRangeList ranges;
-    ranges.push_back(cache->getAddrRange());
-    return ranges;
+    return cache->getAddrRanges();
 }
 
 template<class TagStore>
index f358120857f2b36770838c0665751b618892476f..0b8b9381faeaa31f75efe2b54de491a6bd82cd73 100644 (file)
@@ -77,7 +77,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range = AddrRange(0, size=mem_size)
+    addr_ranges = [AddrRange(0, size=mem_size)]
     forward_snoops = False
 
 #cpu
@@ -86,7 +86,7 @@ cpu = DerivO3CPU(cpu_id=0)
 mdesc = SysConfig(disk = 'linux-x86.img')
 system = FSConfig.makeLinuxX86System('timing', mdesc=mdesc)
 system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9')
-system.iocache = IOCache(addr_range=mem_size)
+system.iocache = IOCache()
 system.iocache.cpu_side = system.iobus.master
 system.iocache.mem_side = system.membus.slave
 
index b78cb94952344cc9e557d0c5f40a1f837d76fd7e..77cd1319fb2a9453193688514690cfddb8ff2056 100644 (file)
@@ -78,7 +78,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range = AddrRange(0, size=mem_size)
+    addr_ranges = [AddrRange(0, size=mem_size)]
     forward_snoops = False
     is_top_level = True
 
@@ -88,7 +88,7 @@ cpu = AtomicSimpleCPU(cpu_id=0)
 mdesc = SysConfig(disk = 'linux-x86.img')
 system = FSConfig.makeLinuxX86System('atomic', mdesc=mdesc)
 system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9')
-system.iocache = IOCache(addr_range=mem_size)
+system.iocache = IOCache()
 system.iocache.cpu_side = system.iobus.master
 system.iocache.mem_side = system.membus.slave
 
index b5117f2fecb9019cd8bfc63d396682769aa17b40..fbe6b4c4ff6503d27c292d728b37e17e491cb7ef 100644 (file)
@@ -78,7 +78,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range = AddrRange(0, size=mem_size)
+    addr_ranges = [AddrRange(0, size=mem_size)]
     forward_snoops = False
 
 #cpu
@@ -91,7 +91,7 @@ system.kernel = FSConfig.binary('x86_64-vmlinux-2.6.22.9')
 system.cpu = cpu
 #create the l1/l2 bus
 system.toL2Bus = Bus()
-system.iocache = IOCache(addr_range=mem_size)
+system.iocache = IOCache()
 system.iocache.cpu_side = system.iobus.master
 system.iocache.mem_side = system.membus.slave
 
index 2f06ab2d7ef8dda91132246b28e0c13443480cfe..71b4f06dd6303e2383ecb980b791dfede6d56fac 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='256MB')
+    addr_ranges = [AddrRange(0, size='256MB')]
     forward_snoops = False
 
 #cpu
index 795bd534ab307c9a3eaaefb0ce131c04e95aa57f..db64ccc602c9b2f00070c5588ffd73b2b4c2a5b7 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='256MB')
+    addr_ranges = [AddrRange(0, size='256MB')]
     forward_snoops = False
 
 #cpu
index daee4f4786bcb0ad1c2371408e180ebb66db01a1..eef5e90c5d649fdf9bde399de37481e667b84c86 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='256MB')
+    addr_ranges = [AddrRange(0, size='256MB')]
     forward_snoops = False
 
 #cpu
index f6377d21d53d1d96cb804dad95d67fdf49cb7a79..0544c98b64227b73386a6809a3148f58bb1e444c 100644 (file)
@@ -63,7 +63,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='256MB')
+    addr_ranges = [AddrRange(0, size='256MB')]
     forward_snoops = False
 
 #cpu
index c610bc4329cc567b3e880fac7813ebc7878d18f3..edc2b7a9579294364d6df241d9fbcd19b3f52f50 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='256MB')
+    addr_ranges = [AddrRange(0, size='256MB')]
     forward_snoops = False
 
 #cpu
index a55358306e9ae3060ceff996b1e4004509e0684e..6e539624bbad152c4f5a352e8b64c28e232c200e 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='256MB')
+    addr_ranges = [AddrRange(0, size='256MB')]
     forward_snoops = False
 
 #cpu
index 0c3323f62c076b9010d8d8058f9c645ea6223308..41df45fab2b19ea97247e244e1f066c5997f3fd5 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True
 
index 603664d535031271a9d6df75e9ecd2da396f7133..d50a45b070b877823f1ccdc922c1e6dc1317be14 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True
 
index ce64c497f188f7601277c99ed5d705944fc6fadf..c5a3236a58dc323031e2c53b9095fceca3c955f6 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True
 
index f242c80ccda7c7673ec2ff11c0a79037df65051d..57672b0e181b838e23adfe92dceee9655a3ce09d 100644 (file)
@@ -63,7 +63,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True
 
index 456dc5da66c6750eeb0067d425e4867717438c29..8a03760e33c43a93dc6d46e4dbcfcee449d22b7e 100644 (file)
@@ -63,7 +63,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True
 
index 56daf0dd3587240012702818bf2d969d1034abbb..1b905a8d05f69c628f4d7e40fd7ba0d013161e03 100644 (file)
@@ -63,7 +63,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True
 
index ef055e38ea4f1f867e166c63c506ab0a3d1b3890..e4920ddf42d352186a73d37e1cd3295e52932659 100644 (file)
@@ -64,7 +64,7 @@ class IOCache(BaseCache):
     mshrs = 20
     size = '1kB'
     tgts_per_mshr = 12
-    addr_range=AddrRange(0, size='8GB')
+    addr_ranges = [AddrRange(0, size='8GB')]
     forward_snoops = False
     is_top_level = True