xref: /openbmc/linux/arch/nios2/include/asm/tlbflush.h (revision 1ccea77e)
11ccea77eSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2c983e92fSLey Foon Tan /*
3c983e92fSLey Foon Tan  * Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch>
4c983e92fSLey Foon Tan  */
5c983e92fSLey Foon Tan 
6c983e92fSLey Foon Tan #ifndef _ASM_NIOS2_TLBFLUSH_H
7c983e92fSLey Foon Tan #define _ASM_NIOS2_TLBFLUSH_H
8c983e92fSLey Foon Tan 
9c983e92fSLey Foon Tan struct mm_struct;
10c983e92fSLey Foon Tan 
11c983e92fSLey Foon Tan /*
12c983e92fSLey Foon Tan  * TLB flushing:
13c983e92fSLey Foon Tan  *
14c983e92fSLey Foon Tan  *  - flush_tlb_all() flushes all processes TLB entries
15c983e92fSLey Foon Tan  *  - flush_tlb_mm(mm) flushes the specified mm context TLB entries
16c983e92fSLey Foon Tan  *  - flush_tlb_range(vma, start, end) flushes a range of pages
17195568a1SNicholas Piggin  *  - flush_tlb_page(vma, address) flushes a page
18c983e92fSLey Foon Tan  *  - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
19195568a1SNicholas Piggin  *  - flush_tlb_kernel_page(address) flushes a kernel page
203ac23944SNicholas Piggin  *
213ac23944SNicholas Piggin  *  - reload_tlb_page(vma, address, pte) flushes the TLB for address like
223ac23944SNicholas Piggin  *    flush_tlb_page, then replaces it with a TLB for pte.
23c983e92fSLey Foon Tan  */
24c983e92fSLey Foon Tan extern void flush_tlb_all(void);
25c983e92fSLey Foon Tan extern void flush_tlb_mm(struct mm_struct *mm);
26c983e92fSLey Foon Tan extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
27c983e92fSLey Foon Tan 			    unsigned long end);
28c983e92fSLey Foon Tan extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
29c983e92fSLey Foon Tan 
flush_tlb_page(struct vm_area_struct * vma,unsigned long address)30c983e92fSLey Foon Tan static inline void flush_tlb_page(struct vm_area_struct *vma,
31195568a1SNicholas Piggin 				  unsigned long address)
32c983e92fSLey Foon Tan {
33195568a1SNicholas Piggin 	flush_tlb_range(vma, address, address + PAGE_SIZE);
34195568a1SNicholas Piggin }
35195568a1SNicholas Piggin 
flush_tlb_kernel_page(unsigned long address)36195568a1SNicholas Piggin static inline void flush_tlb_kernel_page(unsigned long address)
37195568a1SNicholas Piggin {
38195568a1SNicholas Piggin 	flush_tlb_kernel_range(address, address + PAGE_SIZE);
39c983e92fSLey Foon Tan }
40c983e92fSLey Foon Tan 
413ac23944SNicholas Piggin extern void reload_tlb_page(struct vm_area_struct *vma, unsigned long addr,
423ac23944SNicholas Piggin 			    pte_t pte);
433ac23944SNicholas Piggin 
44c983e92fSLey Foon Tan #endif /* _ASM_NIOS2_TLBFLUSH_H */
45