diff options
author | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-05-10 17:07:42 +0100 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2018-09-07 13:16:20 +0000 |
commit | 70718a9feed127d42f8aa3780894bb599c1f1fd1 (patch) | |
tree | 0d165296c3201b8497e11a7d3bfa6f8f1460a622 /src/mem/qos/QoSPolicy.py | |
parent | aa103566d6413bfdbfab7177734f0894a751a856 (diff) | |
download | gem5-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.py | 38 |
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") |