tlbi_op.hh revision 13882
112605Sgiacomo.travaglini@arm.com/* 213882Sgiacomo.travaglini@arm.com * Copyright (c) 2018-2019 ARM Limited 312605Sgiacomo.travaglini@arm.com * All rights reserved 412605Sgiacomo.travaglini@arm.com * 512605Sgiacomo.travaglini@arm.com * The license below extends only to copyright in the software and shall 612605Sgiacomo.travaglini@arm.com * not be construed as granting a license to any other intellectual 712605Sgiacomo.travaglini@arm.com * property including but not limited to intellectual property relating 812605Sgiacomo.travaglini@arm.com * to a hardware implementation of the functionality of the software 912605Sgiacomo.travaglini@arm.com * licensed hereunder. You may use the software subject to the license 1012605Sgiacomo.travaglini@arm.com * terms below provided that you ensure that this notice is replicated 1112605Sgiacomo.travaglini@arm.com * unmodified and in its entirety in all distributions of the software, 1212605Sgiacomo.travaglini@arm.com * modified or unmodified, in source code or in binary form. 1312605Sgiacomo.travaglini@arm.com * 1412605Sgiacomo.travaglini@arm.com * Redistribution and use in source and binary forms, with or without 1512605Sgiacomo.travaglini@arm.com * modification, are permitted provided that the following conditions are 1612605Sgiacomo.travaglini@arm.com * met: redistributions of source code must retain the above copyright 1712605Sgiacomo.travaglini@arm.com * notice, this list of conditions and the following disclaimer; 1812605Sgiacomo.travaglini@arm.com * redistributions in binary form must reproduce the above copyright 1912605Sgiacomo.travaglini@arm.com * notice, this list of conditions and the following disclaimer in the 2012605Sgiacomo.travaglini@arm.com * documentation and/or other materials provided with the distribution; 2112605Sgiacomo.travaglini@arm.com * neither the name of the copyright holders nor the names of its 2212605Sgiacomo.travaglini@arm.com * contributors may be used to endorse or promote products derived from 2312605Sgiacomo.travaglini@arm.com * this software without specific prior written permission. 2412605Sgiacomo.travaglini@arm.com * 2512605Sgiacomo.travaglini@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2612605Sgiacomo.travaglini@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2712605Sgiacomo.travaglini@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2812605Sgiacomo.travaglini@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2912605Sgiacomo.travaglini@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3012605Sgiacomo.travaglini@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3112605Sgiacomo.travaglini@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3212605Sgiacomo.travaglini@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3312605Sgiacomo.travaglini@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3412605Sgiacomo.travaglini@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3512605Sgiacomo.travaglini@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3612605Sgiacomo.travaglini@arm.com * 3712605Sgiacomo.travaglini@arm.com * Authors: Giacomo Travaglini 3812605Sgiacomo.travaglini@arm.com */ 3912605Sgiacomo.travaglini@arm.com 4012605Sgiacomo.travaglini@arm.com#ifndef __ARCH_ARM_TLBI_HH__ 4112605Sgiacomo.travaglini@arm.com#define __ARCH_ARM_TLBI_HH__ 4212605Sgiacomo.travaglini@arm.com 4312605Sgiacomo.travaglini@arm.com#include "arch/arm/system.hh" 4412605Sgiacomo.travaglini@arm.com#include "arch/arm/tlb.hh" 4512605Sgiacomo.travaglini@arm.com#include "cpu/thread_context.hh" 4612605Sgiacomo.travaglini@arm.com 4712605Sgiacomo.travaglini@arm.com/** 4812605Sgiacomo.travaglini@arm.com * @file 4912605Sgiacomo.travaglini@arm.com * The file contains the definition of a set of TLB Invalidate 5012605Sgiacomo.travaglini@arm.com * Instructions. Those are the ISA interface for TLB flushing 5112605Sgiacomo.travaglini@arm.com * operations. 5212605Sgiacomo.travaglini@arm.com */ 5312605Sgiacomo.travaglini@arm.comnamespace ArmISA { 5412605Sgiacomo.travaglini@arm.com 5512605Sgiacomo.travaglini@arm.comclass TLBIOp 5612605Sgiacomo.travaglini@arm.com{ 5712605Sgiacomo.travaglini@arm.com public: 5812605Sgiacomo.travaglini@arm.com TLBIOp(ExceptionLevel _targetEL, bool _secure) 5912605Sgiacomo.travaglini@arm.com : secureLookup(_secure), targetEL(_targetEL) 6012605Sgiacomo.travaglini@arm.com {} 6112605Sgiacomo.travaglini@arm.com 6212605Sgiacomo.travaglini@arm.com virtual ~TLBIOp() {} 6312605Sgiacomo.travaglini@arm.com virtual void operator()(ThreadContext* tc) {} 6412605Sgiacomo.travaglini@arm.com 6512605Sgiacomo.travaglini@arm.com /** 6612605Sgiacomo.travaglini@arm.com * Broadcast the TLB Invalidate operation to all 6712605Sgiacomo.travaglini@arm.com * TLBs in the Arm system. 6812605Sgiacomo.travaglini@arm.com * @param tc Thread Context 6912605Sgiacomo.travaglini@arm.com */ 7012605Sgiacomo.travaglini@arm.com void 7112605Sgiacomo.travaglini@arm.com broadcast(ThreadContext *tc) 7212605Sgiacomo.travaglini@arm.com { 7312605Sgiacomo.travaglini@arm.com System *sys = tc->getSystemPtr(); 7412605Sgiacomo.travaglini@arm.com for (int x = 0; x < sys->numContexts(); x++) { 7512605Sgiacomo.travaglini@arm.com ThreadContext *oc = sys->getThreadContext(x); 7612605Sgiacomo.travaglini@arm.com (*this)(oc); 7712605Sgiacomo.travaglini@arm.com } 7812605Sgiacomo.travaglini@arm.com } 7912605Sgiacomo.travaglini@arm.com 8012605Sgiacomo.travaglini@arm.com protected: 8112605Sgiacomo.travaglini@arm.com bool secureLookup; 8212605Sgiacomo.travaglini@arm.com ExceptionLevel targetEL; 8312605Sgiacomo.travaglini@arm.com}; 8412605Sgiacomo.travaglini@arm.com 8512605Sgiacomo.travaglini@arm.com/** TLB Invalidate All */ 8612605Sgiacomo.travaglini@arm.comclass TLBIALL : public TLBIOp 8712605Sgiacomo.travaglini@arm.com{ 8812605Sgiacomo.travaglini@arm.com public: 8912605Sgiacomo.travaglini@arm.com TLBIALL(ExceptionLevel _targetEL, bool _secure) 9012605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure) 9112605Sgiacomo.travaglini@arm.com {} 9212605Sgiacomo.travaglini@arm.com 9312605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 9412605Sgiacomo.travaglini@arm.com}; 9512605Sgiacomo.travaglini@arm.com 9612605Sgiacomo.travaglini@arm.com/** Instruction TLB Invalidate All */ 9712605Sgiacomo.travaglini@arm.comclass ITLBIALL : public TLBIOp 9812605Sgiacomo.travaglini@arm.com{ 9912605Sgiacomo.travaglini@arm.com public: 10012605Sgiacomo.travaglini@arm.com ITLBIALL(ExceptionLevel _targetEL, bool _secure) 10112605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure) 10212605Sgiacomo.travaglini@arm.com {} 10312605Sgiacomo.travaglini@arm.com 10412605Sgiacomo.travaglini@arm.com void broadcast(ThreadContext *tc) = delete; 10512605Sgiacomo.travaglini@arm.com 10612605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 10712605Sgiacomo.travaglini@arm.com}; 10812605Sgiacomo.travaglini@arm.com 10912605Sgiacomo.travaglini@arm.com/** Data TLB Invalidate All */ 11012605Sgiacomo.travaglini@arm.comclass DTLBIALL : public TLBIOp 11112605Sgiacomo.travaglini@arm.com{ 11212605Sgiacomo.travaglini@arm.com public: 11312605Sgiacomo.travaglini@arm.com DTLBIALL(ExceptionLevel _targetEL, bool _secure) 11412605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure) 11512605Sgiacomo.travaglini@arm.com {} 11612605Sgiacomo.travaglini@arm.com 11712605Sgiacomo.travaglini@arm.com void broadcast(ThreadContext *tc) = delete; 11812605Sgiacomo.travaglini@arm.com 11912605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 12012605Sgiacomo.travaglini@arm.com}; 12112605Sgiacomo.travaglini@arm.com 12212605Sgiacomo.travaglini@arm.com/** TLB Invalidate by ASID match */ 12312605Sgiacomo.travaglini@arm.comclass TLBIASID : public TLBIOp 12412605Sgiacomo.travaglini@arm.com{ 12512605Sgiacomo.travaglini@arm.com public: 12612605Sgiacomo.travaglini@arm.com TLBIASID(ExceptionLevel _targetEL, bool _secure, uint16_t _asid) 12712605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), asid(_asid) 12812605Sgiacomo.travaglini@arm.com {} 12912605Sgiacomo.travaglini@arm.com 13012605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 13112605Sgiacomo.travaglini@arm.com 13212605Sgiacomo.travaglini@arm.com protected: 13312605Sgiacomo.travaglini@arm.com uint16_t asid; 13412605Sgiacomo.travaglini@arm.com}; 13512605Sgiacomo.travaglini@arm.com 13612605Sgiacomo.travaglini@arm.com/** Instruction TLB Invalidate by ASID match */ 13712605Sgiacomo.travaglini@arm.comclass ITLBIASID : public TLBIOp 13812605Sgiacomo.travaglini@arm.com{ 13912605Sgiacomo.travaglini@arm.com public: 14012605Sgiacomo.travaglini@arm.com ITLBIASID(ExceptionLevel _targetEL, bool _secure, uint16_t _asid) 14112605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), asid(_asid) 14212605Sgiacomo.travaglini@arm.com {} 14312605Sgiacomo.travaglini@arm.com 14412605Sgiacomo.travaglini@arm.com void broadcast(ThreadContext *tc) = delete; 14512605Sgiacomo.travaglini@arm.com 14612605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 14712605Sgiacomo.travaglini@arm.com 14812605Sgiacomo.travaglini@arm.com protected: 14912605Sgiacomo.travaglini@arm.com uint16_t asid; 15012605Sgiacomo.travaglini@arm.com}; 15112605Sgiacomo.travaglini@arm.com 15212605Sgiacomo.travaglini@arm.com/** Data TLB Invalidate by ASID match */ 15312605Sgiacomo.travaglini@arm.comclass DTLBIASID : public TLBIOp 15412605Sgiacomo.travaglini@arm.com{ 15512605Sgiacomo.travaglini@arm.com public: 15612605Sgiacomo.travaglini@arm.com DTLBIASID(ExceptionLevel _targetEL, bool _secure, uint16_t _asid) 15712605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), asid(_asid) 15812605Sgiacomo.travaglini@arm.com {} 15912605Sgiacomo.travaglini@arm.com 16012605Sgiacomo.travaglini@arm.com void broadcast(ThreadContext *tc) = delete; 16112605Sgiacomo.travaglini@arm.com 16212605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 16312605Sgiacomo.travaglini@arm.com 16412605Sgiacomo.travaglini@arm.com protected: 16512605Sgiacomo.travaglini@arm.com uint16_t asid; 16612605Sgiacomo.travaglini@arm.com}; 16712605Sgiacomo.travaglini@arm.com 16812605Sgiacomo.travaglini@arm.com/** TLB Invalidate All, Non-Secure */ 16912605Sgiacomo.travaglini@arm.comclass TLBIALLN : public TLBIOp 17012605Sgiacomo.travaglini@arm.com{ 17112605Sgiacomo.travaglini@arm.com public: 17213882Sgiacomo.travaglini@arm.com TLBIALLN(ExceptionLevel _targetEL) 17313882Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, false) 17412605Sgiacomo.travaglini@arm.com {} 17512605Sgiacomo.travaglini@arm.com 17612605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 17712605Sgiacomo.travaglini@arm.com}; 17812605Sgiacomo.travaglini@arm.com 17912605Sgiacomo.travaglini@arm.com/** TLB Invalidate by VA, All ASID */ 18012605Sgiacomo.travaglini@arm.comclass TLBIMVAA : public TLBIOp 18112605Sgiacomo.travaglini@arm.com{ 18212605Sgiacomo.travaglini@arm.com public: 18312605Sgiacomo.travaglini@arm.com TLBIMVAA(ExceptionLevel _targetEL, bool _secure, 18413882Sgiacomo.travaglini@arm.com Addr _addr) 18513882Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), addr(_addr) 18612605Sgiacomo.travaglini@arm.com {} 18712605Sgiacomo.travaglini@arm.com 18812605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 18912605Sgiacomo.travaglini@arm.com 19012605Sgiacomo.travaglini@arm.com protected: 19112605Sgiacomo.travaglini@arm.com Addr addr; 19212605Sgiacomo.travaglini@arm.com}; 19312605Sgiacomo.travaglini@arm.com 19412605Sgiacomo.travaglini@arm.com/** TLB Invalidate by VA */ 19512605Sgiacomo.travaglini@arm.comclass TLBIMVA : public TLBIOp 19612605Sgiacomo.travaglini@arm.com{ 19712605Sgiacomo.travaglini@arm.com public: 19812605Sgiacomo.travaglini@arm.com TLBIMVA(ExceptionLevel _targetEL, bool _secure, 19912605Sgiacomo.travaglini@arm.com Addr _addr, uint16_t _asid) 20012605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), addr(_addr), asid(_asid) 20112605Sgiacomo.travaglini@arm.com {} 20212605Sgiacomo.travaglini@arm.com 20312605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 20412605Sgiacomo.travaglini@arm.com 20512605Sgiacomo.travaglini@arm.com protected: 20612605Sgiacomo.travaglini@arm.com Addr addr; 20712605Sgiacomo.travaglini@arm.com uint16_t asid; 20812605Sgiacomo.travaglini@arm.com}; 20912605Sgiacomo.travaglini@arm.com 21012605Sgiacomo.travaglini@arm.com/** Instruction TLB Invalidate by VA */ 21112605Sgiacomo.travaglini@arm.comclass ITLBIMVA : public TLBIOp 21212605Sgiacomo.travaglini@arm.com{ 21312605Sgiacomo.travaglini@arm.com public: 21412605Sgiacomo.travaglini@arm.com ITLBIMVA(ExceptionLevel _targetEL, bool _secure, 21512605Sgiacomo.travaglini@arm.com Addr _addr, uint16_t _asid) 21612605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), addr(_addr), asid(_asid) 21712605Sgiacomo.travaglini@arm.com {} 21812605Sgiacomo.travaglini@arm.com 21912605Sgiacomo.travaglini@arm.com void broadcast(ThreadContext *tc) = delete; 22012605Sgiacomo.travaglini@arm.com 22112605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 22212605Sgiacomo.travaglini@arm.com 22312605Sgiacomo.travaglini@arm.com protected: 22412605Sgiacomo.travaglini@arm.com Addr addr; 22512605Sgiacomo.travaglini@arm.com uint16_t asid; 22612605Sgiacomo.travaglini@arm.com}; 22712605Sgiacomo.travaglini@arm.com 22812605Sgiacomo.travaglini@arm.com/** Data TLB Invalidate by VA */ 22912605Sgiacomo.travaglini@arm.comclass DTLBIMVA : public TLBIOp 23012605Sgiacomo.travaglini@arm.com{ 23112605Sgiacomo.travaglini@arm.com public: 23212605Sgiacomo.travaglini@arm.com DTLBIMVA(ExceptionLevel _targetEL, bool _secure, 23312605Sgiacomo.travaglini@arm.com Addr _addr, uint16_t _asid) 23412605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), addr(_addr), asid(_asid) 23512605Sgiacomo.travaglini@arm.com {} 23612605Sgiacomo.travaglini@arm.com 23712605Sgiacomo.travaglini@arm.com void broadcast(ThreadContext *tc) = delete; 23812605Sgiacomo.travaglini@arm.com 23912605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 24012605Sgiacomo.travaglini@arm.com 24112605Sgiacomo.travaglini@arm.com protected: 24212605Sgiacomo.travaglini@arm.com Addr addr; 24312605Sgiacomo.travaglini@arm.com uint16_t asid; 24412605Sgiacomo.travaglini@arm.com}; 24512605Sgiacomo.travaglini@arm.com 24612605Sgiacomo.travaglini@arm.com/** TLB Invalidate by Intermediate Physical Address */ 24712605Sgiacomo.travaglini@arm.comclass TLBIIPA : public TLBIOp 24812605Sgiacomo.travaglini@arm.com{ 24912605Sgiacomo.travaglini@arm.com public: 25012605Sgiacomo.travaglini@arm.com TLBIIPA(ExceptionLevel _targetEL, bool _secure, Addr _addr) 25112605Sgiacomo.travaglini@arm.com : TLBIOp(_targetEL, _secure), addr(_addr) 25212605Sgiacomo.travaglini@arm.com {} 25312605Sgiacomo.travaglini@arm.com 25412605Sgiacomo.travaglini@arm.com void operator()(ThreadContext* tc) override; 25512605Sgiacomo.travaglini@arm.com 25612605Sgiacomo.travaglini@arm.com protected: 25712605Sgiacomo.travaglini@arm.com Addr addr; 25812605Sgiacomo.travaglini@arm.com}; 25912605Sgiacomo.travaglini@arm.com 26012605Sgiacomo.travaglini@arm.com} // namespace ArmISA 26112605Sgiacomo.travaglini@arm.com 26212605Sgiacomo.travaglini@arm.com#endif //__ARCH_ARM_TLBI_HH__ 263