198a1649 |
1 | /* vim:filetype=armasm |
2 | */ |
3 | |
4 | #include <linux/init.h> |
5 | |
6 | #ifndef CONFIG_CPU_ARM926T |
7 | #error CPU not supported |
8 | #endif |
9 | |
10 | .text |
11 | .align 2 |
12 | |
13 | .global warm_cop_clean_inval_d |
14 | warm_cop_clean_inval_d: |
15 | 0: mrc p15, 0, r15, c7, c14, 3 @ test, clean and invalidate |
16 | bne 0b |
17 | bx lr |
18 | |
19 | |
20 | .global warm_cop_clean_d |
21 | warm_cop_clean_d: |
22 | 0: mrc p15, 0, r15, c7, c10, 3 @ test and clean |
23 | bne 0b |
24 | bx lr |
25 | |
26 | |
27 | .global warm_cop_inval_d |
28 | warm_cop_inval_d: |
29 | mov r0, #0 |
30 | mcr p15, 0, r0, c7, c6, 0 |
31 | bx lr |
32 | |
33 | |
34 | .global warm_cop_inval_i |
35 | warm_cop_inval_i: |
36 | mov r0, #0 |
37 | mcr p15, 0, r0, c7, c5, 0 |
38 | bx lr |
39 | |
40 | |
41 | .global warm_cop_drain_wb |
42 | warm_cop_drain_wb: |
43 | mov r0, #0 |
44 | mcr p15, 0, r0, c7, c10, 4 |
45 | bx lr |
46 | |
47 | |
48 | #define R_CLEAN_INVAL_D \ |
49 | mcr p15, 0, r0, c7, c14, 1 |
50 | |
51 | #define R_CLEAN_D \ |
52 | mcr p15, 0, r0, c7, c10, 1 |
53 | |
54 | #define R_INVAL_D \ |
55 | mcr p15, 0, r0, c7, c6, 1 |
56 | |
57 | #define R_INVAL_I \ |
58 | mcr p15, 0, r0, c7, c5, 1 |
59 | |
60 | #define WARM_COP_MK_RANGE_FUNC(name,f1,f2) \ |
61 | .global name ;\ |
62 | name: ;\ |
63 | bic r0, r0, #32-1 ;\ |
64 | 0: f1 ;\ |
65 | f2 ;\ |
66 | add r0, r0, #32 ;\ |
67 | subs r1, r1, #32 ;\ |
68 | bgt 0b ;\ |
69 | bx lr |
70 | |
71 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_di, R_CLEAN_INVAL_D, R_INVAL_I) |
72 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_d, R_CLEAN_INVAL_D, ) |
73 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_i, R_CLEAN_D, R_INVAL_I) |
74 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d, R_CLEAN_D, ) |
75 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_di, R_INVAL_D, R_INVAL_I) |
76 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_d, R_INVAL_D, ) |
77 | WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_i, R_INVAL_I, ) |
78 | |
79 | |
80 | .global warm_drain_wb_inval_tlb |
81 | warm_drain_wb_inval_tlb: |
82 | mov r0, #0 |
83 | mcr p15, 0, r0, c7, c10, 4 |
84 | mcr p15, 0, r0, c8, c7, 0 |
85 | bx lr |
86 | |