mem-ruby: Add functionalReadBuffers to AbstractController
authorTiago Muck <tiago.muck@arm.com>
Thu, 2 May 2019 23:38:26 +0000 (18:38 -0500)
committerTiago Mück <tiago.muck@arm.com>
Thu, 23 Apr 2020 00:23:30 +0000 (00:23 +0000)
Forwards a functional read accesses to all message buffers, similar to
functionalWriteBuffers.

Change-Id: I54b0ba16aab84575e4c9d6102f6c519b309aa95b
Signed-off-by: Tiago Mück <tiago.muck@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22020
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Bradford Beckmann <brad.beckmann@amd.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>

src/mem/ruby/slicc_interface/AbstractController.hh
src/mem/slicc/symbols/StateMachine.py

index 1c34bdef47b5b12943a04992906f3d28510a48e9..48f9618ae8c3733fc4fd9d9e9f831f20623616bf 100644 (file)
@@ -112,6 +112,7 @@ class AbstractController : public ClockedObject, public Consumer
 
     //! These functions are used by ruby system to read/write the data blocks
     //! that exist with in the controller.
+    virtual bool functionalReadBuffers(PacketPtr&) = 0;
     virtual void functionalRead(const Addr &addr, PacketPtr) = 0;
     void functionalMemoryRead(PacketPtr);
     //! The return value indicates the number of messages written with the
index 0e336e676ad30011e315e6439d3315802d39aa4a..ee6b5fb7d5820803a0726a3e8fde7b1442f45f8b 100644 (file)
@@ -1,3 +1,15 @@
+# Copyright (c) 2019 ARM Limited
+# All rights reserved.
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
 # Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
 # Copyright (c) 2009 The Hewlett-Packard Development Company
 # Copyright (c) 2013 Advanced Micro Devices, Inc.
@@ -313,6 +325,7 @@ class $c_ident : public AbstractController
     Sequencer* getCPUSequencer() const;
     GPUCoalescer* getGPUCoalescer() const;
 
+    bool functionalReadBuffers(PacketPtr&);
     int functionalWriteBuffers(PacketPtr&);
 
     void countTransition(${ident}_State state, ${ident}_Event event);
@@ -1039,6 +1052,29 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt)
         code('''
     return num_functional_writes;
 }
+''')
+
+        # Function for functional reads to messages buffered in the controller
+        code('''
+bool
+$c_ident::functionalReadBuffers(PacketPtr& pkt)
+{
+''')
+        for var in self.objects:
+            vtype = var.type
+            if vtype.isBuffer:
+                vid = "m_%s_ptr" % var.ident
+                code('if ($vid->functionalRead(pkt)) return true;')
+
+        for var in self.config_parameters:
+            vtype = var.type_ast.type
+            if vtype.isBuffer:
+                vid = "m_%s_ptr" % var.ident
+                code('if ($vid->functionalRead(pkt)) return true;')
+
+        code('''
+    return false;
+}
 ''')
 
         code.write(path, "%s.cc" % c_ident)