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,
131 void invalidateSSID(uint32_t sid, uint32_t ssid);
132 void invalidateSID(uint32_t sid);
133 void invalidateVA(
Addr va, uint16_t
asid, uint16_t vmid);
134 void invalidateVAA(
Addr va, uint16_t vmid);
135 void invalidateASID(uint16_t asid, uint16_t vmid);
136 void invalidateVMID(uint16_t vmid);
137 void invalidateAll();
145 size_t pickSetIdx(uint32_t sid, uint32_t ssid)
const;
146 size_t pickSetIdx(
Addr va)
const;
147 size_t pickEntryIdxToReplace(
const Set &
set,
AllocPolicy alloc);
169 ARMArchTLB(
unsigned numEntries,
unsigned _associativity,
170 const std::string &policy);
176 void store(
const Entry &incoming);
178 void invalidateVA(
Addr va, uint16_t asid, uint16_t vmid);
179 void invalidateVAA(
Addr va, uint16_t vmid);
180 void invalidateASID(uint16_t asid, uint16_t vmid);
181 void invalidateVMID(uint16_t vmid);
182 void invalidateAll();
190 size_t pickSetIdx(
Addr va, uint16_t asid, uint16_t vmid)
const;
191 size_t pickEntryIdxToReplace(
const Set &
set);
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);
219 void invalidateIPA(
Addr ipa, uint16_t vmid);
220 void invalidateIPAA(
Addr ipa);
221 void invalidateVMID(uint16_t vmid);
222 void invalidateAll();
230 size_t pickSetIdx(
Addr ipa, uint16_t vmid)
const;
231 size_t pickEntryIdxToReplace(
const Set &
set);
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);
267 void invalidateSSID(uint32_t sid, uint32_t ssid);
268 void invalidateSID(uint32_t sid);
269 void invalidateAll();
277 size_t pickSetIdx(uint32_t sid, uint32_t ssid)
const;
278 size_t pickEntryIdxToReplace(
const Set &
set);
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);
311 void invalidateVA(
Addr va, uint16_t asid, uint16_t vmid,
312 const bool leaf_only);
313 void invalidateVAA(
Addr va, uint16_t vmid,
const bool leaf_only);
314 void invalidateASID(uint16_t asid, uint16_t vmid);
315 void invalidateVMID(uint16_t vmid);
316 void invalidateAll();
342 std::array<unsigned, 2*WALK_CACHE_LEVELS>
sizes;
343 std::array<unsigned, 2*WALK_CACHE_LEVELS>
offsets;
345 size_t pickSetIdx(
Addr va,
Addr vaMask,
346 unsigned stage,
unsigned level)
const;
348 size_t pickEntryIdxToReplace(
const Set &
set,
349 unsigned stage,
unsigned level);
const std::string & name()
std::array< unsigned, 2 *WALK_CACHE_LEVELS > offsets
Declaration of Statistics objects.
This is a simple scalar statistic, like a counter.
std::array< unsigned, 2 *WALK_CACHE_LEVELS > sizes
Stats::Scalar totalUpdates
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,16,32,64}_t.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
#define WALK_CACHE_LEVELS
Stats::Formula averageHitRate
Stats::Formula averageLookups
static int decodePolicyName(const std::string &policy_name)
Stats::Formula averageMisses
SMMUv3BaseCache(const std::string &policy_name, uint32_t seed)
Stats::Scalar totalLookups
virtual ~SMMUv3BaseCache()
Stats::Formula averageUpdates
virtual void regStats(const std::string &name)
Stats::Scalar totalMisses