Lines Matching refs:dtlb

82                               bool dtlb, uint32_t way)  in get_page_size()  argument
84 uint32_t tlbcfg = env->sregs[dtlb ? DTLBCFG : ITLBCFG]; in get_page_size()
105 bool dtlb, uint32_t way) in xtensa_tlb_get_addr_mask() argument
108 bool varway56 = dtlb ? in xtensa_tlb_get_addr_mask()
109 env->config->dtlb.varway56 : in xtensa_tlb_get_addr_mask()
114 return 0xfff00000 << get_page_size(env, dtlb, way) * 2; in xtensa_tlb_get_addr_mask()
118 return 0xf8000000 << get_page_size(env, dtlb, way); in xtensa_tlb_get_addr_mask()
125 return 0xf0000000 << (1 - get_page_size(env, dtlb, way)); in xtensa_tlb_get_addr_mask()
142 static uint32_t get_vpn_mask(const CPUXtensaState *env, bool dtlb, uint32_t way) in get_vpn_mask() argument
145 bool is32 = (dtlb ? in get_vpn_mask()
146 env->config->dtlb.nrefillentries : in get_vpn_mask()
150 return xtensa_tlb_get_addr_mask(env, dtlb, way) << 2; in get_vpn_mask()
152 uint32_t mask = xtensa_tlb_get_addr_mask(env, dtlb, way); in get_vpn_mask()
153 bool varway56 = dtlb ? in get_vpn_mask()
154 env->config->dtlb.varway56 : in get_vpn_mask()
172 bool dtlb, uint32_t *vpn, in split_tlb_entry_spec_way() argument
175 bool varway56 = dtlb ? in split_tlb_entry_spec_way()
176 env->config->dtlb.varway56 : in split_tlb_entry_spec_way()
179 if (!dtlb) { in split_tlb_entry_spec_way()
184 bool is32 = (dtlb ? in split_tlb_entry_spec_way()
185 env->config->dtlb.nrefillentries : in split_tlb_entry_spec_way()
192 uint32_t eibase = 20 + get_page_size(env, dtlb, wi) * 2; in split_tlb_entry_spec_way()
199 uint32_t eibase = 27 + get_page_size(env, dtlb, wi); in split_tlb_entry_spec_way()
208 uint32_t eibase = 29 - get_page_size(env, dtlb, wi); in split_tlb_entry_spec_way()
220 *vpn = v & xtensa_tlb_get_addr_mask(env, dtlb, wi); in split_tlb_entry_spec_way()
227 static void split_tlb_entry_spec(CPUXtensaState *env, uint32_t v, bool dtlb, in split_tlb_entry_spec() argument
231 *wi = v & (dtlb ? 0xf : 0x7); in split_tlb_entry_spec()
232 split_tlb_entry_spec_way(env, v, dtlb, vpn, *wi, ei); in split_tlb_entry_spec()
240 static xtensa_tlb_entry *xtensa_tlb_get_entry(CPUXtensaState *env, bool dtlb, in xtensa_tlb_get_entry() argument
243 return dtlb ? in xtensa_tlb_get_entry()
244 env->dtlb[wi] + ei : in xtensa_tlb_get_entry()
249 uint32_t v, bool dtlb, uint32_t *pwi) in get_tlb_entry() argument
255 split_tlb_entry_spec(env, v, dtlb, &vpn, &wi, &ei); in get_tlb_entry()
259 return xtensa_tlb_get_entry(env, dtlb, wi, ei); in get_tlb_entry()
263 xtensa_tlb_entry *entry, bool dtlb, in xtensa_tlb_set_entry_mmu() argument
268 entry->paddr = pte & xtensa_tlb_get_addr_mask(env, dtlb, wi); in xtensa_tlb_set_entry_mmu()
273 static void xtensa_tlb_set_entry(CPUXtensaState *env, bool dtlb, in xtensa_tlb_set_entry() argument
278 xtensa_tlb_entry *entry = xtensa_tlb_get_entry(env, dtlb, wi, ei); in xtensa_tlb_set_entry()
285 xtensa_tlb_set_entry_mmu(env, entry, dtlb, wi, ei, vpn, pte); in xtensa_tlb_set_entry()
290 __func__, dtlb, wi, ei); in xtensa_tlb_set_entry()
404 reset_tlb_mmu_all_ways(env, &env->config->dtlb, env->dtlb); in reset_mmu()
406 reset_tlb_mmu_ways56(env, &env->config->dtlb, env->dtlb); in reset_mmu()
422 reset_tlb_region_way0(env, env->dtlb); in reset_mmu()
447 uint32_t addr, bool dtlb, in xtensa_tlb_lookup() argument
450 const xtensa_tlb *tlb = dtlb ? in xtensa_tlb_lookup()
451 &env->config->dtlb : &env->config->itlb; in xtensa_tlb_lookup()
452 const xtensa_tlb_entry (*entry)[MAX_TLB_WAY_SIZE] = dtlb ? in xtensa_tlb_lookup()
453 env->dtlb : env->itlb; in xtensa_tlb_lookup()
461 split_tlb_entry_spec_way(env, addr, dtlb, &vpn, wi, &ei); in xtensa_tlb_lookup()
466 return dtlb ? in xtensa_tlb_lookup()
477 (dtlb ? LOAD_STORE_TLB_MISS_CAUSE : INST_TLB_MISS_CAUSE); in xtensa_tlb_lookup()
480 uint32_t HELPER(rtlb0)(CPUXtensaState *env, uint32_t v, uint32_t dtlb) in HELPER()
484 const xtensa_tlb_entry *entry = get_tlb_entry(env, v, dtlb, &wi); in HELPER()
485 return (entry->vaddr & get_vpn_mask(env, dtlb, wi)) | entry->asid; in HELPER()
491 uint32_t HELPER(rtlb1)(CPUXtensaState *env, uint32_t v, uint32_t dtlb) in HELPER()
493 const xtensa_tlb_entry *entry = get_tlb_entry(env, v, dtlb, NULL); in HELPER()
497 void HELPER(itlb)(CPUXtensaState *env, uint32_t v, uint32_t dtlb) in HELPER()
501 xtensa_tlb_entry *entry = get_tlb_entry(env, v, dtlb, &wi); in HELPER()
509 uint32_t HELPER(ptlb)(CPUXtensaState *env, uint32_t v, uint32_t dtlb) in HELPER()
515 int res = xtensa_tlb_lookup(env, v, dtlb, &wi, &ei, &ring); in HELPER()
520 return (v & 0xfffff000) | wi | (dtlb ? 0x10 : 0x8); in HELPER()
535 void HELPER(wtlb)(CPUXtensaState *env, uint32_t p, uint32_t v, uint32_t dtlb) in HELPER()
540 split_tlb_entry_spec(env, v, dtlb, &vpn, &wi, &ei); in HELPER()
541 xtensa_tlb_set_entry(env, dtlb, wi, ei, vpn, p); in HELPER()
784 bool dtlb = is_write != 2; in get_physical_addr_mmu() local
792 int ret = xtensa_tlb_lookup(env, vaddr, dtlb, &wi, &ei, &ring); in get_physical_addr_mmu()
798 split_tlb_entry_spec_way(env, vaddr, dtlb, &vpn, wi, &ei); in get_physical_addr_mmu()
802 xtensa_tlb_set_entry(env, dtlb, wi, ei, vpn, pte); in get_physical_addr_mmu()
807 xtensa_tlb_set_entry_mmu(env, &tmp_entry, dtlb, wi, ei, vpn, pte); in get_physical_addr_mmu()
817 entry = xtensa_tlb_get_entry(env, dtlb, wi, ei); in get_physical_addr_mmu()
821 return dtlb ? in get_physical_addr_mmu()
827 ~(dtlb ? PAGE_EXEC : PAGE_READ | PAGE_WRITE); in get_physical_addr_mmu()
829 return dtlb ? in get_physical_addr_mmu()
836 *paddr = entry->paddr | (vaddr & ~xtensa_tlb_get_addr_mask(env, dtlb, wi)); in get_physical_addr_mmu()
837 *page_size = ~xtensa_tlb_get_addr_mask(env, dtlb, wi) + 1; in get_physical_addr_mmu()
883 bool dtlb = is_write != 2; in get_physical_addr_region() local
887 xtensa_tlb_get_entry(env, dtlb, wi, ei); in get_physical_addr_region()
891 return dtlb ? in get_physical_addr_region()
1057 static void dump_tlb(CPUXtensaState *env, bool dtlb) in dump_tlb() argument
1061 dtlb ? &env->config->dtlb : &env->config->itlb; in dump_tlb()
1067 uint32_t sz = ~xtensa_tlb_get_addr_mask(env, dtlb, wi) + 1; in dump_tlb()
1081 xtensa_tlb_get_entry(env, dtlb, wi, ei); in dump_tlb()