MOXA linux-2.6.x / linux-2.6.9-uc0 from sdlinux-moxaart.tgz
[linux-2.6.9-moxart.git] / arch / arm / mm / tlb-v4wbi.S
blobcc4428fef7da3c5f01d3bcc76e5410d377cb03fd
1 /*
2  *  linux/arch/arm/mm/tlbv4wbi.S
3  *
4  *  Copyright (C) 1997-2002 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  *  ARM architecture version 4 and version 5 TLB handling functions.
11  *  These assume a split I/D TLBs, with a write buffer.
12  *
13  *  Processors: ARM920 ARM922 ARM925 ARM926 XScale
14  */
15 #include <linux/linkage.h>
16 #include <linux/init.h>
17 #include <asm/constants.h>
18 #include <asm/tlbflush.h>
19 #include "proc-macros.S"
22  *      v4wb_flush_user_tlb_range(start, end, mm)
23  *
24  *      Invalidate a range of TLB entries in the specified address space.
25  *
26  *      - start - range start address
27  *      - end   - range end address
28  *      - mm    - mm_struct describing address space
29  */
30         .align  5
31 ENTRY(v4wbi_flush_user_tlb_range)
32         vma_vm_mm ip, r2
33         act_mm  r3                              @ get current->active_mm
34         eors    r3, ip, r3                      @ == mm ?
35         movne   pc, lr                          @ no, we dont do anything
36         mov     r3, #0
37         mcr     p15, 0, r3, c7, c10, 4          @ drain WB
38         vma_vm_flags r2, r2
39         bic     r0, r0, #0x0ff
40         bic     r0, r0, #0xf00
41 #if 0   /* mask by Victor Yu. 06-09-2005 */
42 1:      tst     r2, #VM_EXEC
43         mcrne   p15, 0, r0, c8, c5, 1           @ invalidate I TLB entry
44         mcr     p15, 0, r0, c8, c6, 1           @ invalidate D TLB entry
45         add     r0, r0, #PAGE_SZ
46         cmp     r0, r1
47         blo     1b
48 #else   /* add by Victor Yu. 06-09-2005 */
49 1:      mcr     p15, 0, r0, c8, c7, 1           @ invalidate UTLB entry
50         add     r0, r0, #PAGE_SZ
51         cmp     r0, r1
52         bls     1b                              @ Luke Lee 05/19/2005 blo -> bls
54 #ifdef CONFIG_CPU_FA_BTB
55         mcr     p15, 0, r3, c7, c5, 6           @ invalidate BTB
56         nop
57         nop
58 #endif  /* CONFIG_CPU_FA_BTB */
59 #endif
60         mov     pc, lr
62 ENTRY(v4wbi_flush_kern_tlb_range)
63 #if 0   /* mask by Victor Yu. 06-09-2005 */
64         mov     r3, #0
65         mcr     p15, 0, r3, c7, c10, 4          @ drain WB
66         bic     r0, r0, #0x0ff
67         bic     r0, r0, #0xf00
68 1:      mcr     p15, 0, r0, c8, c5, 1           @ invalidate I TLB entry
69         mcr     p15, 0, r0, c8, c6, 1           @ invalidate D TLB entry
70         add     r0, r0, #PAGE_SZ
71         cmp     r0, r1
72         blo     1b
73         mov     pc, lr
74 #else   /* add by Victor Yu. 06-09-2005 */
75         mov     r3, #0
76         mcr     p15, 0, r3, c7, c10, 0          @ clean Dcache all 06/03/2005
77 #ifndef CONFIG_CPU_FA_WB_DISABLE
78         mcr     p15, 0, r3, c7, c10, 4          @ drain WB
79 #endif
81         bic     r0, r0, #0x0ff
82         bic     r0, r0, #0xf00
84         mcr     p15, 0, r0, c8, c7, 1           @ invalidate UTLB entry
85         add     r0, r0, #PAGE_SZ
86         cmp     r0, r1
87         bls     1b                              @ Luke Lee 05/19/2005 blo -> bls
89 #ifdef CONFIG_CPU_FA_BTB
90         mcr     p15, 0, r3, c7, c5, 6           @ invalidate BTB
91         nop
92         nop
93 #endif
94         mov     pc, lr
95 #endif
97         __INITDATA
99         .type   v4wbi_tlb_fns, #object
100 ENTRY(v4wbi_tlb_fns)
101         .long   v4wbi_flush_user_tlb_range
102         .long   v4wbi_flush_kern_tlb_range
103         .long   v4wbi_tlb_flags
104         .size   v4wbi_tlb_fns, . - v4wbi_tlb_fns