4 #include <linux/init.h>
6 #define CACHELINE_SZC #32
8 #ifndef CONFIG_CPU_ARM926T
9 #error CPU not supported
15 .global warm_cop_clean_inval_d
16 warm_cop_clean_inval_d:
17 0: mrc p15, 0, r15, c7, c14, 3 @ test, clean and invalidate
22 .global warm_cop_clean_d
24 0: mrc p15, 0, r15, c7, c10, 3 @ test and clean
29 .global warm_cop_inval_d
32 mcr p15, 0, r0, c7, c6, 0
36 .global warm_cop_inval_i
39 mcr p15, 0, r0, c7, c5, 0
43 .global warm_cop_drain_wb
46 mcr p15, 0, r0, c7, c10, 4
50 #define R_CLEAN_INVAL_D \
51 mcr p15, 0, r0, c7, c14, 1
54 mcr p15, 0, r0, c7, c10, 1
57 mcr p15, 0, r0, c7, c6, 1
60 mcr p15, 0, r0, c7, c5, 1
62 #define WARM_COP_MK_RANGE_FUNC(name,f1,f2) \
65 bic r0, r0, CACHELINE_SZC-1 ;\
68 add r0, r0, CACHELINE_SZC ;\
69 subs r1, r1, CACHELINE_SZC ;\
73 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_di, R_CLEAN_INVAL_D, R_INVAL_I)
74 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_d, R_CLEAN_INVAL_D, )
75 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_i, R_CLEAN_D, R_INVAL_I)
76 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d, R_CLEAN_D, )
77 WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_di, R_INVAL_D, R_INVAL_I)
78 WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_d, R_INVAL_D, )
79 WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_i, R_INVAL_I, )
82 .global warm_drain_wb_inval_tlb
83 warm_drain_wb_inval_tlb:
85 mcr p15, 0, r0, c7, c10, 4
86 mcr p15, 0, r0, c8, c7, 0