diff options
Diffstat (limited to 'hw/hexagon/hexagon_tlb.c')
| -rw-r--r-- | hw/hexagon/hexagon_tlb.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/hw/hexagon/hexagon_tlb.c b/hw/hexagon/hexagon_tlb.c index c76805abac..157d03e51b 100644 --- a/hw/hexagon/hexagon_tlb.c +++ b/hw/hexagon/hexagon_tlb.c @@ -326,6 +326,16 @@ bool hexagon_tlb_find_match(HexagonTLBState *tlb, uint32_t asid, for (uint32_t i = 0; i < tlb->num_entries; i++) { if (hex_tlb_entry_match(tlb->entries[i], asid, VA, access_type, PA, prot, size, excp, cause_code, mmu_idx)) { + if (*excp == 0) { + for (i++; i < tlb->num_entries; i++) { + if (hex_tlb_entry_match_noperm(tlb->entries[i], asid, + VA)) { + *excp = HEX_EVENT_IMPRECISE; + *cause_code = HEX_CAUSE_IMPRECISE_MULTI_TLB_MATCH; + break; + } + } + } return true; } } |
