// On entry here we are now running with the proper virtual address // mappings, except that the selfmapping installed above needs to be // reverted. void boot_after_mmu(int selfmap_index, uint32_t old_pde) { // Restore mapping overwritten by self-mapping uint32_t *pgd = (uint32_t *)&__page_dir_virt__; pgd[selfmap_index] = old_pde; mmu_invalidate_tlb(); // Run the main CRT startup code _mainCRTStartup(); }
void HELPER(wcsr_tlbvaddr)(CPULM32State *env, uint32_t tlbvaddr) { env->tlbvaddr = tlbvaddr; switch (tlbvaddr & TLB_CMD_MASK) { case ITLB_NOP: case DTLB_NOP: break; case ITLB_INVALIDATE: mmu_invalidate_tlb(env, env->mmu.itlb); break; case DTLB_INVALIDATE: mmu_invalidate_tlb(env, env->mmu.dtlb); break; case ITLB_FLUSH: mmu_flush_tlb(env, env->mmu.itlb); break; case DTLB_FLUSH: mmu_flush_tlb(env, env->mmu.dtlb); break; } }