Lines Matching defs:tlb
110 struct e500_tlb tlb;
114 tlb.tlb_va = MAS2_EPN & hwtlb.hwtlb_mas2;
115 tlb.tlb_size = 1024 << (2 * MASX_TSIZE_GET(hwtlb.hwtlb_mas1));
116 tlb.tlb_asid = MASX_TID_GET(hwtlb.hwtlb_mas1);
117 tlb.tlb_pte = (hwtlb.hwtlb_mas2 & MAS2_WIMGE)
126 tlb.tlb_pte |= (prot_mask & hwtlb.hwtlb_mas3) << prot_shift;
127 return tlb;
149 * is less than the number of tlb entries, the slot is split in two
229 tlb_to_hwtlb(const struct e500_tlb tlb)
233 KASSERT(trunc_page(tlb.tlb_va) == tlb.tlb_va);
234 KASSERT(tlb.tlb_size != 0);
235 KASSERT((tlb.tlb_size & (tlb.tlb_size - 1)) == 0);
236 const uint32_t prot_mask = tlb.tlb_pte & PTE_RWX_MASK;
237 if (__predict_true(tlb.tlb_size == PAGE_SIZE)) {
244 if (tlb.tlb_asid) {
246 | MASX_TID_MAKE(tlb.tlb_asid);
256 if (tlb.tlb_pte & PTE_UNMODIFIED)
258 if (tlb.tlb_pte & PTE_UNSYNCED)
261 KASSERT(tlb.tlb_asid == 0);
262 KASSERT((tlb.tlb_size & 0xaaaaa7ff) == 0);
263 u_int cntlz = __builtin_clz(tlb.tlb_size);
278 hwtlb.hwtlb_mas2 = tlb.tlb_va | (tlb.tlb_pte & PTE_WIMGE_MASK);
279 hwtlb.hwtlb_mas3 |= tlb.tlb_pte & PTE_RPN_MASK;
581 e500_tlb_write_entry(size_t index, const struct tlbmask *tlb)
586 e500_tlb_read_entry(size_t index, struct tlbmask *tlb)
619 struct e500_tlb tlb = hwtlb_to_tlb(hwtlb);
626 tlb.tlb_va, tlb.tlb_asid, tlb.tlb_pte);
628 tlb.tlb_pte & PTE_RPN_MASK,
629 tlb.tlb_pte & PTE_xR ? "R" : "",
630 tlb.tlb_pte & PTE_xW ? "W" : "",
631 tlb.tlb_pte & PTE_UNMODIFIED ? "*" : "",
632 tlb.tlb_pte & PTE_xX ? "X" : "",
633 tlb.tlb_pte & PTE_UNSYNCED ? "*" : "",
634 tlb.tlb_pte & PTE_W ? "W" : "",
635 tlb.tlb_pte & PTE_I ? "I" : "",
636 tlb.tlb_pte & PTE_M ? "M" : "",
637 tlb.tlb_pte & PTE_G ? "G" : "",
638 tlb.tlb_pte & PTE_E ? "E" : "");
668 struct e500_tlb tlb = hwtlb_to_tlb(hwtlb);
669 if (!(*func)(ctx, tlb.tlb_va, tlb.tlb_asid,
670 tlb.tlb_pte))
751 * mark the reference and return the pa. But only if the tlb entry
1063 *** memory. If bit 0 [MSB] in slotmask is set, then tlb