1# Copyright (c) 2018 ARM Limited 2# All rights reserved. 3# 4# The license below extends only to copyright in the software and shall 5# not be construed as granting a license to any other intellectual 6# property including but not limited to intellectual property relating 7# to a hardware implementation of the functionality of the software 8# licensed hereunder. You may use the software subject to the license 9# terms below provided that you ensure that this notice is replicated 10# unmodified and in its entirety in all distributions of the software, 11# modified or unmodified, in source code or in binary form. 12# 13# Redistribution and use in source and binary forms, with or without 14# modification, are permitted provided that the following conditions are 15# met: redistributions of source code must retain the above copyright 16# notice, this list of conditions and the following disclaimer; 17# redistributions in binary form must reproduce the above copyright 18# notice, this list of conditions and the following disclaimer in the 19# documentation and/or other materials provided with the distribution; 20# neither the name of the copyright holders nor the names of its 21# contributors may be used to endorse or promote products derived from 22# this software without specific prior written permission. 23# 24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 25# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 26# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 27# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 28# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 30# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 31# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 32# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 33# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 34# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35# 36# Authors: Matteo Andreozzi 37 38from m5.params import * 39from m5.objects.AbstractMemory import AbstractMemory 40from m5.objects.QoSTurnaround import * 41 42# QoS Queue Selection policy used to select packets among same-QoS queues 43class QoSQPolicy(Enum): vals = ["fifo", "lifo", "lrg"] 44 45class QoSMemCtrl(AbstractMemory): 46 type = 'QoSMemCtrl' 47 cxx_header = "mem/qos/mem_ctrl.hh" 48 cxx_class = 'QoS::MemCtrl' 49 abstract = True 50 51 ##### QoS support parameters #### 52 53 # Number of priorities in the system 54 qos_priorities = Param.Unsigned(1, "QoS priorities") 55 56 # QoS scheduler policy: tags request with QoS priority value 57 qos_policy = Param.QoSPolicy(NULL, 58 "Memory Controller Requests QoS arbitration policy") 59 60 # Select QoS driven turnaround policy 61 # (direction switch triggered by highest priority buffer content) 62 qos_turnaround_policy = Param.QoSTurnaroundPolicy(NULL, 63 "Selects QoS driven turnaround policy") 64 65 # QoS Queue Select policy: selects packets among same priority level 66 # (only supported in QoSMemSinkCtrl) 67 qos_q_policy = Param.QoSQPolicy('fifo', 68 "Memory Controller Requests same-QoS selection policy") 69 70 # flag to select QoS syncronised scheduling 71 # (calls the scheduler on all masters at every packet arrival) 72 qos_syncro_scheduler = Param.Bool(False, 73 "Enables QoS syncronized scheduling") 74 75 # flag to enable QoS priority escalation 76 qos_priority_escalation = Param.Bool(False, 77 "Enables QoS priority escalation") 78 79 # Master ID to be mapped to service parameters in QoS schedulers 80 qos_masters = VectorParam.String(['']* 16, 81 "Master Names to be mapped to service parameters in QoS scheduler") 82