From: Jan-Peter Larsson Date: Thu, 15 Aug 2019 11:49:16 +0000 (+0100) Subject: dev-arm: Implement invalidateASID in SMMUv3 WalkCache X-Git-Tag: v19.0.0.0~597 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=94f9eebd1f2da64287a27e6a94efe88edebb383c;p=gem5.git dev-arm: Implement invalidateASID in SMMUv3 WalkCache This patch fixes a bug where issuing a invalidate-by-ASID command (CMD_TLBI_NH_ASID) to the SMMU would cause Gem5 to crash. Change-Id: I5b8343a17e43762fe3917560ae401a20be1e05b8 Reviewed-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20259 Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg Tested-by: kokoro --- diff --git a/src/dev/arm/smmu_v3_caches.cc b/src/dev/arm/smmu_v3_caches.cc index d92c54480..f6384b466 100644 --- a/src/dev/arm/smmu_v3_caches.cc +++ b/src/dev/arm/smmu_v3_caches.cc @@ -1122,7 +1122,16 @@ WalkCache::invalidateVAA(Addr va, uint16_t vmid, const bool leaf_only) void WalkCache::invalidateASID(uint16_t asid, uint16_t vmid) { - panic("%s unimplemented\n", __func__); + for (size_t s = 0; s < sets.size(); s++) { + Set &set = sets[s]; + + for (size_t i = 0; i < set.size(); i++) { + Entry &e = set[i]; + + if (e.asid==asid && e.vmid==vmid) + e.valid = false; + } + } } void