1 /*
2  * Copyright (c) 2006-2025 RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2022-11-09     RT-Thread    The first version
9  */
10 #ifndef __CACHE_H__
11 #define __CACHE_H__
12 
13 #include <rtdef.h>
14 
15 /**
16  * @brief These APIs may not be supported by a specified architecture
17  * But we have to include to all the cases to be 'general purpose'
18  */
19 
rt_hw_cpu_dcache_clean_local(void * addr,int size)20 rt_always_inline void rt_hw_cpu_dcache_clean_local(void *addr, int size)
21 {
22     RT_UNUSED(addr);
23     RT_UNUSED(size);
24 }
25 
rt_hw_cpu_dcache_invalidate_local(void * addr,int size)26 rt_always_inline void rt_hw_cpu_dcache_invalidate_local(void *addr, int size)
27 {
28     RT_UNUSED(addr);
29     RT_UNUSED(size);
30 }
31 
rt_hw_cpu_dcache_clean_and_invalidate_local(void * addr,int size)32 rt_always_inline void rt_hw_cpu_dcache_clean_and_invalidate_local(void *addr, int size)
33 {
34     RT_UNUSED(addr);
35     RT_UNUSED(size);
36 }
37 
rt_hw_cpu_dcache_clean_all_local(void)38 rt_always_inline void rt_hw_cpu_dcache_clean_all_local(void)
39 {
40 }
41 
rt_hw_cpu_dcache_invalidate_all_local(void)42 rt_always_inline void rt_hw_cpu_dcache_invalidate_all_local(void)
43 {
44 }
45 
rt_hw_cpu_dcache_clean_and_invalidate_all_local(void)46 rt_always_inline void rt_hw_cpu_dcache_clean_and_invalidate_all_local(void)
47 {
48 }
49 
50 /*use fence.i to invalidate all icache*/
rt_hw_cpu_icache_invalidate_local(void * addr,int size)51 rt_always_inline void rt_hw_cpu_icache_invalidate_local(void *addr, int size)
52 {
53 
54 }
55 /*use fence.i to invalidate all icache*/
rt_hw_cpu_icache_invalidate_all_local(void)56 rt_always_inline void rt_hw_cpu_icache_invalidate_all_local(void)
57 {
58 
59 }
60 
61 /**
62  * @brief Multi-core
63  */
64 
65 #define rt_hw_cpu_dcache_clean rt_hw_cpu_dcache_clean_local
66 #define rt_hw_cpu_dcache_invalidate rt_hw_cpu_dcache_invalidate_local
67 #define rt_hw_cpu_dcache_clean_and_invalidate rt_hw_cpu_dcache_clean_and_invalidate_local
68 
69 #define rt_hw_cpu_dcache_clean_all rt_hw_cpu_dcache_clean_all_local
70 #define rt_hw_cpu_dcache_invalidate_all rt_hw_cpu_dcache_invalidate_all_local
71 #define rt_hw_cpu_dcache_clean_and_invalidate_all rt_hw_cpu_dcache_clean_and_invalidate_all_local
72 
73 #define rt_hw_cpu_icache_invalidate rt_hw_cpu_icache_invalidate_local
74 #define rt_hw_cpu_icache_invalidate_all rt_hw_cpu_icache_invalidate_all_local
75 
76 #define rt_hw_icache_invalidate_all rt_hw_cpu_icache_invalidate_all
77 
78 /** instruction barrier */
rt_hw_cpu_sync(void)79 static inline void rt_hw_cpu_sync(void)
80 {
81 
82 }
83 
84 /**
85  * @brief local cpu icahce & dcache synchronization
86  *
87  * @param addr
88  * @param size
89  */
90 void rt_hw_sync_cache_local(void *addr, int size);
91 
92 #endif /* __CACHE_H__ */
93