41#ifndef __ARCH_ARM_TLB_HH__
42#define __ARCH_ARM_TLB_HH__
50#include "enums/TypeTLB.hh"
52#include "params/ArmTLB.hh"
99 enums::ArmLookupLevel lookup_level) = 0;
215 panic(
"demapPage() is not implemented.\n");
222 panic(
"unimplemented");
230 panic(
"unimplemented");
237 panic(
"unimplemented");
270 bool in_host, TypeTLB entry_type);
TableWalker * getTableWalker()
TLB(const Params &p, int _size, TableWalker *_walker)
void takeOverFrom(BaseTLB *otlb) override
Take over from an old tlb context.
TlbEntry * lookup(const Lookup &lookup_data)
Lookup an entry in the TLB.
TableWalker * tableWalker
void setTableWalker(TableWalker *table_walker)
void setVMID(vmid_t _vmid)
TlbEntry * multiLookup(const Lookup &lookup_data)
Lookup an entry in the TLB and in the next levels by following the nextLevel pointer.
void flush(const TLBIOp &tlbi_op)
Flush TLB entries.
void regProbePoints() override
Register probe points for this object.
Port * getTableWalkerPort() override
Get the table walker port.
probing::PMUUPtr ppRefills
PMU probe for TLB refills.
bool _walkCache
True if the TLB caches partial translations.
void insert(TlbEntry &pte)
Insert a PTE in the current TLB.
void translateTiming(const RequestPtr &req, ThreadContext *tc, BaseMMU::Translation *translation, BaseMMU::Mode mode) override
void multiInsert(TlbEntry &pte)
Insert a PTE in the current TLB and in the higher levels.
std::unordered_map< enums::ArmLookupLevel, bool > partialLevels
Hash map containing one entry per lookup level The TLB is caching partial translations from the key l...
void _flushMva(Addr mva, uint64_t asn, bool secure_lookup, bool ignore_asn, ExceptionLevel target_el, bool in_host, TypeTLB entry_type)
Remove any entries that match both a va and asn.
Fault finalizePhysical(const RequestPtr &req, ThreadContext *tc, BaseMMU::Mode mode) const override
Do post-translation physical address finalization.
void checkPromotion(TlbEntry *entry, BaseMMU::Mode mode)
Check if the tlb entry passed as an argument needs to be "promoted" as a unified entry: this should h...
gem5::ArmISA::TLB::TlbStats stats
TlbEntry * match(const Lookup &lookup_data)
Helper function looking up for a matching TLB entry Does not update stats; see lookup method instead.
void demapPage(Addr vaddr, uint64_t asn) override
Fault translateAtomic(const RequestPtr &req, ThreadContext *tc, BaseMMU::Mode mode) override
enums::ArmLookupLevel LookupLevel
bool isStage2
Indicates this TLB caches IPA->PA translations.
void flushAll() override
Reset the entire TLB.
virtual ~TlbTestInterface()
virtual Fault translationCheck(const RequestPtr &req, bool is_priv, BaseMMU::Mode mode, TlbEntry::DomainType domain)=0
Check if a TLB translation should be forced to fail.
virtual Fault walkCheck(const RequestPtr &walk_req, Addr va, bool is_secure, Addr is_priv, BaseMMU::Mode mode, TlbEntry::DomainType domain, enums::ArmLookupLevel lookup_level)=0
Check if a page table walker access should be forced to fail.
Ports are used to interface objects to each other.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
This is a simple scalar statistic, like a counter.
#define panic(...)
This implements a cprintf based panic() function.
std::unique_ptr< PMU > PMUUPtr
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
std::shared_ptr< FaultBase > Fault
std::shared_ptr< Request > RequestPtr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
Declaration of Statistics objects.
statistics::Formula writeAccesses
statistics::Scalar readHits
statistics::Scalar instHits
statistics::Scalar flushedEntries
statistics::Formula misses
statistics::Formula readAccesses
statistics::Formula accesses
statistics::Scalar inserts
statistics::Scalar flushTlb
statistics::Scalar readMisses
statistics::Scalar writeHits
statistics::Scalar writeMisses
statistics::Formula instAccesses
statistics::Scalar instMisses
statistics::Scalar partialHits