Lines Matching +full:non +full:- +full:linear
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * this does -not- include 603 however which shares the implementation with
9 * -- BenH
15 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
40 #include <asm/code-patching.h>
48 * This struct lists the sw-supported page sizes. The hardawre MMU may support
113 /* The variables below are currently only used on 64-bit Book3E
122 unsigned long linear_map_top; /* Top of linear mapping */
136 /* next_tlbcam_idx is used to round-robin tlbcam entry assignment */
144 * - flush_tlb_mm(mm) flushes the specified mm context TLB's
145 * - flush_tlb_page(vma, vmaddr) flushes one page
146 * - flush_tlb_range(vma, start, end) flushes a range of pages
147 * - flush_tlb_kernel_range(start, end) flushes kernel pages
149 * - local_* variants of page and mm only apply to the current
155 * These are the base non-SMP variants of page and mm flushing
162 pid = mm->context.id; in local_flush_tlb_mm()
175 pid = mm ? mm->context.id : 0; in __local_flush_tlb_page()
183 __local_flush_tlb_page(vma ? vma->vm_mm : NULL, vmaddr, in local_flush_tlb_page()
198 * And here are the SMP non-local implementations
215 _tlbil_pid(p ? p->pid : 0); in do_flush_tlb_mm_ipi()
222 _tlbil_va(p->addr, p->pid, p->tsize, p->ind); in do_flush_tlb_page_ipi()
230 * - our context is being stolen (PID -> NO_CONTEXT) on another CPU
231 * - we are invaliating some target that isn't currently running here
233 * - some other CPU is re-acquiring a lost PID for this mm
247 pid = mm->context.id; in flush_tlb_mm()
276 pid = mm->context.id; in __flush_tlb_page()
314 __flush_tlb_page(vma ? vma->vm_mm : NULL, vmaddr, in flush_tlb_page()
349 if (end - start == PAGE_SIZE && !(start & ~PAGE_MASK)) in flush_tlb_range()
352 flush_tlb_mm(vma->vm_mm); in flush_tlb_range()
358 flush_tlb_mm(tlb->mm); in tlb_flush()
362 * Below are functions specific to the 64-bit variant of Book3E though that
369 * Handling of virtual linear page tables or indirect TLB entries
386 __flush_tlb_page(tlb->mm, start, tsize, 1); in tlb_flush_pgtable()
394 vpte = (vpte >> (PAGE_SHIFT - 3)) & ~0xffful; in tlb_flush_pgtable()
396 __flush_tlb_page(tlb->mm, vpte, tsize, 0); in tlb_flush_pgtable()
423 shift = def->shift; in setup_page_sizes()
429 shift = (shift - 10) >> 1; in setup_page_sizes()
432 def->flags |= MMU_PAGE_SIZE_DIRECT; in setup_page_sizes()
460 if (!def->shift) in setup_page_sizes()
463 if (tlb1ps & (1U << (def->shift - 10))) { in setup_page_sizes()
464 def->flags |= MMU_PAGE_SIZE_DIRECT; in setup_page_sizes()
467 def->flags |= MMU_PAGE_SIZE_INDIRECT; in setup_page_sizes()
483 if (tlb0ps & (1U << (def->shift - 10))) in setup_page_sizes()
484 def->flags |= MMU_PAGE_SIZE_DIRECT; in setup_page_sizes()
511 if (ps == (def->shift - 10)) in setup_page_sizes()
512 def->flags |= MMU_PAGE_SIZE_INDIRECT; in setup_page_sizes()
513 if (sps == (def->shift - 10)) in setup_page_sizes()
514 def->ind = ps + 10; in setup_page_sizes()
529 if (def->flags == 0) { in setup_page_sizes()
530 def->shift = 0; in setup_page_sizes()
533 pr_info(" %8ld KB as %s\n", 1ul << (def->shift - 10), in setup_page_sizes()
534 __page_type_names[def->flags & 0x3]); in setup_page_sizes()
598 /* use a quarter of the TLBCAM for bolted linear map */ in early_init_this_mmu()
657 /* Set the global containing the top of the linear mapping in early_init_mmu_global()
670 * Limit memory so we dont have linear faults. in early_mmu_set_memory_limit()
674 * do this because highmem is not supported on 64-bit. in early_mmu_set_memory_limit()
699 /* On non-FSL Embedded 64-bit, we adjust the RMA size to match in setup_initial_memory_limit()
704 * on FSL Embedded 64-bit, usually all RAM is bolted, but with in setup_initial_memory_limit()
707 * highmem on 64-bit). We limit ppc64_rma_size to what would be in setup_initial_memory_limit()
721 /* use a quarter of the TLBCAM for bolted linear map */ in setup_initial_memory_limit()
741 of_get_flat_dt_prop(root, "cooperative-partition", NULL)) in early_init_mmu()