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

Change subject: dev-arm, fastmodel: Rewrite Gic.interruptCells
......................................................................

dev-arm, fastmodel: Rewrite Gic.interruptCells

The affinity number (aka PPI partition) is used differently
in GICv2 and GICv3. In GICv2 it is ORed to the triggering type
(3rd cell), whereas it is encoded in the 4th cell in GICv3

Change-Id: I36e45d4ec5fb39befa1a271b531dfed2d8e56c10
Signed-off-by: Giacomo Travaglini <[email protected]>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36235
Reviewed-by: Andreas Sandberg <[email protected]>
Maintainer: Andreas Sandberg <[email protected]>
Tested-by: kokoro <[email protected]>
---
M src/arch/arm/fastmodel/GIC/FastModelGIC.py
M src/dev/arm/Gic.py
2 files changed, 21 insertions(+), 8 deletions(-)

Approvals:
  Andreas Sandberg: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/arch/arm/fastmodel/GIC/FastModelGIC.py b/src/arch/arm/fastmodel/GIC/FastModelGIC.py
index ddcf728..3298be9 100644
--- a/src/arch/arm/fastmodel/GIC/FastModelGIC.py
+++ b/src/arch/arm/fastmodel/GIC/FastModelGIC.py
@@ -514,7 +514,7 @@

         return ranges

-    def interruptCells(self, int_type, int_num, int_flag):
+ def interruptCells(self, int_type, int_num, int_trigger, int_affinity=0):
         """
         Interupt cells generation helper:
         Following specifications described in
@@ -525,7 +525,7 @@
         assert len(prop) >= 3
         prop[0] = int_type
         prop[1] = int_num
-        prop[2] = int_flag
+        prop[2] = int_trigger
         return prop

     def generateDeviceTree(self, state):
@@ -552,7 +552,7 @@
         node.append(FdtPropertyWords("reg", regs))
         # Maintenance interrupt (PPI 25).
         node.append(FdtPropertyWords("interrupts",
-            self.interruptCells(1, 9, 0xf04)))
+            self.interruptCells(1, 9, 0x4)))

         node.appendPhandle(self)

diff --git a/src/dev/arm/Gic.py b/src/dev/arm/Gic.py
index 17a553f..987a6e0 100644
--- a/src/dev/arm/Gic.py
+++ b/src/dev/arm/Gic.py
@@ -60,7 +60,7 @@
     gicv_iidr = Param.UInt32(0,
         "VM CPU Interface Identification Register")

-    def interruptCells(self, int_type, int_num, int_flag):
+ def interruptCells(self, int_type, int_num, int_trigger, partition=None):
         """
         Interupt cells generation helper:
         Following specifications described in
@@ -68,7 +68,16 @@
         Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt
         """
         assert self._state.interrupt_cells == 3
-        return [ int_type, int_num, int_flag ]
+
+        # Check for affinity in case of PPI. If there is no PPI
+        # partitioning, set the affinity to target all CPUs
+        # (affinity = 0xf00)
+        if partition is None and int_type == ArmPPI._LINUX_ID:
+            affinity = 0xf00
+        else:
+            affinity = 0
+
+        return [ int_type, int_num, affinity | int_trigger ]

 class ArmInterruptType(ScopedEnum):
     """
@@ -99,11 +108,15 @@
     cxx_header = "dev/arm/base_gic.hh"
     cxx_class = "ArmSPIGen"

+    _LINUX_ID = 0
+
 class ArmPPI(ArmInterruptPin):
     type = 'ArmPPI'
     cxx_header = "dev/arm/base_gic.hh"
     cxx_class = "ArmPPIGen"

+    _LINUX_ID = 1
+
 class GicV2(BaseGic):
     type = 'GicV2'
     cxx_header = "dev/arm/gic_v2.hh"
@@ -237,7 +250,7 @@

     gicv4 = Param.Bool(True, "GICv4 extension available")

-    def interruptCells(self, int_type, int_num, int_flag):
+ def interruptCells(self, int_type, int_num, int_trigger, partition=None):
         """
         Interupt cells generation helper:
         Following specifications described in
@@ -248,7 +261,7 @@
         assert len(prop) >= 3
         prop[0] = int_type
         prop[1] = int_num
-        prop[2] = int_flag
+        prop[2] = int_trigger
         return prop

     def generateDeviceTree(self, state):
@@ -272,7 +285,7 @@

         node.append(FdtPropertyWords("reg", regs))
         node.append(FdtPropertyWords("interrupts",
-            self.interruptCells(1, int(self.maint_int.num)-16, 0xf04)))
+            self.interruptCells(1, int(self.maint_int.num)-16, 0x4)))

         node.appendPhandle(self)


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/36235
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: I36e45d4ec5fb39befa1a271b531dfed2d8e56c10
Gerrit-Change-Number: 36235
Gerrit-PatchSet: 5
Gerrit-Owner: Giacomo Travaglini <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Giacomo Travaglini <[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