1
2
3
4
5
6
7
8
9
10
11
12
13
14#include <linux/init.h>
15#include <linux/linkage.h>
16#include <asm/assembler.h>
17#include <asm/asm-offsets.h>
18#include <asm/page.h>
19#include <asm/tlbflush.h>
20#include "proc-macros.S"
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35ENTRY(v7wbi_flush_user_tlb_range)
36 vma_vm_mm r3, r2 @ get vma->vm_mm
37 mmid r3, r3 @ get vm_mm->context.id
38 dsb ish
39 mov r0, r0, lsr
40 mov r1, r1, lsr
41 asid r3, r3 @ mask ASID
42#ifdef CONFIG_ARM_ERRATA_720789
43 ALT_SMP(W(mov) r3,
44 ALT_UP(W(nop) )
45#endif
46 orr r0, r3, r0, lsl
47 mov r1, r1, lsl
481:
49#ifdef CONFIG_ARM_ERRATA_720789
50 ALT_SMP(mcr p15, 0, r0, c8, c3, 3) @ TLB invalidate U MVA all ASID (shareable)
51#else
52 ALT_SMP(mcr p15, 0, r0, c8, c3, 1) @ TLB invalidate U MVA (shareable)
53#endif
54 ALT_UP(mcr p15, 0, r0, c8, c7, 1) @ TLB invalidate U MVA
55
56 add r0, r0,
57 cmp r0, r1
58 blo 1b
59 dsb ish
60 ret lr
61ENDPROC(v7wbi_flush_user_tlb_range)
62
63
64
65
66
67
68
69
70
71ENTRY(v7wbi_flush_kern_tlb_range)
72 dsb ish
73 mov r0, r0, lsr
74 mov r1, r1, lsr
75 mov r0, r0, lsl
76 mov r1, r1, lsl
771:
78#ifdef CONFIG_ARM_ERRATA_720789
79 ALT_SMP(mcr p15, 0, r0, c8, c3, 3) @ TLB invalidate U MVA all ASID (shareable)
80#else
81 ALT_SMP(mcr p15, 0, r0, c8, c3, 1) @ TLB invalidate U MVA (shareable)
82#endif
83 ALT_UP(mcr p15, 0, r0, c8, c7, 1) @ TLB invalidate U MVA
84 add r0, r0,
85 cmp r0, r1
86 blo 1b
87 dsb ish
88 isb
89 ret lr
90ENDPROC(v7wbi_flush_kern_tlb_range)
91
92 __INIT
93
94
95 define_tlb_functions v7wbi, v7wbi_tlb_flags_up, flags_smp=v7wbi_tlb_flags_smp
96