Giacomo Travaglini has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/39636 )

Change subject: configs: Do not assume single mem range in RealView
......................................................................

configs: Do not assume single mem range in RealView

The SimpleSystem was assuming a single memory range for RealView
platforms by selecting the first element of the list only:

mem_range = self.realview._mem_regions[0]

This patch is fixing this by evaluating the entire list of platform
ranges.

Change-Id: I453fff7857966076c1419b95ddb9177e51d9f8d5
Signed-off-by: Giacomo Travaglini <[email protected]>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39636
Reviewed-by: Jason Lowe-Power <[email protected]>
Maintainer: Jason Lowe-Power <[email protected]>
Tested-by: kokoro <[email protected]>
---
M configs/example/arm/devices.py
1 file changed, 25 insertions(+), 7 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/configs/example/arm/devices.py b/configs/example/arm/devices.py
index 0ab2ecd..f729fb5 100644
--- a/configs/example/arm/devices.py
+++ b/configs/example/arm/devices.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2017, 2019 ARM Limited
+# Copyright (c) 2016-2017, 2019, 2021 Arm Limited
 # All rights reserved.
 #
 # The license below extends only to copyright in the software and shall
@@ -301,14 +301,32 @@

         self.iobus = IOXBar()
         # Device DMA -> MEM
-        mem_range = self.realview._mem_regions[0]
-        assert int(mem_range.size()) >= int(Addr(mem_size))
-        self.mem_ranges = [
-            AddrRange(start=mem_range.start, size=mem_size) ]
+        self.mem_ranges = self.getMemRanges(int(Addr(mem_size)))

         self._clusters = []
         self._num_cpus = 0

+    def getMemRanges(self, mem_size):
+        """
+        Define system memory ranges. This depends on the physical
+        memory map provided by the realview platform and by the memory
+        size provided by the user (mem_size argument).
+        The method is iterating over all platform ranges until they cover
+        the entire user's memory requirements.
+        """
+        mem_ranges = []
+        for mem_range in self.realview._mem_regions:
+            size_in_range = min(mem_size, mem_range.size())
+
+            mem_ranges.append(
+                AddrRange(start=mem_range.start, size=size_in_range))
+
+            mem_size -= size_in_range
+            if mem_size == 0:
+                return mem_ranges
+
+        raise ValueError("memory size too big for platform capabilities")
+
     def numCpuClusters(self):
         return len(self._clusters)

@@ -361,10 +379,10 @@

         self._caches = caches
         if self._caches:
-            self.iocache = IOCache(addr_ranges=[self.mem_ranges[0]])
+            self.iocache = IOCache(addr_ranges=self.mem_ranges)
         else:
             self.dmabridge = Bridge(delay='50ns',
-                                    ranges=[self.mem_ranges[0]])
+                                    ranges=self.mem_ranges)

     def connect(self):
         self.iobridge.mem_side_port = self.iobus.cpu_side_ports

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/39636
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I453fff7857966076c1419b95ddb9177e51d9f8d5
Gerrit-Change-Number: 39636
Gerrit-PatchSet: 7
Gerrit-Owner: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Ciro Santilli <[email protected]>
Gerrit-Reviewer: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to