blob: bce922431ce6415ac2be38f8a67bb72baf1dba8f [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2001
8*
9*****************************************************************************/
10
11/*****************************************************************************
12 *
13 * Filename:
14 * ---------
15 * cache_sw.h
16 *
17 * Project:
18 * --------
19 * Maui_Software
20 *
21 * Description:
22 * ------------
23 * This Module defines the functionality of code and data cache.
24 *
25 * Author:
26 * -------
27 * -------
28 *
29 *============================================================================
30 * HISTORY
31 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
32 *------------------------------------------------------------------------------
33 * removed!
34 * removed!
35 * removed!
36 *
37 * removed!
38 * removed!
39 * removed!
40 *
41 * removed!
42 * removed!
43 * removed!
44 * removed!
45 *
46 * removed!
47 * removed!
48 * removed!
49 *
50 * removed!
51 * removed!
52 * removed!
53 * removed!
54 *
55 * removed!
56 * removed!
57 * removed!
58 *
59 * removed!
60 * removed!
61 * removed!
62 * removed!
63 *
64 * removed!
65 * removed!
66 * removed!
67 *
68 * removed!
69 * removed!
70 * removed!
71 *
72 * removed!
73 * removed!
74 * removed!
75 *
76 * removed!
77 * removed!
78 * removed!
79 *
80 * removed!
81 * removed!
82 * removed!
83 *
84 * removed!
85 * removed!
86 * removed!
87 *
88 * removed!
89 * removed!
90 * removed!
91 *
92 * removed!
93 * removed!
94 * removed!
95 *
96 * removed!
97 * removed!
98 * removed!
99 *
100 * removed!
101 * removed!
102 * removed!
103 *
104 * removed!
105 * removed!
106 * removed!
107 * removed!
108 *
109 * removed!
110 * removed!
111 * removed!
112 *
113 * removed!
114 * removed!
115 * removed!
116 *
117 * removed!
118 * removed!
119 * removed!
120 *
121 * removed!
122 * removed!
123 * removed!
124 *
125 * removed!
126 * removed!
127 * removed!
128 * removed!
129 * removed!
130 * removed!
131 * removed!
132 *
133 * removed!
134 * removed!
135 * removed!
136 *
137 * removed!
138 * removed!
139 * removed!
140 *
141 * removed!
142 * removed!
143 * removed!
144 *
145 * removed!
146 * removed!
147 * removed!
148 *
149 * removed!
150 * removed!
151 * removed!
152 *
153 * removed!
154 * removed!
155 * removed!
156 *
157 * removed!
158 * removed!
159 * removed!
160 *
161 * removed!
162 * removed!
163 * removed!
164 *
165 * removed!
166 * removed!
167 * removed!
168 *
169 * removed!
170 * removed!
171 * removed!
172 *
173 * removed!
174 * removed!
175 * removed!
176 *
177 * removed!
178 * removed!
179 * removed!
180 *
181 * removed!
182 * removed!
183 * removed!
184 *
185 * removed!
186 * removed!
187 * removed!
188 *
189 * removed!
190 * removed!
191 * removed!
192 *
193 * removed!
194 * removed!
195 * removed!
196 *
197 * removed!
198 * removed!
199 * removed!
200 *
201 * removed!
202 * removed!
203 * removed!
204 *
205 * removed!
206 * removed!
207 * removed!
208 *
209 * removed!
210 * removed!
211 * removed!
212 *
213 * removed!
214 * removed!
215 * removed!
216 *
217 * removed!
218 * removed!
219 * removed!
220 *
221 * removed!
222 * removed!
223 * removed!
224 *
225 * removed!
226 * removed!
227 * removed!
228 *
229 * removed!
230 * removed!
231 * removed!
232 *
233 * removed!
234 * removed!
235 * removed!
236 *
237 * removed!
238 * removed!
239 * removed!
240 *
241 * removed!
242 * removed!
243 * removed!
244 *
245 * removed!
246 * removed!
247 * removed!
248 *
249 * removed!
250 * removed!
251 * removed!
252 *
253 * removed!
254 * removed!
255 * removed!
256 *
257 * removed!
258 * removed!
259 * removed!
260 *
261 * removed!
262 * removed!
263 * removed!
264 *
265 * removed!
266 * removed!
267 * removed!
268 *
269 * removed!
270 * removed!
271 * removed!
272 *
273 * removed!
274 * removed!
275 * removed!
276 *
277 * removed!
278 * removed!
279 * removed!
280 *
281 * removed!
282 * removed!
283 * removed!
284 *
285 * removed!
286 * removed!
287 * removed!
288 *
289 * removed!
290 * removed!
291 * removed!
292 *
293 * removed!
294 * removed!
295 * removed!
296 *
297 * removed!
298 * removed!
299 * removed!
300 *
301 * removed!
302 * removed!
303 * removed!
304 *
305 * removed!
306 * removed!
307 * removed!
308 *
309 * removed!
310 * removed!
311 * removed!
312 *
313 * removed!
314 * removed!
315 * removed!
316 *
317 * removed!
318 * removed!
319 * removed!
320 *
321 * removed!
322 * removed!
323 * removed!
324 *
325 * removed!
326 * removed!
327 * removed!
328 *
329 * removed!
330 * removed!
331 * removed!
332 *
333 * removed!
334 * removed!
335 * removed!
336 *
337 * removed!
338 * removed!
339 * removed!
340 *
341 * removed!
342 * removed!
343 * removed!
344 *
345 * removed!
346 * removed!
347 * removed!
348 *
349 * removed!
350 * removed!
351 * removed!
352 *
353 * removed!
354 * removed!
355 * removed!
356 *
357 * removed!
358 * removed!
359 * removed!
360 *
361 * removed!
362 * removed!
363 * removed!
364 *
365 * removed!
366 * removed!
367 * removed!
368 *
369 * removed!
370 * removed!
371 * removed!
372 *
373 * removed!
374 * removed!
375 * removed!
376 *
377 * removed!
378 * removed!
379 * removed!
380 *
381 * removed!
382 * removed!
383 * removed!
384 *
385 * removed!
386 * removed!
387 * removed!
388 *
389 * removed!
390 * removed!
391 * removed!
392 *
393 * removed!
394 * removed!
395 * removed!
396 *
397 * removed!
398 * removed!
399 * removed!
400 *
401 * removed!
402 * removed!
403 * removed!
404 *
405 * removed!
406 * removed!
407 * removed!
408 *
409 * removed!
410 * removed!
411 * removed!
412 *
413 * removed!
414 * removed!
415 * removed!
416 * removed!
417 *
418 * removed!
419 * removed!
420 * removed!
421 *
422 * removed!
423 * removed!
424 * removed!
425 *
426 * removed!
427 * removed!
428 * removed!
429 *
430 * removed!
431 * removed!
432 * removed!
433 *
434 * removed!
435 * removed!
436 * removed!
437 *
438 * removed!
439 * removed!
440 * removed!
441 *
442 * removed!
443 * removed!
444 * removed!
445 * removed!
446 * removed!
447 * removed!
448 * removed!
449 * removed!
450 * removed!
451 * removed!
452 * removed!
453 * removed!
454 *------------------------------------------------------------------------------
455 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
456 *============================================================================
457 ****************************************************************************/
458
459#ifndef _CACHE_SW_H
460#define _CACHE_SW_H
461
462#include "kal_general_types.h"
463
464
465#define L2_Only_Sync() do {\
466 register kal_uint32 __tmp__;\
467 __asm__ volatile (\
468 "li %0, 0x1\n"\
469 "sw %0, 0(%1)\n"\
470 :"=&r"(__tmp__)\
471 :"r"(l2_sync_base):\
472 );\
473 } while (0)
474
475/*******************************************************************************
476 * constants & macros
477 *******************************************************************************/
478
479/* cacheable and non-cacheable */
480#if defined(__DYNAMIC_SWITCH_CACHEABILITY__)
481enum
482{
483 DYNAMIC_SWITCH_CACHEABILITY_NON_CACHEABLE = 0x0,
484 DYNAMIC_SWITCH_CACHEABILITY_CACHEABLE = 0x1
485};
486#endif
487
488#define CPU_CACHE_LINE_SIZE 32
489#define CPU_L2CACHE_LINE_SIZE 64
490#define CPU_CACHE_LINE_BIT_OFFSET 5
491#define CPU_CACHE_LINE_SIZE_MASK 0x0000001F
492#define L2CACHE_LINE_SIZE_MASK 0x0000003F
493
494#define CPU_CACHE_LINE_ALIGN_ADDR(_addr) \
495 ((_addr) & ~CPU_CACHE_LINE_SIZE_MASK)
496#define CPU_CACHE_LINE_ALIGN_LEN(_addr, _len) \
497 ((CPU_CACHE_LINE_ALIGN_ADDR((_addr) + (_len) -1) - CPU_CACHE_LINE_ALIGN_ADDR((_addr))) + CPU_CACHE_LINE_SIZE)
498
499#define IS_CACHE_LINE_SIZE_ALIGNED(value) ((value&CPU_CACHE_LINE_SIZE_MASK)==0? 1: 0)
500
501#define L2CACHE_LINE_ALIGN_ADDR(_addr) \
502 ((_addr) & ~L2CACHE_LINE_SIZE_MASK)
503#define L2CACHE_LINE_ALIGN_LEN(_addr, _len) \
504 ((L2CACHE_LINE_ALIGN_ADDR((_addr) + (_len) -1) - L2CACHE_LINE_ALIGN_ADDR((_addr))) + CPU_L2CACHE_LINE_SIZE)
505
506#define IS_L2CACHE_LINE_SIZE_ALIGNED(value) ((value&L2CACHE_LINE_SIZE_MASK)==0? 1: 0)
507
508/*******************************************************************************
509 * function prototypes
510 *******************************************************************************/
511
512#if defined(__ARM9_MMU__) || defined(__ARM11_MMU__) || defined(__MTK_MMU__) || defined(__CR4__) || defined(__MIPS_IA__) || defined(__MIPS_I7200__)
513
514kal_uint32 is_predef_dyna_c_region(kal_uint32 vaddr, kal_uint32 len);
515kal_uint32 dynamic_switch_cacheable_region(void *vaddr, kal_uint32 len, kal_uint32 cacheable);
516kal_uint32 dynamic_switch_cacheable_region_nonblocking(void *vaddr, kal_uint32 len, kal_uint32 cacheable);
517
518#endif /* __ARM9_MMU__ || __ARM11_MMU__ || __MTK_MMU__ || __CR4__ || __MIPS_IA__ || __MIPS_I7200__*/
519
520kal_int32 query_is_dram(kal_uint32 addr, kal_uint32 len);
521#define INT_QueryIsDRAM(addr, len) \
522 query_is_dram((kal_uint32)addr, (kal_uint32)len)
523
524kal_int32 query_is_noncached_ram(kal_uint32 addr, kal_uint32 len);
525#define INT_QueryIsNonCachedRAM(addr, len) \
526 query_is_noncached_ram((kal_uint32)addr, (kal_uint32)len)
527
528kal_int32 query_is_cached_ram(kal_uint32 addr, kal_uint32 len);
529#define INT_QueryIsCachedRAM(addr, len) \
530 query_is_cached_ram((kal_uint32)addr, (kal_uint32)len)
531
532#if defined(__DYNAMIC_SWITCH_CACHEABILITY__) || defined(__WRITE_THROUGH_CACHEABLE__)
533kal_int32 invalidate_dcache(kal_uint32 addr, kal_uint32 len) DECLARE_MIPS16;
534kal_int32 invalidate_dcache_L2WB(kal_uint32 addr, kal_uint32 len) DECLARE_MIPS16;
535// kal_int32 invalidate_icache(kal_uint32 addr, kal_uint32 len); // Not released to user due to HRT concern about L2$ lock.
536kal_int32 invalidate_dcache_nonblocking(kal_uint32 addr, kal_uint32 len);
537// kal_int32 invalidate_icache_nonblocking(kal_uint32 addr, kal_uint32 len); // Not released to user due to HRT concern about L2$ lock.
538
539#endif /* __DYNAMIC_SWITCH_CACHEABILITY__ || __WRITE_THROUGH_CACHEABLE__ */
540
541#if defined(__DYNAMIC_SWITCH_CACHEABILITY__)
542 /*******************************************************************************
543 * <GROUP Functions>
544 *
545 * FUNCTION
546 * clean_dcache
547 * DESCRIPTION
548 * This function is used to clean cache
549 * PARAMETERS
550 * addr: [IN] the start address. it must be cache line size aligned (usually 32byte)
551 * len: [IN] the length. it must be the multiple of cache line size
552 * RETURNS
553 * always return 0
554 ******************************************************************************/
555kal_int32 clean_dcache(kal_uint32 addr, kal_uint32 len) DECLARE_MIPS16;
556kal_int32 clean_dcache_L2WB(kal_uint32 addr, kal_uint32 len);
557kal_int32 clean_dcache_nonblocking(kal_uint32 addr, kal_uint32 len);
558 /*******************************************************************************
559 * <GROUP Functions>
560 *
561 * FUNCTION
562 * clean_and_invalidate_dcache
563 * DESCRIPTION
564 * This function is used to clean and invalidate cache.
565 * PARAMETERS
566 * addr: [IN] the start address. it must be cache line size aligned (usually 32byte)
567 * len: [IN] the length. it must be the multiple of cache line size
568 * RETURNS
569 * always return 0
570 ******************************************************************************/
571kal_int32 clean_and_invalidate_dcache(kal_uint32 addr, kal_uint32 len) DECLARE_MIPS16;
572kal_int32 clean_and_invalidate_dcache_L2WB(kal_uint32 addr, kal_uint32 len);
573kal_int32 clean_and_invalidate_dcache_nonblocking(kal_uint32 addr, kal_uint32 len);
574#ifdef __DYNAMIC_CACHE_LOCK_CENTRAL_CONTROL_SUPPORT__
575kal_int32 clean_and_invalidate_dcache_unlockL2(kal_uint32 addr, kal_uint32 len) DECLARE_MIPS16;
576#endif
577kal_uint32 virt_to_phys(void * address);
578kal_uint32 phys_to_virt(void * address);
579kal_uint32 remap_to_physRam(void * address);
580#endif /* __DYNAMIC_SWITCH_CACHEABILITY__ */
581
582kal_int32 lock_l2cache(kal_uint32 addr, kal_uint32 len);
583kal_int32 invalidate_l2cache(kal_uint32 addr, kal_uint32 len);
584#ifdef __DYNAMIC_CACHE_LOCK_CENTRAL_CONTROL_SUPPORT__
585kal_int32 invalidate_l2cache_unlockL2(kal_uint32 addr, kal_uint32 len);
586#endif
587#endif /* _CACHE_SW_H */