sim: remove kernel mapping check for baremetal workloads
authorDam Sunwoo <dam.sunwoo@arm.com>
Wed, 13 Aug 2014 10:57:35 +0000 (06:57 -0400)
committerDam Sunwoo <dam.sunwoo@arm.com>
Wed, 13 Aug 2014 10:57:35 +0000 (06:57 -0400)
Baremetal workloads are specified using the "kernel" parameter, but
don't always have the correct address mappings. This patch adds a
boolean flag to the system and bypasses the kernel addr mapping checks
when running in baremetal mode.

src/sim/System.py
src/sim/system.cc

index b8f15c209677fcd3abedf1787c5a7cbbd795b2ca..630cd2a84bac2adc6f914a78734461b2c7a3e9ce 100644 (file)
@@ -84,6 +84,8 @@ class System(MemObject):
     init_param = Param.UInt64(0, "numerical value to pass into simulator")
     boot_osflags = Param.String("a", "boot flags to pass to the kernel")
     kernel = Param.String("", "file that contains the kernel code")
+    kernel_addr_check = Param.Bool(True,
+        "whether to address check on kernel (disable for baremetal)")
     readfile = Param.String("", "file to read startup script from")
     symbolfile = Param.String("", "file to get the symbols from")
     load_addr_mask = Param.UInt64(0xffffffffff,
index 88d2a1625b2db90354f925e8c14e1b09a1764dd8..9cd79cac0b1be7f8e20f4458c13b5b33774eb1dd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2013 ARM Limited
+ * Copyright (c) 2011-2014 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -274,13 +274,19 @@ System::initState()
          * Load the kernel code into memory
          */
         if (params()->kernel != "")  {
-            // Validate kernel mapping before loading binary
-            if (!(isMemAddr((kernelStart & loadAddrMask) + loadAddrOffset) &&
-                     isMemAddr((kernelEnd & loadAddrMask) + loadAddrOffset))) {
-                fatal("Kernel is mapped to invalid location (not memory). "
-                      "kernelStart 0x(%x) - kernelEnd 0x(%x) %#x:%#x\n", kernelStart,
-                      kernelEnd, (kernelStart & loadAddrMask) + loadAddrOffset,
-                      (kernelEnd & loadAddrMask) + loadAddrOffset);
+            if (params()->kernel_addr_check) {
+                // Validate kernel mapping before loading binary
+                if (!(isMemAddr((kernelStart & loadAddrMask) +
+                                loadAddrOffset) &&
+                      isMemAddr((kernelEnd & loadAddrMask) +
+                                loadAddrOffset))) {
+                    fatal("Kernel is mapped to invalid location (not memory). "
+                          "kernelStart 0x(%x) - kernelEnd 0x(%x) %#x:%#x\n",
+                          kernelStart,
+                          kernelEnd, (kernelStart & loadAddrMask) +
+                          loadAddrOffset,
+                          (kernelEnd & loadAddrMask) + loadAddrOffset);
+                }
             }
             // Load program sections into memory
             kernel->loadSections(physProxy, loadAddrMask, loadAddrOffset);