smmu_v3_slaveifc.hh revision 14064
14104Ssaidi@eecs.umich.edu/* 24104Ssaidi@eecs.umich.edu * Copyright (c) 2013, 2018-2019 ARM Limited 34104Ssaidi@eecs.umich.edu * All rights reserved 44104Ssaidi@eecs.umich.edu * 54104Ssaidi@eecs.umich.edu * The license below extends only to copyright in the software and shall 64104Ssaidi@eecs.umich.edu * not be construed as granting a license to any other intellectual 74104Ssaidi@eecs.umich.edu * property including but not limited to intellectual property relating 84104Ssaidi@eecs.umich.edu * to a hardware implementation of the functionality of the software 94104Ssaidi@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 104104Ssaidi@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 114104Ssaidi@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 124104Ssaidi@eecs.umich.edu * modified or unmodified, in source code or in binary form. 134104Ssaidi@eecs.umich.edu * 144104Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 154104Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 164104Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 174104Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 184104Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 194104Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 204104Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 214104Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 224104Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 234104Ssaidi@eecs.umich.edu * this software without specific prior written permission. 244104Ssaidi@eecs.umich.edu * 254104Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 264104Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 274104Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 284104Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 294104Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 304104Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 314104Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 324104Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 334104Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 344104Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 354104Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 364104Ssaidi@eecs.umich.edu * 374104Ssaidi@eecs.umich.edu * Authors: Stan Czerniawski 384104Ssaidi@eecs.umich.edu */ 394104Ssaidi@eecs.umich.edu 404762Snate@binkert.org#ifndef __DEV_ARM_SMMU_V3_SLAVEIFC_HH__ 414104Ssaidi@eecs.umich.edu#define __DEV_ARM_SMMU_V3_SLAVEIFC_HH__ 424104Ssaidi@eecs.umich.edu 434104Ssaidi@eecs.umich.edu#include <list> 444104Ssaidi@eecs.umich.edu 454104Ssaidi@eecs.umich.edu#include "dev/arm/smmu_v3_caches.hh" 464104Ssaidi@eecs.umich.edu#include "dev/arm/smmu_v3_defs.hh" 474104Ssaidi@eecs.umich.edu#include "dev/arm/smmu_v3_events.hh" 484104Ssaidi@eecs.umich.edu#include "dev/arm/smmu_v3_ports.hh" 494104Ssaidi@eecs.umich.edu#include "dev/arm/smmu_v3_proc.hh" 504104Ssaidi@eecs.umich.edu#include "mem/mem_object.hh" 514104Ssaidi@eecs.umich.edu#include "params/SMMUv3SlaveInterface.hh" 524104Ssaidi@eecs.umich.edu 534104Ssaidi@eecs.umich.educlass SMMUTranslationProcess; 544104Ssaidi@eecs.umich.educlass SMMUv3; 554104Ssaidi@eecs.umich.educlass SMMUSlavePort; 564104Ssaidi@eecs.umich.edu 574104Ssaidi@eecs.umich.educlass SMMUv3SlaveInterface : public MemObject 584104Ssaidi@eecs.umich.edu{ 594104Ssaidi@eecs.umich.edu protected: 604104Ssaidi@eecs.umich.edu friend class SMMUTranslationProcess; 614104Ssaidi@eecs.umich.edu 624104Ssaidi@eecs.umich.edu public: 634104Ssaidi@eecs.umich.edu SMMUv3 *smmu; 644104Ssaidi@eecs.umich.edu SMMUTLB* microTLB; 654104Ssaidi@eecs.umich.edu SMMUTLB* mainTLB; 664104Ssaidi@eecs.umich.edu 674104Ssaidi@eecs.umich.edu const bool microTLBEnable; 684104Ssaidi@eecs.umich.edu const bool mainTLBEnable; 694104Ssaidi@eecs.umich.edu 704104Ssaidi@eecs.umich.edu SMMUSemaphore slavePortSem; 714104Ssaidi@eecs.umich.edu SMMUSemaphore microTLBSem; 724104Ssaidi@eecs.umich.edu SMMUSemaphore mainTLBSem; 734104Ssaidi@eecs.umich.edu 744104Ssaidi@eecs.umich.edu const Cycles microTLBLat; 754104Ssaidi@eecs.umich.edu const Cycles mainTLBLat; 764104Ssaidi@eecs.umich.edu 774104Ssaidi@eecs.umich.edu SMMUSlavePort *slavePort; 784104Ssaidi@eecs.umich.edu SMMUATSSlavePort atsSlavePort; 794104Ssaidi@eecs.umich.edu SMMUATSMasterPort atsMasterPort; 804104Ssaidi@eecs.umich.edu 814104Ssaidi@eecs.umich.edu // in bytes 824104Ssaidi@eecs.umich.edu const unsigned portWidth; 834104Ssaidi@eecs.umich.edu 844104Ssaidi@eecs.umich.edu unsigned wrBufSlotsRemaining; 854104Ssaidi@eecs.umich.edu unsigned xlateSlotsRemaining; 864104Ssaidi@eecs.umich.edu 874104Ssaidi@eecs.umich.edu const bool prefetchEnable; 884104Ssaidi@eecs.umich.edu const bool prefetchReserveLastWay; 894104Ssaidi@eecs.umich.edu 904104Ssaidi@eecs.umich.edu std::list<SMMUTranslationProcess *> duplicateReqs; 914104Ssaidi@eecs.umich.edu SMMUSignal duplicateReqRemoved; 924104Ssaidi@eecs.umich.edu 934104Ssaidi@eecs.umich.edu std::list<SMMUTranslationProcess *> dependentReads[SMMU_MAX_TRANS_ID]; 944104Ssaidi@eecs.umich.edu std::list<SMMUTranslationProcess *> dependentWrites[SMMU_MAX_TRANS_ID]; 954104Ssaidi@eecs.umich.edu SMMUSignal dependentReqRemoved; 964104Ssaidi@eecs.umich.edu 974104Ssaidi@eecs.umich.edu // Receiving translation requests from the master device 984104Ssaidi@eecs.umich.edu Tick recvAtomic(PacketPtr pkt); 994104Ssaidi@eecs.umich.edu bool recvTimingReq(PacketPtr pkt); 1004104Ssaidi@eecs.umich.edu void schedTimingResp(PacketPtr pkt); 1014104Ssaidi@eecs.umich.edu 1024104Ssaidi@eecs.umich.edu Tick atsSlaveRecvAtomic(PacketPtr pkt); 1034104Ssaidi@eecs.umich.edu bool atsSlaveRecvTimingReq(PacketPtr pkt); 1044104Ssaidi@eecs.umich.edu bool atsMasterRecvTimingResp(PacketPtr pkt); 1054104Ssaidi@eecs.umich.edu void schedAtsTimingResp(PacketPtr pkt); 1064104Ssaidi@eecs.umich.edu 1074104Ssaidi@eecs.umich.edu void scheduleDeviceRetry(); 1084104Ssaidi@eecs.umich.edu void sendDeviceRetry(); 1094104Ssaidi@eecs.umich.edu void atsSendDeviceRetry(); 1104104Ssaidi@eecs.umich.edu 1114104Ssaidi@eecs.umich.edu bool deviceNeedsRetry; 1124104Ssaidi@eecs.umich.edu bool atsDeviceNeedsRetry; 1134104Ssaidi@eecs.umich.edu 1144104Ssaidi@eecs.umich.edu SMMUDeviceRetryEvent sendDeviceRetryEvent; 1154104Ssaidi@eecs.umich.edu EventWrapper< 1164104Ssaidi@eecs.umich.edu SMMUv3SlaveInterface, 1174104Ssaidi@eecs.umich.edu &SMMUv3SlaveInterface::atsSendDeviceRetry> atsSendDeviceRetryEvent; 1184104Ssaidi@eecs.umich.edu 1194104Ssaidi@eecs.umich.edu Port& getPort(const std::string &name, PortID id); 1204104Ssaidi@eecs.umich.edu 1214104Ssaidi@eecs.umich.edu public: 1224104Ssaidi@eecs.umich.edu SMMUv3SlaveInterface(const SMMUv3SlaveInterfaceParams *p); 1234104Ssaidi@eecs.umich.edu 1244104Ssaidi@eecs.umich.edu ~SMMUv3SlaveInterface() 1254762Snate@binkert.org { 1264762Snate@binkert.org delete microTLB; 1274762Snate@binkert.org delete mainTLB; 1284104Ssaidi@eecs.umich.edu } 1294762Snate@binkert.org 1304762Snate@binkert.org const SMMUv3SlaveInterfaceParams * 1314104Ssaidi@eecs.umich.edu params() const 1324762Snate@binkert.org { 1334762Snate@binkert.org return static_cast<const SMMUv3SlaveInterfaceParams *>(_params); 1344104Ssaidi@eecs.umich.edu } 13511347Sandreas.hansson@arm.com 13611347Sandreas.hansson@arm.com DrainState drain() override; 1374104Ssaidi@eecs.umich.edu 1384104Ssaidi@eecs.umich.edu void setSMMU(SMMUv3 *_smmu) { smmu = _smmu; } 1394762Snate@binkert.org void sendRange(); 1404762Snate@binkert.org}; 1414104Ssaidi@eecs.umich.edu 14211347Sandreas.hansson@arm.com#endif /* __DEV_ARM_SMMU_V3_SLAVEIFC_HH__ */ 1434104Ssaidi@eecs.umich.edu