Lines Matching defs:hwtlb

108 hwtlb_to_tlb(const struct e500_hwtlb hwtlb)
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)
118 | (hwtlb.hwtlb_mas3 & MAS3_RPN);
119 if (hwtlb.hwtlb_mas1 & MAS1_TS) {
126 tlb.tlb_pte |= (prot_mask & hwtlb.hwtlb_mas3) << prot_shift;
133 struct e500_hwtlb hwtlb;
174 hwtlb.hwtlb_mas0 = mfspr(SPR_MAS0);
175 hwtlb.hwtlb_mas1 = mfspr(SPR_MAS1);
176 hwtlb.hwtlb_mas2 = mfspr(SPR_MAS2);
177 hwtlb.hwtlb_mas3 = mfspr(SPR_MAS3);
182 return hwtlb;
186 hwtlb_write(const struct e500_hwtlb hwtlb, bool needs_sync)
194 mtspr(SPR_MAS0, hwtlb.hwtlb_mas0);
195 mtspr(SPR_MAS1, hwtlb.hwtlb_mas1);
200 if ((hwtlb.hwtlb_mas0 & MAS0_TLBSEL) == MAS0_TLBSEL_TLB0
201 || (hwtlb.hwtlb_mas1 & MAS1_V)) {
202 mtspr(SPR_MAS2, hwtlb.hwtlb_mas2);
208 if (hwtlb.hwtlb_mas1 & MAS1_V) {
209 mtspr(SPR_MAS3, hwtlb.hwtlb_mas3);
216 hwtlb.hwtlb_mas0, hwtlb.hwtlb_mas1,
217 hwtlb.hwtlb_mas2, hwtlb.hwtlb_mas3);
231 struct e500_hwtlb hwtlb;
238 hwtlb.hwtlb_mas0 = 0;
239 hwtlb.hwtlb_mas1 = MAS1_V | MASX_TSIZE_MAKE(1);
245 hwtlb.hwtlb_mas1 |= MAS1_TS
247 hwtlb.hwtlb_mas3 = (prot_mask >> (PTE_RWX_SHIFT - 1))
250 KASSERT(hwtlb.hwtlb_mas3 & MAS3_UR);
254 hwtlb.hwtlb_mas3 = prot_mask >> PTE_RWX_SHIFT;
257 hwtlb.hwtlb_mas3 &= ~(MAS3_UW|MAS3_SW);
259 hwtlb.hwtlb_mas3 &= ~(MAS3_UX|MAS3_SX);
266 hwtlb.hwtlb_mas0 = MAS0_TLBSEL_TLB1;
273 hwtlb.hwtlb_mas1 = MASX_TSIZE_MAKE(((31 - 10) - cntlz) / 2)
275 hwtlb.hwtlb_mas3 = prot_mask >> PTE_RWX_SHIFT;
278 hwtlb.hwtlb_mas2 = tlb.tlb_va | (tlb.tlb_pte & PTE_WIMGE_MASK);
279 hwtlb.hwtlb_mas3 |= tlb.tlb_pte & PTE_RPN_MASK;
281 return hwtlb;
543 struct e500_hwtlb hwtlb = tlb_to_hwtlb(
560 mas1 = hwtlb.hwtlb_mas1 | MAS1_V;
563 mtspr(SPR_MAS2, hwtlb.hwtlb_mas2);
564 mtspr(SPR_MAS3, hwtlb.hwtlb_mas3);
574 hwtlb.hwtlb_mas1, hwtlb.hwtlb_mas2, hwtlb.hwtlb_mas3);
604 struct e500_hwtlb hwtlb;
605 hwtlb.hwtlb_mas0 = MAS0_ESEL_MAKE(assoc) | MAS0_TLBSEL_TLB0;
606 mtspr(SPR_MAS0, hwtlb.hwtlb_mas0);
610 hwtlb.hwtlb_mas1 = mfspr(SPR_MAS1);
616 if (hwtlb.hwtlb_mas1 & MAS1_V) {
617 hwtlb.hwtlb_mas2 = mfspr(SPR_MAS2);
618 hwtlb.hwtlb_mas3 = mfspr(SPR_MAS3);
619 struct e500_tlb tlb = hwtlb_to_tlb(hwtlb);
622 hwtlb.hwtlb_mas1,
623 hwtlb.hwtlb_mas2,
624 hwtlb.hwtlb_mas3);
658 struct e500_hwtlb hwtlb;
659 hwtlb.hwtlb_mas0 = MAS0_ESEL_MAKE(assoc) | MAS0_TLBSEL_TLB0;
660 mtspr(SPR_MAS0, hwtlb.hwtlb_mas0);
664 hwtlb.hwtlb_mas1 = mfspr(SPR_MAS1);
665 if (hwtlb.hwtlb_mas1 & MAS1_V) {
666 hwtlb.hwtlb_mas2 = mfspr(SPR_MAS2);
667 hwtlb.hwtlb_mas3 = mfspr(SPR_MAS3);
668 struct e500_tlb tlb = hwtlb_to_tlb(hwtlb);
1054 struct e500_hwtlb * const hwtlb = &xtlb->e_hwtlb;
1055 if ((hwtlb->hwtlb_mas1 & (MAS1_V|MAS1_TS)) == MAS1_V
1056 && (hwtlb->hwtlb_mas2 & MAS2_EPN) < memsize) {