summaryrefslogtreecommitdiff
path: root/src/mem/qos/QoSPolicy.py
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2018-05-10 17:07:42 +0100
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2018-09-07 13:16:20 +0000
commit70718a9feed127d42f8aa3780894bb599c1f1fd1 (patch)
tree0d165296c3201b8497e11a7d3bfa6f8f1460a622 /src/mem/qos/QoSPolicy.py
parentaa103566d6413bfdbfab7177734f0894a751a856 (diff)
downloadgem5-70718a9feed127d42f8aa3780894bb599c1f1fd1.tar.xz
mem: Implement base QoS Policies.
This patch implements a base fixed priority policy and an ideal turnaround policy for the QoS memory controller. Change-Id: I38ce16f845fc0ec86d6fc4cc5dc5406f213a465e Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/11972 Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/qos/QoSPolicy.py')
-rw-r--r--src/mem/qos/QoSPolicy.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/mem/qos/QoSPolicy.py b/src/mem/qos/QoSPolicy.py
index f2218a725..9ccd98562 100644
--- a/src/mem/qos/QoSPolicy.py
+++ b/src/mem/qos/QoSPolicy.py
@@ -36,6 +36,7 @@
# Authors: Giacomo Travaglini
from m5.SimObject import *
+from m5.params import *
# QoS scheduler policy used to serve incoming transaction
class QoSPolicy(SimObject):
@@ -43,3 +44,40 @@ class QoSPolicy(SimObject):
abstract = True
cxx_header = "mem/qos/policy.hh"
cxx_class = 'QoS::Policy'
+
+class QoSFixedPriorityPolicy(QoSPolicy):
+ type = 'QoSFixedPriorityPolicy'
+ cxx_header = "mem/qos/policy_fixed_prio.hh"
+ cxx_class = 'QoS::FixedPriorityPolicy'
+
+ cxx_exports = [
+ PyBindMethod('initMasterName'),
+ PyBindMethod('initMasterObj'),
+ ]
+
+ _mpriorities = None
+
+ def setMasterPriority(self, master, priority):
+ if not self._mpriorities:
+ self._mpriorities = []
+
+ self._mpriorities.append([master, priority])
+
+ def init(self):
+ if not self._mpriorities:
+ print("Error, use setMasterPriority to init masters/priorities\n");
+ exit(1)
+ else:
+ for mprio in self._mpriorities:
+ master = mprio[0]
+ priority = mprio[1]
+ if isinstance(master, basestring):
+ self.getCCObject().initMasterName(
+ master, int(priority))
+ else:
+ self.getCCObject().initMasterObj(
+ master.getCCObject(), priority)
+
+ # default fixed priority value for non-listed Masters
+ qos_fixed_prio_default_prio = Param.UInt8(0,
+ "Default priority for non-listed Masters")