xref: /rk3399_rockchip-uboot/arch/m68k/include/asm/cache.h (revision 819833af39a91fa1c1e8252862bbda6f5a602f7b)
1*819833afSPeter Tyser /*
2*819833afSPeter Tyser  * ColdFire cache
3*819833afSPeter Tyser  *
4*819833afSPeter Tyser  * Copyright (C) 2004-2010 Freescale Semiconductor, Inc.
5*819833afSPeter Tyser  * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
6*819833afSPeter Tyser  *
7*819833afSPeter Tyser  * See file CREDITS for list of people who contributed to this
8*819833afSPeter Tyser  * project.
9*819833afSPeter Tyser  *
10*819833afSPeter Tyser  * This program is free software; you can redistribute it and/or
11*819833afSPeter Tyser  * modify it under the terms of the GNU General Public License as
12*819833afSPeter Tyser  * published by the Free Software Foundation; either version 2 of
13*819833afSPeter Tyser  * the License, or (at your option) any later version.
14*819833afSPeter Tyser  *
15*819833afSPeter Tyser  * This program is distributed in the hope that it will be useful,
16*819833afSPeter Tyser  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*819833afSPeter Tyser  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*819833afSPeter Tyser  * GNU General Public License for more details.
19*819833afSPeter Tyser  *
20*819833afSPeter Tyser  * You should have received a copy of the GNU General Public License
21*819833afSPeter Tyser  * along with this program; if not, write to the Free Software
22*819833afSPeter Tyser  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23*819833afSPeter Tyser  * MA 02111-1307 USA
24*819833afSPeter Tyser  */
25*819833afSPeter Tyser 
26*819833afSPeter Tyser #ifndef __CACHE_H
27*819833afSPeter Tyser #define __CACHE_H
28*819833afSPeter Tyser 
29*819833afSPeter Tyser #if defined(CONFIG_MCF520x) || defined(CONFIG_MCF523x) || \
30*819833afSPeter Tyser     defined(CONFIG_MCF52x2) || defined(CONFIG_MCF5227x)
31*819833afSPeter Tyser #define CONFIG_CF_V2
32*819833afSPeter Tyser #endif
33*819833afSPeter Tyser 
34*819833afSPeter Tyser #if defined(CONFIG_MCF532x) || defined(CONFIG_MCF5301x)
35*819833afSPeter Tyser #define CONFIG_CF_V3
36*819833afSPeter Tyser #endif
37*819833afSPeter Tyser 
38*819833afSPeter Tyser #if defined(CONFIG_MCF547x_8x) || defined(CONFIG_MCF5445x)
39*819833afSPeter Tyser #define CONFIG_CF_V4
40*819833afSPeter Tyser #if defined(CONFIG_MCF5441x)
41*819833afSPeter Tyser #define CONFIG_CF_V4E		/* Four Extra ACRn */
42*819833afSPeter Tyser #endif
43*819833afSPeter Tyser #endif
44*819833afSPeter Tyser 
45*819833afSPeter Tyser /* ***** CACR ***** */
46*819833afSPeter Tyser /* V2 Core */
47*819833afSPeter Tyser #ifdef CONFIG_CF_V2
48*819833afSPeter Tyser 
49*819833afSPeter Tyser #define CF_CACR_CENB		(1 << 31)
50*819833afSPeter Tyser #define CF_CACR_CPD		(1 << 28)
51*819833afSPeter Tyser #define CF_CACR_CFRZ		(1 << 27)
52*819833afSPeter Tyser #define CF_CACR_CEIB		(1 << 10)
53*819833afSPeter Tyser #define CF_CACR_DCM		(1 << 9)
54*819833afSPeter Tyser #define CF_CACR_DBWE		(1 << 8)
55*819833afSPeter Tyser 
56*819833afSPeter Tyser #if defined(CONFIG_MCF5249) || defined(CONFIG_MCF5253)
57*819833afSPeter Tyser #define CF_CACR_DWP		(1 << 6)
58*819833afSPeter Tyser #else
59*819833afSPeter Tyser #define CF_CACR_CINV		(1 << 24)
60*819833afSPeter Tyser #define CF_CACR_DISI		(1 << 23)
61*819833afSPeter Tyser #define CF_CACR_DISD		(1 << 22)
62*819833afSPeter Tyser #define CF_CACR_INVI		(1 << 21)
63*819833afSPeter Tyser #define CF_CACR_INVD		(1 << 20)
64*819833afSPeter Tyser #define CF_CACR_DWP		(1 << 5)
65*819833afSPeter Tyser #define CF_CACR_EUSP		(1 << 4)
66*819833afSPeter Tyser #endif				/* CONFIG_MCF5249 || CONFIG_MCF5253 */
67*819833afSPeter Tyser 
68*819833afSPeter Tyser #endif				/* CONFIG_CF_V2 */
69*819833afSPeter Tyser 
70*819833afSPeter Tyser /* V3 Core */
71*819833afSPeter Tyser #ifdef CONFIG_CF_V3
72*819833afSPeter Tyser 
73*819833afSPeter Tyser #define CF_CACR_EC		(1 << 31)
74*819833afSPeter Tyser #define CF_CACR_ESB		(1 << 29)
75*819833afSPeter Tyser #define CF_CACR_DPI		(1 << 28)
76*819833afSPeter Tyser #define CF_CACR_HLCK		(1 << 27)
77*819833afSPeter Tyser #define CF_CACR_CINVA		(1 << 24)
78*819833afSPeter Tyser #define CF_CACR_DNFB		(1 << 10)
79*819833afSPeter Tyser #define CF_CACR_DCM_UNMASK	0xFFFFFCFF
80*819833afSPeter Tyser #define CF_CACR_DCM_WT		(0 << 8)
81*819833afSPeter Tyser #define CF_CACR_DCM_CB		(1 << 8)
82*819833afSPeter Tyser #define CF_CACR_DCM_P		(2 << 8)
83*819833afSPeter Tyser #define CF_CACR_DCM_IP		(3 << 8)
84*819833afSPeter Tyser #define CF_CACR_DW		(1 << 5)
85*819833afSPeter Tyser #define CF_CACR_EUSP		(1 << 4)
86*819833afSPeter Tyser 
87*819833afSPeter Tyser #endif				/* CONFIG_CF_V3 */
88*819833afSPeter Tyser 
89*819833afSPeter Tyser /* V4 Core */
90*819833afSPeter Tyser #ifdef CONFIG_CF_V4
91*819833afSPeter Tyser 
92*819833afSPeter Tyser #define CF_CACR_DEC		(1 << 31)
93*819833afSPeter Tyser #define CF_CACR_DW		(1 << 30)
94*819833afSPeter Tyser #define CF_CACR_DESB		(1 << 29)
95*819833afSPeter Tyser #define CF_CACR_DDPI		(1 << 28)
96*819833afSPeter Tyser #define CF_CACR_DHLCK		(1 << 27)
97*819833afSPeter Tyser #define CF_CACR_DDCM_UNMASK	(0xF9FFFFFF)
98*819833afSPeter Tyser #define CF_CACR_DDCM_WT		(0 << 25)
99*819833afSPeter Tyser #define CF_CACR_DDCM_CB		(1 << 25)
100*819833afSPeter Tyser #define CF_CACR_DDCM_P		(2 << 25)
101*819833afSPeter Tyser #define CF_CACR_DDCM_IP		(3 << 25)
102*819833afSPeter Tyser #define CF_CACR_DCINVA		(1 << 24)
103*819833afSPeter Tyser 
104*819833afSPeter Tyser #define CF_CACR_DDSP		(1 << 23)
105*819833afSPeter Tyser #define CF_CACR_BEC		(1 << 19)
106*819833afSPeter Tyser #define CF_CACR_BCINVA		(1 << 18)
107*819833afSPeter Tyser #define CF_CACR_IEC		(1 << 15)
108*819833afSPeter Tyser #define CF_CACR_DNFB		(1 << 13)
109*819833afSPeter Tyser #define CF_CACR_IDPI		(1 << 12)
110*819833afSPeter Tyser #define CF_CACR_IHLCK		(1 << 11)
111*819833afSPeter Tyser #define CF_CACR_IDCM		(1 << 10)
112*819833afSPeter Tyser #define CF_CACR_ICINVA		(1 << 8)
113*819833afSPeter Tyser #define CF_CACR_IDSP		(1 << 7)
114*819833afSPeter Tyser #define CF_CACR_EUSP		(1 << 5)
115*819833afSPeter Tyser 
116*819833afSPeter Tyser #ifdef CONFIG_MCF5445x
117*819833afSPeter Tyser #define CF_CACR_IVO		(1 << 20)
118*819833afSPeter Tyser #define CF_CACR_SPA		(1 << 14)
119*819833afSPeter Tyser #else
120*819833afSPeter Tyser #define CF_CACR_DF		(1 << 4)
121*819833afSPeter Tyser #endif
122*819833afSPeter Tyser 
123*819833afSPeter Tyser #endif				/* CONFIG_CF_V4 */
124*819833afSPeter Tyser 
125*819833afSPeter Tyser /* ***** ACR ***** */
126*819833afSPeter Tyser #define CF_ACR_ADR_UNMASK	(0x00FFFFFF)
127*819833afSPeter Tyser #define CF_ACR_ADR(x)		((x & 0xFF) << 24)
128*819833afSPeter Tyser #define CF_ACR_ADRMSK_UNMASK	(0xFF00FFFF)
129*819833afSPeter Tyser #define CF_ACR_ADRMSK(x)	((x & 0xFF) << 16)
130*819833afSPeter Tyser #define CF_ACR_EN		(1 << 15)
131*819833afSPeter Tyser #define CF_ACR_SM_UNMASK	(0xFFFF9FFF)
132*819833afSPeter Tyser #define CF_ACR_SM_UM		(0 << 13)
133*819833afSPeter Tyser #define CF_ACR_SM_SM		(1 << 13)
134*819833afSPeter Tyser #define CF_ACR_SM_ALL		(3 << 13)
135*819833afSPeter Tyser #define CF_ACR_WP		(1 << 2)
136*819833afSPeter Tyser 
137*819833afSPeter Tyser /* V2 Core */
138*819833afSPeter Tyser #ifdef CONFIG_CF_V2
139*819833afSPeter Tyser #define CF_ACR_CM		(1 << 6)
140*819833afSPeter Tyser #define CF_ACR_BWE		(1 << 5)
141*819833afSPeter Tyser #else
142*819833afSPeter Tyser /* V3 & V4 */
143*819833afSPeter Tyser #define CF_ACR_CM_UNMASK	(0xFFFFFF9F)
144*819833afSPeter Tyser #define CF_ACR_CM_WT		(0 << 5)
145*819833afSPeter Tyser #define CF_ACR_CM_CB		(1 << 5)
146*819833afSPeter Tyser #define CF_ACR_CM_P		(2 << 5)
147*819833afSPeter Tyser #define CF_ACR_CM_IP		(3 << 5)
148*819833afSPeter Tyser #endif				/* CONFIG_CF_V2 */
149*819833afSPeter Tyser 
150*819833afSPeter Tyser /* V4 Core */
151*819833afSPeter Tyser #ifdef CONFIG_CF_V4
152*819833afSPeter Tyser #define CF_ACR_AMM		(1 << 10)
153*819833afSPeter Tyser #define CF_ACR_SP		(1 << 3)
154*819833afSPeter Tyser #endif				/* CONFIG_CF_V4 */
155*819833afSPeter Tyser 
156*819833afSPeter Tyser 
157*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ICACR
158*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ICACR	0
159*819833afSPeter Tyser #endif
160*819833afSPeter Tyser 
161*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_DCACR
162*819833afSPeter Tyser #ifdef CONFIG_SYS_CACHE_ICACR
163*819833afSPeter Tyser #define CONFIG_SYS_CACHE_DCACR	CONFIG_SYS_CACHE_ICACR
164*819833afSPeter Tyser #else
165*819833afSPeter Tyser #define CONFIG_SYS_CACHE_DCACR	0
166*819833afSPeter Tyser #endif
167*819833afSPeter Tyser #endif
168*819833afSPeter Tyser 
169*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR0
170*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR0	0
171*819833afSPeter Tyser #endif
172*819833afSPeter Tyser 
173*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR1
174*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR1	0
175*819833afSPeter Tyser #endif
176*819833afSPeter Tyser 
177*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR2
178*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR2	0
179*819833afSPeter Tyser #endif
180*819833afSPeter Tyser 
181*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR3
182*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR3	0
183*819833afSPeter Tyser #endif
184*819833afSPeter Tyser 
185*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR4
186*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR4	0
187*819833afSPeter Tyser #endif
188*819833afSPeter Tyser 
189*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR5
190*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR5	0
191*819833afSPeter Tyser #endif
192*819833afSPeter Tyser 
193*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR6
194*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR6	0
195*819833afSPeter Tyser #endif
196*819833afSPeter Tyser 
197*819833afSPeter Tyser #ifndef CONFIG_SYS_CACHE_ACR7
198*819833afSPeter Tyser #define CONFIG_SYS_CACHE_ACR7	0
199*819833afSPeter Tyser #endif
200*819833afSPeter Tyser 
201*819833afSPeter Tyser #define CF_ADDRMASK(x)		(((x > 0x10) ? ((x >> 4) - 1) : (x)) << 16)
202*819833afSPeter Tyser 
203*819833afSPeter Tyser #ifndef __ASSEMBLY__		/* put C only stuff in this section */
204*819833afSPeter Tyser 
205*819833afSPeter Tyser void icache_invalid(void);
206*819833afSPeter Tyser void dcache_invalid(void);
207*819833afSPeter Tyser 
208*819833afSPeter Tyser #endif
209*819833afSPeter Tyser 
210*819833afSPeter Tyser #endif				/* __CACHE_H */
211