4 * Author: GraÅžvydas "notaz" Ignotas
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.
11 #ifndef AUTOCONF_INCLUDED
12 #include <linux/config.h>
15 #define CACHELINE_SZC #32
17 #if !defined(CONFIG_CPU_ARM926T) && !defined(CONFIG_CPU_ARM920T)
18 #error CPU not supported
24 .global warm_cop_clean_inval_d
25 .global warm_cop_clean_d
27 #ifdef CONFIG_CPU_ARM926T
29 warm_cop_clean_inval_d:
30 0: mrc p15, 0, r15, c7, c14, 3 @ test, clean and invalidate
35 0: mrc p15, 0, r15, c7, c10, 3 @ test and clean
41 /* comes from Linux kernel code */
42 .macro warm_cop_wholecache_dop crm
43 mov r1, #0x000000e0 @ 8 segments
44 1: orr r3, r1, #0xfc000000 @ 64 entries
45 2: mcr p15, 0, r3, c7, \crm, 2 @ D index op
47 bcs 2b @ entries 63 to 0
49 bcs 1b @ segments 7 to 0
53 warm_cop_clean_inval_d:
54 warm_cop_wholecache_dop c14
57 warm_cop_wholecache_dop c10
61 .global warm_cop_inval_d
64 mcr p15, 0, r0, c7, c6, 0
68 .global warm_cop_inval_i
71 mcr p15, 0, r0, c7, c5, 0
75 .global warm_cop_drain_wb
78 mcr p15, 0, r0, c7, c10, 4
82 #define R_CLEAN_INVAL_D \
83 mcr p15, 0, r0, c7, c14, 1
86 mcr p15, 0, r0, c7, c10, 1
89 mcr p15, 0, r0, c7, c6, 1
92 mcr p15, 0, r0, c7, c5, 1
94 #define WARM_COP_MK_RANGE_FUNC(name,f1,f2) \
97 bic r0, r0, CACHELINE_SZC-1 ;\
100 add r0, r0, CACHELINE_SZC ;\
101 subs r1, r1, CACHELINE_SZC ;\
105 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_di, R_CLEAN_INVAL_D, R_INVAL_I)
106 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_d, R_CLEAN_INVAL_D, )
107 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d_inval_i, R_CLEAN_D, R_INVAL_I)
108 WARM_COP_MK_RANGE_FUNC(warm_cop_r_clean_d, R_CLEAN_D, )
109 WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_di, R_INVAL_D, R_INVAL_I)
110 WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_d, R_INVAL_D, )
111 WARM_COP_MK_RANGE_FUNC(warm_cop_r_inval_i, R_INVAL_I, )
114 .global warm_drain_wb_inval_tlb
115 warm_drain_wb_inval_tlb:
117 mcr p15, 0, r0, c7, c10, 4
118 mcr p15, 0, r0, c8, c7, 0
122 @ vim:filetype=armasm