changeset ad4564da49b5 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=ad4564da49b5
description:
        ARM: add support for TEEHBR access

        Thumb2 ARM kernels may access the TEEHBR via thumbee_notifier
        in arch/arm/kernel/thumbee.c.  The Linux kernel code just seems
        to be saving and restoring the register.  This patch adds support
        for the TEEHBR cp14 register.  Note, this may be a special case
        when restoring from an image that was run on a system that
        supports ThumbEE.

diffstat:

 src/arch/arm/miscregs.cc |  23 +++++++++++++++++++++++
 src/arch/arm/miscregs.hh |   2 ++
 src/sim/serialize.hh     |   2 +-
 util/cpt_upgrader.py     |  13 +++++++++++++
 4 files changed, 39 insertions(+), 1 deletions(-)

diffs (97 lines):

diff -r 48eb085bc9ab -r ad4564da49b5 src/arch/arm/miscregs.cc
--- a/src/arch/arm/miscregs.cc  Thu Oct 31 13:41:13 2013 -0500
+++ b/src/arch/arm/miscregs.cc  Thu Oct 31 13:41:13 2013 -0500
@@ -63,9 +63,32 @@
                 return NUM_MISCREGS;
             }
           default:
+            warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
+                 crn, opc1, crm, opc2);
+            return NUM_MISCREGS;
+        }
+      case 1:
+        switch (opc1) {
+          case 6:
+            switch (crm) {
+              case 0:
+                switch (opc2) {
+                  case 0:
+                    return MISCREG_TEEHBR;
+                  default:
+                    warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], 
opc2[%d]",
+                         crn, opc1, crm, opc2);
+                    return NUM_MISCREGS;
+                }
+              default:
                 warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
                      crn, opc1, crm, opc2);
                 return NUM_MISCREGS;
+            }
+          default:
+            warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
+                 crn, opc1, crm, opc2);
+            return NUM_MISCREGS;
         }
       default:
         warn("CP14 unimplemented crn[%d], opc1[%d], crm[%d], opc2[%d]",
diff -r 48eb085bc9ab -r ad4564da49b5 src/arch/arm/miscregs.hh
--- a/src/arch/arm/miscregs.hh  Thu Oct 31 13:41:13 2013 -0500
+++ b/src/arch/arm/miscregs.hh  Thu Oct 31 13:41:13 2013 -0500
@@ -121,6 +121,7 @@
         MISCREG_DBGDEVID2,
         MISCREG_DBGDEVID1,
         MISCREG_DBGDEVID,
+        MISCREG_TEEHBR,
 
         // CP15 registers
         MISCREG_CP15_START,
@@ -288,6 +289,7 @@
         "DBGDEVID2",
         "DBGDEVID1",
         "DBGDEVID",
+        "TEEHBR",
         "sctlr", "dccisw", "dccimvac", "dccmvac",
         "contextidr", "tpidrurw", "tpidruro", "tpidrprw",
         "cp15isb", "cp15dsb", "cp15dmb", "cpacr",
diff -r 48eb085bc9ab -r ad4564da49b5 src/sim/serialize.hh
--- a/src/sim/serialize.hh      Thu Oct 31 13:41:13 2013 -0500
+++ b/src/sim/serialize.hh      Thu Oct 31 13:41:13 2013 -0500
@@ -57,7 +57,7 @@
  * SimObject shouldn't cause the version number to increase, only changes to
  * existing objects such as serializing/unserializing more state, changing 
sizes
  * of serialized arrays, etc. */
-static const uint64_t gem5CheckpointVersion = 0x0000000000000007;
+static const uint64_t gem5CheckpointVersion = 0x0000000000000008;
 
 template <class T>
 void paramOut(std::ostream &os, const std::string &name, const T &param);
diff -r 48eb085bc9ab -r ad4564da49b5 util/cpt_upgrader.py
--- a/util/cpt_upgrader.py      Thu Oct 31 13:41:13 2013 -0500
+++ b/util/cpt_upgrader.py      Thu Oct 31 13:41:13 2013 -0500
@@ -217,6 +217,18 @@
         if cpt.has_option(sec, "curSector"):
             cpt.set(sec, "dmaAborted", "false")
 
+# Version 8 of the checkpoint adds an ARM MISCREG
+def from_7(cpt):
+    if cpt.get('root','isa') == 'arm':
+        for sec in cpt.sections():
+            import re
+            # Search for all ISA sections
+            if re.search('.*sys.*\.cpu.*\.isa', sec):
+                mr = cpt.get(sec, 'miscRegs').split()
+                # Add dummy value for MISCREG_TEEHBR
+                mr.insert(51,0);
+                cpt.set(sec, 'miscRegs', ' '.join(str(x) for x in mr))
+
 
 migrations = []
 migrations.append(from_0)
@@ -226,6 +238,7 @@
 migrations.append(from_4)
 migrations.append(from_5)
 migrations.append(from_6)
+migrations.append(from_7)
 
 verbose_print = False
 
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to