changeset 0d38e56356c7 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=0d38e56356c7
description:
        arm, config: Add missing IOCache in bL config

        This patch adds an IOCache to the example bigLITTLE
        configuration. An IOCache is required for correct DMA
        transfers when we have caches in the system.

        Change-Id: Ifeddc1b360aacbb16b1393f361dd98873c834012
        Reviewed-by: Andreas Sandberg <[email protected]>

diffstat:

 configs/example/arm/devices.py      |  22 +++++++++++++++++-----
 configs/example/arm/fs_bigLITTLE.py |  16 +++++++++-------
 2 files changed, 26 insertions(+), 12 deletions(-)

diffs (82 lines):

diff -r 81db27b8869a -r 0d38e56356c7 configs/example/arm/devices.py
--- a/configs/example/arm/devices.py    Mon Dec 05 16:49:07 2016 -0500
+++ b/configs/example/arm/devices.py    Tue Dec 06 17:10:36 2016 +0000
@@ -174,7 +174,7 @@
 class SimpleSystem(LinuxArmSystem):
     cache_line_size = 64
 
-    def __init__(self, **kwargs):
+    def __init__(self, caches, mem_size, **kwargs):
         super(SimpleSystem, self).__init__(**kwargs)
 
         self.voltage_domain = VoltageDomain(voltage="1.0V")
@@ -196,8 +196,16 @@
         # CPUs->PIO
         self.iobridge = Bridge(delay='50ns')
         # Device DMA -> MEM
-        self.dmabridge = Bridge(delay='50ns',
-                                ranges=self.realview._mem_regions)
+        mem_range = self.realview._mem_regions[0]
+        mem_range_size = long(mem_range[1]) - long(mem_range[0])
+        assert mem_range_size >= long(Addr(mem_size))
+        self._mem_range = AddrRange(start=mem_range[0], size=mem_size)
+        self._caches = caches
+        if self._caches:
+            self.iocache = IOCache(addr_ranges=[self._mem_range])
+        else:
+            self.dmabridge = Bridge(delay='50ns',
+                                    ranges=[self._mem_range])
 
         self._pci_devices = 0
         self._clusters = []
@@ -212,8 +220,12 @@
         self.iobridge.master = self.iobus.slave
         self.iobridge.slave = self.membus.master
 
-        self.dmabridge.master = self.membus.slave
-        self.dmabridge.slave = self.iobus.master
+        if self._caches:
+            self.iocache.mem_side = self.membus.slave
+            self.iocache.cpu_side = self.iobus.master
+        else:
+            self.dmabridge.master = self.membus.slave
+            self.dmabridge.slave = self.iobus.master
 
         self.gic_cpu_addr = self.realview.gic.cpu_addr
         self.realview.attachOnChipIO(self.membus, self.iobridge)
diff -r 81db27b8869a -r 0d38e56356c7 configs/example/arm/fs_bigLITTLE.py
--- a/configs/example/arm/fs_bigLITTLE.py       Mon Dec 05 16:49:07 2016 -0500
+++ b/configs/example/arm/fs_bigLITTLE.py       Tue Dec 06 17:10:36 2016 +0000
@@ -79,14 +79,13 @@
                                          cpu_voltage, *cpu_config)
 
 
-def createSystem(kernel, bootscript, disks=[]):
-    sys = devices.SimpleSystem(kernel=SysPaths.binary(kernel),
+def createSystem(caches, kernel, bootscript, disks=[]):
+    sys = devices.SimpleSystem(caches, default_mem_size,
+                               kernel=SysPaths.binary(kernel),
                                readfile=bootscript,
                                machine_type="DTOnly")
 
-    mem_region = sys.realview._mem_regions[0]
-    sys.mem_ctrls = SimpleMemory(
-        range=AddrRange(start=mem_region[0], size=default_mem_size))
+    sys.mem_ctrls = SimpleMemory(range=sys._mem_range)
     sys.mem_ctrls.port = sys.membus.master
 
     sys.connect()
@@ -159,8 +158,11 @@
 
     root = Root(full_system=True)
 
-    disks = default_disk if len(options.disk) == 0 else options.disk
-    system = createSystem(options.kernel, options.bootscript, disks=disks)
+    disks = [default_disk] if len(options.disk) == 0 else options.disk
+    system = createSystem(options.caches,
+                          options.kernel,
+                          options.bootscript,
+                          disks=disks)
 
     root.system = system
     system.boot_osflags = " ".join(kernel_cmd)
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to