Giacomo Travaglini has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/44969 )

Change subject: arch-arm: Stop using the DmaPort in the TableWalker
......................................................................

arch-arm: Stop using the DmaPort in the TableWalker

Using a custom TableWalker::Port subclassing MemPort

Change-Id: I1a13779512c2862da55ef4d2dec28bf47f12eb47
Signed-off-by: Giacomo Travaglini <[email protected]>
---
M src/arch/arm/stage2_mmu.cc
M src/arch/arm/stage2_mmu.hh
M src/arch/arm/table_walker.cc
M src/arch/arm/table_walker.hh
M src/arch/arm/tlb.cc
5 files changed, 45 insertions(+), 20 deletions(-)



diff --git a/src/arch/arm/stage2_mmu.cc b/src/arch/arm/stage2_mmu.cc
index a741537..bd79ce3 100644
--- a/src/arch/arm/stage2_mmu.cc
+++ b/src/arch/arm/stage2_mmu.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, 2015 ARM Limited
+ * Copyright (c) 2012-2013, 2015, 2021 Arm Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -131,7 +131,7 @@
     }

     if (_fault == NoFault && !req->getFlags().isSet(Request::NO_ACCESS)) {
-        parent.getDMAPort().dmaAction(
+        parent.getMemPort().walk(
             MemCmd::ReadReq, req->getPaddr(), numBytes, event, data,
             tc->getCpuPtr()->clockPeriod(), req->getFlags());
     } else {
diff --git a/src/arch/arm/stage2_mmu.hh b/src/arch/arm/stage2_mmu.hh
index c416b15..8e75893 100644
--- a/src/arch/arm/stage2_mmu.hh
+++ b/src/arch/arm/stage2_mmu.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, 2015 ARM Limited
+ * Copyright (c) 2012-2013, 2015, 2021 Arm Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -39,8 +39,8 @@
 #define __ARCH_ARM_STAGE2_MMU_HH__

 #include "arch/arm/faults.hh"
+#include "arch/arm/table_walker.hh"
 #include "arch/arm/tlb.hh"
-#include "dev/dma_device.hh"
 #include "mem/request.hh"
 #include "params/ArmStage2MMU.hh"
 #include "sim/eventq.hh"
@@ -57,7 +57,7 @@
   protected:

     /** Port to issue translation requests from */
-    DmaPort port;
+    TableWalker::Port port;

     /** Request id for requests generated by this MMU */
     RequestorID requestorId;
@@ -109,7 +109,7 @@
      * is used by the two table walkers, and is exposed externally and
      * connected through the stage-one table walker.
      */
-    DmaPort& getDMAPort() { return port; }
+    TableWalker::Port& getMemPort() { return port; }

     Fault readDataUntimed(ThreadContext *tc, Addr oVAddr, Addr descAddr,
uint8_t *data, int numBytes, Request::Flags flags, bool isFunctional);
diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc
index 82a9570..2c45a5d 100644
--- a/src/arch/arm/table_walker.cc
+++ b/src/arch/arm/table_walker.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2012-2019 ARM Limited
+ * Copyright (c) 2010, 2012-2019, 2021 Arm Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -101,7 +101,7 @@
 TableWalker::setMMU(Stage2MMU *m, RequestorID requestor_id)
 {
     stage2Mmu = m;
-    port = &m->getDMAPort();
+    port = &m->getMemPort();
     requestorId = requestor_id;
 }

@@ -113,7 +113,7 @@
     fatal_if(!tlb, "Table walker must have a valid TLB\n");
 }

-Port &
+::Port &
 TableWalker::getPort(const std::string &if_name, PortID idx)
 {
     if (if_name == "port") {
@@ -142,6 +142,22 @@
 {
 }

+TableWalker::Port::Port(TableWalker *walker, System *s)
+  : MemPort(walker, s, "dma", Debug::PageTableWalker)
+{
+}
+
+void
+TableWalker::Port::walk(
+    Packet::Command cmd, Addr addr, int size, Event *event,
+    uint8_t *data, Tick delay, Request::Flags flag)
+{
+    auto state = new ReqState(cmd, addr, cacheLineSize, size,
+        data, flag, requestorId, event, delay);
+
+    sendReq(state);
+}
+
 void
 TableWalker::completeDrain()
 {
@@ -2157,8 +2173,9 @@
         }
     } else {
         if (isTiming) {
- port->dmaAction(MemCmd::ReadReq, descAddr, numBytes, event, data, - currState->tc->getCpuPtr()->clockPeriod(),flags);
+            port->walk(MemCmd::ReadReq, descAddr, numBytes, event, data,
+                       currState->tc->getCpuPtr()->clockPeriod(),flags);
+
             if (queueIndex >= 0) {
                 DPRINTF(PageTableWalker, "Adding to walker fifo: "
                         "queue size before adding: %d\n",
@@ -2167,8 +2184,8 @@
                 currState = NULL;
             }
         } else if (!currState->functional) {
- port->dmaAction(MemCmd::ReadReq, descAddr, numBytes, NULL, data, - currState->tc->getCpuPtr()->clockPeriod(), flags);
+            port->walk(MemCmd::ReadReq, descAddr, numBytes, NULL, data,
+                       currState->tc->getCpuPtr()->clockPeriod(), flags);
             (this->*doDescriptor)();
         } else {
             RequestPtr req = std::make_shared<Request>(
diff --git a/src/arch/arm/table_walker.hh b/src/arch/arm/table_walker.hh
index 4f0373a..8865086 100644
--- a/src/arch/arm/table_walker.hh
+++ b/src/arch/arm/table_walker.hh
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2016, 2019 ARM Limited
+ * Copyright (c) 2010-2016, 2019, 2021 Arm Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -44,6 +44,7 @@
 #include "arch/arm/regs/misc.hh"
 #include "arch/arm/system.hh"
 #include "arch/arm/tlb.hh"
+#include "base/mem_port.hh"
 #include "mem/request.hh"
 #include "params/ArmTableWalker.hh"
 #include "sim/clocked_object.hh"
@@ -51,8 +52,6 @@

 class ThreadContext;

-class DmaPort;
-
 namespace ArmISA {
 class Translation;
 class TLB;
@@ -854,6 +853,15 @@
         std::string name() const { return tableWalker->name(); }
     };

+    class Port : public MemPort
+    {
+      public:
+        Port(TableWalker *walker, System *s);
+
+        void walk(Packet::Command cmd, Addr addr, int size, Event *event,
+                  uint8_t *data, Tick delay, Request::Flags flag);
+    };
+
   protected:

     /** Queues of requests for all the different lookup levels */
@@ -867,7 +875,7 @@
     Stage2MMU *stage2Mmu;

     /** Port shared by the two table walkers. */
-    DmaPort* port;
+    Port* port;

     /** Requestor id assigned by the MMU. */
     RequestorID requestorId;
@@ -937,8 +945,8 @@
     DrainState drain() override;
     void drainResume() override;

-    Port &getPort(const std::string &if_name,
-                  PortID idx=InvalidPortID) override;
+    ::Port &getPort(const std::string &if_name,
+                    PortID idx=InvalidPortID) override;

     Fault walk(const RequestPtr &req, ThreadContext *tc,
                uint16_t asid, uint8_t _vmid,
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc
index bea1e16..905f41d 100644
--- a/src/arch/arm/tlb.cc
+++ b/src/arch/arm/tlb.cc
@@ -1369,7 +1369,7 @@
 Port *
 TLB::getTableWalkerPort()
 {
-    return &stage2Mmu->getDMAPort();
+    return &stage2Mmu->getMemPort();
 }

 void

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/44969
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: I1a13779512c2862da55ef4d2dec28bf47f12eb47
Gerrit-Change-Number: 44969
Gerrit-PatchSet: 1
Gerrit-Owner: Giacomo Travaglini <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
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