40 #ifndef __DEV_ARM_SMMU_V3_CACHES_HH__ 41 #define __DEV_ARM_SMMU_V3_CACHES_HH__ 54 #define WALK_CACHE_LEVELS 4 122 SMMUTLB(
unsigned numEntries,
unsigned _associativity,
123 const std::string &policy);
127 const Entry *lookup(uint32_t sid, uint32_t ssid,
Addr va,
129 const Entry *lookupAnyVA(uint32_t sid, uint32_t ssid,
133 void invalidateSSID(uint32_t sid, uint32_t ssid);
134 void invalidateSID(uint32_t sid);
135 void invalidateVA(
Addr va, uint16_t
asid, uint16_t vmid);
136 void invalidateVAA(
Addr va, uint16_t vmid);
137 void invalidateASID(uint16_t asid, uint16_t vmid);
138 void invalidateVMID(uint16_t vmid);
139 void invalidateAll();
147 size_t pickSetIdx(uint32_t sid, uint32_t ssid)
const;
148 size_t pickSetIdx(
Addr va)
const;
149 size_t pickEntryIdxToReplace(
const Set &
set,
AllocPolicy alloc);
171 ARMArchTLB(
unsigned numEntries,
unsigned _associativity,
172 const std::string &policy);
178 void store(
const Entry &incoming);
180 void invalidateVA(
Addr va, uint16_t asid, uint16_t vmid);
181 void invalidateVAA(
Addr va, uint16_t vmid);
182 void invalidateASID(uint16_t asid, uint16_t vmid);
183 void invalidateVMID(uint16_t vmid);
184 void invalidateAll();
192 size_t pickSetIdx(
Addr va, uint16_t asid, uint16_t vmid)
const;
193 size_t pickEntryIdxToReplace(
const Set &
set);
214 IPACache(
unsigned numEntries,
unsigned _associativity,
215 const std::string &policy);
218 const Entry *lookup(
Addr ipa, uint16_t vmid,
bool updStats=
true);
219 void store(
const Entry &incoming);
221 void invalidateIPA(
Addr ipa, uint16_t vmid);
222 void invalidateIPAA(
Addr ipa);
223 void invalidateVMID(uint16_t vmid);
224 void invalidateAll();
232 size_t pickSetIdx(
Addr ipa, uint16_t vmid)
const;
233 size_t pickEntryIdxToReplace(
const Set &
set);
262 ConfigCache(
unsigned numEntries,
unsigned _associativity,
263 const std::string &policy);
266 const Entry *lookup(uint32_t sid, uint32_t ssid,
bool updStats=
true);
267 void store(
const Entry &incoming);
269 void invalidateSSID(uint32_t sid, uint32_t ssid);
270 void invalidateSID(uint32_t sid);
271 void invalidateAll();
279 size_t pickSetIdx(uint32_t sid, uint32_t ssid)
const;
280 size_t pickEntryIdxToReplace(
const Set &
set);
305 WalkCache(
const std::array<unsigned, 2*WALK_CACHE_LEVELS> &_sizes,
306 unsigned _associativity,
const std::string &policy);
310 unsigned stage,
unsigned level,
bool updStats=
true);
311 void store(
const Entry &incoming);
313 void invalidateVA(
Addr va, uint16_t asid, uint16_t vmid,
314 const bool leaf_only);
315 void invalidateVAA(
Addr va, uint16_t vmid,
const bool leaf_only);
316 void invalidateASID(uint16_t asid, uint16_t vmid);
317 void invalidateVMID(uint16_t vmid);
318 void invalidateAll();
344 std::array<unsigned, 2*WALK_CACHE_LEVELS>
sizes;
345 std::array<unsigned, 2*WALK_CACHE_LEVELS>
offsets;
347 size_t pickSetIdx(
Addr va,
Addr vaMask,
348 unsigned stage,
unsigned level)
const;
350 size_t pickEntryIdxToReplace(
const Set &
set,
351 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