dev-arm: Relax size constraint on AMBA ID registers
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Fri, 10 Jul 2020 15:16:22 +0000 (16:16 +0100)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Thu, 30 Jul 2020 16:24:59 +0000 (16:24 +0000)
This patch is allowing non word sized accesses to the AMBA ID
registers.

Change-Id: I61a7163a3b4120e8dbcdbd6d9b83d33a7996f979
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31175
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/dev/arm/amba_device.cc
src/dev/arm/kmi.cc
src/dev/arm/pl011.cc
src/dev/arm/pl111.cc
src/dev/arm/rtc_pl031.cc

index 2ab2743366f59f1881218f738365e3af6796abd2..76872b197390f97529457164ccccb814a7b50b4e 100644 (file)
@@ -80,7 +80,7 @@ AmbaDevice::readId(PacketPtr pkt, uint64_t amba_id, Addr pio_addr)
     DPRINTF(AMBA, "Returning %#x for offset %#x(%d)\n",
             (amba_id >> byte) & 0xFF,
             pkt->getAddr() - pio_addr, byte);
-    assert(pkt->getSize() == 4);
-    pkt->setLE<uint32_t>((amba_id >> byte) & 0xFF);
+
+    pkt->setUintX((amba_id >> byte) & 0xFF, LittleEndianByteOrder);
     return true;
 }
index 9d991c396dec87e12c1c3e4f31a17bffd51e2799..246fedb3905fd48d4d51dae41acbe25cd5d6f81e 100644 (file)
@@ -95,7 +95,7 @@ Pl050::read(PacketPtr pkt)
       default:
         if (readId(pkt, ambaId, pioAddr)) {
             // Hack for variable size accesses
-            data = pkt->getLE<uint32_t>();
+            data = pkt->getUintX(LittleEndianByteOrder);
             break;
         }
 
index 11485b56ff049900abdedd825c1dc26efe60690d..a60276d5cdd122d6f0ba2f6b21941c414972d805 100755 (executable)
@@ -137,7 +137,7 @@ Pl011::read(PacketPtr pkt)
       default:
         if (readId(pkt, AMBA_ID, pioAddr)) {
             // Hack for variable size accesses
-            data = pkt->getLE<uint32_t>();
+            data = pkt->getUintX(LittleEndianByteOrder);
             break;
         }
 
index f2b8e508fb1e5e5e5ff129848e4603a2581157c6..27606e11d33979169f538610829809bd2552e2cb 100644 (file)
@@ -182,7 +182,7 @@ Pl111::read(PacketPtr pkt)
       default:
         if (readId(pkt, AMBA_ID, pioAddr)) {
             // Hack for variable size accesses
-            data = pkt->getLE<uint32_t>();
+            data = pkt->getUintX(LittleEndianByteOrder);
             break;
         } else if (daddr >= CrsrImage && daddr <= 0xBFC) {
             // CURSOR IMAGE
index 713d3f7f341dc7ac63c8d2be247042c4b5bb897a..b2b232249811eb1f8bbfa4135ecd2e92b2c21baa 100644 (file)
@@ -90,7 +90,7 @@ PL031::read(PacketPtr pkt)
       default:
         if (readId(pkt, ambaId, pioAddr)) {
             // Hack for variable sized access
-            data = pkt->getLE<uint32_t>();
+            data = pkt->getUintX(LittleEndianByteOrder);
             break;
         }
         panic("Tried to read PL031 at offset %#x that doesn't exist\n", daddr);