Go to the documentation of this file.
38 #ifndef __DEV_ARM_SMMU_V3_CACHES_HH__
39 #define __DEV_ARM_SMMU_V3_CACHES_HH__
52 #define WALK_CACHE_LEVELS 4
120 SMMUTLB(
unsigned numEntries,
unsigned _associativity,
121 const std::string &policy);
125 const Entry *
lookup(uint32_t sid, uint32_t ssid,
Addr va,
127 const Entry *
lookupAnyVA(uint32_t sid, uint32_t ssid,
145 size_t pickSetIdx(uint32_t sid, uint32_t ssid)
const;
169 ARMArchTLB(
unsigned numEntries,
unsigned _associativity,
170 const std::string &policy);
176 void store(
const Entry &incoming);
212 IPACache(
unsigned numEntries,
unsigned _associativity,
213 const std::string &policy);
216 const Entry *
lookup(
Addr ipa, uint16_t vmid,
bool updStats=
true);
217 void store(
const Entry &incoming);
260 ConfigCache(
unsigned numEntries,
unsigned _associativity,
261 const std::string &policy);
264 const Entry *
lookup(uint32_t sid, uint32_t ssid,
bool updStats=
true);
265 void store(
const Entry &incoming);
277 size_t pickSetIdx(uint32_t sid, uint32_t ssid)
const;
303 WalkCache(
const std::array<unsigned, 2*WALK_CACHE_LEVELS> &_sizes,
304 unsigned _associativity,
const std::string &policy);
308 unsigned stage,
unsigned level,
bool updStats=
true);
309 void store(
const Entry &incoming);
312 const bool leaf_only);
342 std::array<unsigned, 2*WALK_CACHE_LEVELS>
sizes;
343 std::array<unsigned, 2*WALK_CACHE_LEVELS>
offsets;
346 unsigned stage,
unsigned level)
const;
349 unsigned stage,
unsigned level);
void invalidateIPAA(Addr ipa)
const Entry * lookup(uint32_t sid, uint32_t ssid, Addr va, bool updStats=true)
Stats::Scalar totalLookups
@ SMMU_CACHE_REPL_ROUND_ROBIN
Stats::Formula averageLookups
const Entry * lookup(Addr va, Addr vaMask, uint16_t asid, uint16_t vmid, unsigned stage, unsigned level, bool updStats=true)
void invalidateSSID(uint32_t sid, uint32_t ssid)
size_t pickSetIdx(Addr va, Addr vaMask, unsigned stage, unsigned level) const
const Entry * lookup(Addr ipa, uint16_t vmid, bool updStats=true)
void store(const Entry &incoming)
virtual ~SMMUv3BaseCache()
void invalidateIPA(Addr ipa, uint16_t vmid)
Stats::Formula averageMisses
void invalidateVMID(uint16_t vmid)
void store(const Entry &incoming)
unsigned int missesByStageLevel[2][WALK_CACHE_LEVELS]
unsigned int lookupsByStageLevel[2][WALK_CACHE_LEVELS]
void store(const Entry &incoming)
size_t pickSetIdx(uint32_t sid, uint32_t ssid) const
std::array< unsigned, 2 *WALK_CACHE_LEVELS > sizes
const Entry * lookup(Addr va, uint16_t asid, uint16_t vmid, bool updStats=true)
void invalidateSSID(uint32_t sid, uint32_t ssid)
Stats::Formula averageMissesByStageLevel[2][WALK_CACHE_LEVELS]
void invalidateVA(Addr va, uint16_t asid, uint16_t vmid)
void invalidateVAA(Addr va, uint16_t vmid, const bool leaf_only)
This is a simple scalar statistic, like a counter.
Stats::Scalar totalUpdatesByStageLevel[2][WALK_CACHE_LEVELS]
void invalidateVAA(Addr va, uint16_t vmid)
#define WALK_CACHE_LEVELS
void invalidateVA(Addr va, uint16_t asid, uint16_t vmid, const bool leaf_only)
IPACache(unsigned numEntries, unsigned _associativity, const std::string &policy)
void invalidateASID(uint16_t asid, uint16_t vmid)
Stats::Formula averageUpdates
Stats::Scalar totalUpdates
WalkCache(const std::array< unsigned, 2 *WALK_CACHE_LEVELS > &_sizes, unsigned _associativity, const std::string &policy)
Stats::Formula averageHitRateByStageLevel[2][WALK_CACHE_LEVELS]
const Entry * lookup(uint32_t sid, uint32_t ssid, bool updStats=true)
ARMArchTLB(unsigned numEntries, unsigned _associativity, const std::string &policy)
void store(const Entry &incoming)
size_t pickEntryIdxToReplace(const Set &set)
size_t pickSetIdx(Addr ipa, uint16_t vmid) const
size_t pickEntryIdxToReplace(const Set &set)
Stats::Scalar totalLookupsByStageLevel[2][WALK_CACHE_LEVELS]
SMMUTLB(unsigned numEntries, unsigned _associativity, const std::string &policy)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Stats::Formula averageLookupsByStageLevel[2][WALK_CACHE_LEVELS]
const std::string & name()
Stats::Scalar insertionsByStageLevel[2][WALK_CACHE_LEVELS]
size_t pickEntryIdxToReplace(const Set &set)
void regStats(const std::string &name) override
void invalidateVMID(uint16_t vmid)
size_t pickEntryIdxToReplace(const Set &set, unsigned stage, unsigned level)
void invalidateASID(uint16_t asid, uint16_t vmid)
void invalidateSID(uint32_t sid)
void invalidateASID(uint16_t asid, uint16_t vmid)
void store(const Entry &incoming, AllocPolicy alloc)
void invalidateSID(uint32_t sid)
static int decodePolicyName(const std::string &policy_name)
void invalidateVAA(Addr va, uint16_t vmid)
Stats::Scalar totalMisses
size_t pickEntryIdxToReplace(const Set &set, AllocPolicy alloc)
SMMUv3BaseCache(const std::string &policy_name, uint32_t seed)
Stats::Formula averageUpdatesByStageLevel[2][WALK_CACHE_LEVELS]
std::array< unsigned, 2 *WALK_CACHE_LEVELS > offsets
void invalidateVMID(uint16_t vmid)
size_t pickSetIdx(Addr va, uint16_t asid, uint16_t vmid) const
ConfigCache(unsigned numEntries, unsigned _associativity, const std::string &policy)
Stats::Formula averageHitRate
void invalidateVA(Addr va, uint16_t asid, uint16_t vmid)
unsigned int updatesByStageLevel[2][WALK_CACHE_LEVELS]
virtual void regStats(const std::string &name)
size_t pickSetIdx(uint32_t sid, uint32_t ssid) const
void invalidateVMID(uint16_t vmid)
Stats::Scalar totalMissesByStageLevel[2][WALK_CACHE_LEVELS]
const Entry * lookupAnyVA(uint32_t sid, uint32_t ssid, bool updStats=true)
Generated on Wed Sep 30 2020 14:02:10 for gem5 by doxygen 1.8.17