IO: Handle case where ISA Fake device is being used as a fake memory.
authorAli Saidi <Ali.Saidi@ARM.com>
Sun, 10 Jul 2011 17:56:08 +0000 (12:56 -0500)
committerAli Saidi <Ali.Saidi@ARM.com>
Sun, 10 Jul 2011 17:56:08 +0000 (12:56 -0500)
src/dev/Device.py
src/dev/arm/RealView.py
src/dev/isa_fake.cc

index 4babffa18803476e9ce0c425ab45893a35657769..bf43449b550b868eae56b56506e5881c4f276c90 100644 (file)
@@ -64,6 +64,8 @@ class IsaFake(BasicPioDevice):
     ret_bad_addr = Param.Bool(False, "Return pkt status bad address on access")
     update_data = Param.Bool(False, "Update the data that is returned on writes")
     warn_access = Param.String("", "String to print when device is accessed")
+    fake_mem = Param.Bool(False,
+      "Is this device acting like a memory and thus may get a cache line sized req")
 
 class BadAddr(IsaFake):
     pio_addr = 0
index e7cba9106fb2a7f8da45e6728c85cd46bfbb8d33..c92905b4754a7543d633d96212a2629aa53d7bdf 100644 (file)
@@ -146,7 +146,8 @@ class RealViewPBX(RealView):
 
 
     l2x0_fake     = IsaFake(pio_addr=0x1f002000, pio_size=0xfff)
-    flash_fake    = IsaFake(pio_addr=0x40000000, pio_size=0x20000000)
+    flash_fake    = IsaFake(pio_addr=0x40000000, pio_size=0x20000000,
+                            fake_mem=True)
     dmac_fake     = AmbaFake(pio_addr=0x10030000)
     uart1_fake    = AmbaFake(pio_addr=0x1000a000)
     uart2_fake    = AmbaFake(pio_addr=0x1000b000)
@@ -213,7 +214,8 @@ class RealViewEB(RealView):
     kmi1   = Pl050(pio_addr=0x10007000, int_num=21, is_mouse=True)
 
     l2x0_fake     = IsaFake(pio_addr=0x1f002000, pio_size=0xfff, warn_access="1")
-    flash_fake    = IsaFake(pio_addr=0x40000000, pio_size=0x20000000-1)
+    flash_fake    = IsaFake(pio_addr=0x40000000, pio_size=0x20000000-1,
+                            fake_mem=True)
     dmac_fake     = AmbaFake(pio_addr=0x10030000)
     uart1_fake    = AmbaFake(pio_addr=0x1000a000)
     uart2_fake    = AmbaFake(pio_addr=0x1000b000)
index 21b723bdca6be5b874a9a631ac2022ce9f02c99c..98d3f9d457c87a2670e76ab9bd566726708a75b4 100644 (file)
@@ -56,8 +56,9 @@ IsaFake::IsaFake(Params *p)
 Tick
 IsaFake::read(PacketPtr pkt)
 {
-
+    pkt->allocate();
     pkt->makeAtomicResponse();
+
     if (params()->warn_access != "")
         warn("Device %s accessed by read to address %#x size=%d\n",
                 name(), pkt->getAddr(), pkt->getSize());
@@ -83,7 +84,10 @@ IsaFake::read(PacketPtr pkt)
              pkt->set(retData8);
              break;
           default:
-            panic("invalid access size!\n");
+             if (params()->fake_mem)
+                 std::memset(pkt->getPtr<uint8_t>(), 0, pkt->getSize());
+             else
+                 panic("invalid access size! Device being accessed by cache?\n");
         }
     }
     return pioDelay;