source: rtems/c/src/lib/libcpu/or1k/shared/cache/cache.c @ 37885d5d

4.115
Last change on this file since 37885d5d was 37885d5d, checked in by Hesham ALMatary <heshamelmatary@…>, on 10/10/14 at 17:23:08

libcpu/or1k: Fix warnings.

  • Property mode set to 100644
File size: 4.3 KB
Line 
1/*
2 * COPYRIGHT (c) 2014 Hesham ALMatary <heshamelmatary@gmail.com>
3 *
4 * COPYRIGHT (c) 1989-2006
5 * On-Line Applications Research Corporation (OAR).
6 *
7 * The license and distribution terms for this file may be
8 * found in the file LICENSE in this distribution or at
9 * http://www.rtems.org/license/LICENSE.
10 */
11
12#include <rtems/score/cpu.h>
13#include <rtems/score/interr.h>
14#include <rtems/score/or1k-utility.h>
15#include <libcpu/cache.h>
16
17static inline void _CPU_OR1K_Cache_enable_data(void)
18{
19  uint32_t sr;
20   ISR_Level level;
21
22  _ISR_Disable (level);
23  sr = _OR1K_mfspr(CPU_OR1K_SPR_SR);
24  _OR1K_mtspr(CPU_OR1K_SPR_SR, sr | CPU_OR1K_SPR_SR_DCE);
25
26  _ISR_Enable(level);
27}
28
29static inline void _CPU_OR1K_Cache_disable_data(void)
30{
31  uint32_t sr;
32   ISR_Level level;
33
34  _ISR_Disable (level);
35
36  sr = _OR1K_mfspr(CPU_OR1K_SPR_SR);
37  _OR1K_mtspr(CPU_OR1K_SPR_SR, (sr & ~CPU_OR1K_SPR_SR_DCE));
38
39  _ISR_Enable(level);
40}
41
42static inline void _CPU_OR1K_Cache_enable_instruction(void)
43{
44  uint32_t sr;
45   ISR_Level level;
46
47  _ISR_Disable (level);
48
49  sr = _OR1K_mfspr(CPU_OR1K_SPR_SR);
50  _OR1K_mtspr(CPU_OR1K_SPR_SR, sr | CPU_OR1K_SPR_SR_ICE);
51
52  _ISR_Enable(level);
53}
54
55static inline void _CPU_OR1K_Cache_disable_instruction(void)
56{
57  uint32_t sr;
58  ISR_Level level;
59
60  _ISR_Disable (level);
61
62  sr = _OR1K_mfspr(CPU_OR1K_SPR_SR);
63  _OR1K_mtspr(CPU_OR1K_SPR_SR, (sr & ~CPU_OR1K_SPR_SR_ICE));
64
65  _ISR_Enable(level);
66}
67
68static inline void _CPU_OR1K_Cache_data_block_prefetch(const void *d_addr)
69{
70  ISR_Level level;
71
72  _ISR_Disable (level);
73
74  _OR1K_mtspr(CPU_OR1K_SPR_DCBPR, (uintptr_t) d_addr);
75
76  _ISR_Enable(level);
77}
78
79static inline void _CPU_OR1K_Cache_data_block_flush(const void *d_addr)
80{
81   ISR_Level level;
82  _ISR_Disable (level);
83
84  _OR1K_mtspr(CPU_OR1K_SPR_DCBFR, (uintptr_t) d_addr);
85
86  _ISR_Enable(level);
87}
88
89static inline void _CPU_OR1K_Cache_data_block_invalidate(const void *d_addr)
90{
91   ISR_Level level;
92  _ISR_Disable (level);
93
94  _OR1K_mtspr(CPU_OR1K_SPR_DCBIR, (uintptr_t) d_addr);
95
96  _ISR_Enable(level);
97}
98
99static inline void _CPU_OR1K_Cache_data_block_writeback(const void *d_addr)
100{
101   ISR_Level level;
102  _ISR_Disable (level);
103
104  _OR1K_mtspr(CPU_OR1K_SPR_DCBWR, (uintptr_t) d_addr);
105
106  _ISR_Enable(level);
107}
108
109static inline void _CPU_OR1K_Cache_data_block_lock(const void *d_addr)
110{
111   ISR_Level level;
112  _ISR_Disable (level);
113
114  _OR1K_mtspr(CPU_OR1K_SPR_DCBLR, (uintptr_t) d_addr);
115
116  _ISR_Enable(level);
117}
118
119static inline void _CPU_OR1K_Cache_instruction_block_prefetch
120(const void *d_addr)
121{
122   ISR_Level level;
123  _ISR_Disable (level);
124
125  _OR1K_mtspr(CPU_OR1K_SPR_ICBPR, (uintptr_t) d_addr);
126
127  _ISR_Enable(level);
128}
129
130static inline void _CPU_OR1K_Cache_instruction_block_invalidate
131(const void *d_addr)
132{
133   ISR_Level level;
134  _ISR_Disable (level);
135
136  _OR1K_mtspr(CPU_OR1K_SPR_ICBIR, (uintptr_t) d_addr);
137
138  _ISR_Enable(level);
139}
140
141static inline void _CPU_OR1K_Cache_instruction_block_lock
142(const void *d_addr)
143{
144   ISR_Level level;
145  _ISR_Disable (level);
146
147  _OR1K_mtspr(CPU_OR1K_SPR_ICBLR, (uintptr_t) d_addr);
148
149  _ISR_Enable(level);
150}
151
152/* Implement RTEMS cache manager functions */
153
154void _CPU_cache_flush_1_data_line(const void *d_addr)
155{
156   ISR_Level level;
157  _ISR_Disable (level);
158
159  _CPU_OR1K_Cache_data_block_flush(d_addr);
160
161  //asm volatile("l.csync");
162
163  _ISR_Enable(level);
164}
165
166void _CPU_cache_invalidate_1_data_line(const void *d_addr)
167{
168   ISR_Level level;
169  _ISR_Disable (level);
170
171  _CPU_OR1K_Cache_data_block_invalidate(d_addr);
172
173  _ISR_Enable(level);
174}
175
176void _CPU_cache_freeze_data(void)
177{
178  /* Do nothing */
179}
180
181void _CPU_cache_unfreeze_data(void)
182{
183  /* Do nothing */
184}
185
186void _CPU_cache_invalidate_1_instruction_line(const void *d_addr)
187{
188   ISR_Level level;
189  _ISR_Disable (level);
190
191  _CPU_OR1K_Cache_instruction_block_invalidate(d_addr);
192
193  _ISR_Enable(level);
194}
195
196void _CPU_cache_freeze_instruction(void)
197{
198  /* Do nothing */
199}
200
201void _CPU_cache_unfreeze_instruction(void)
202{
203  /* Do nothing */
204}
205
206void _CPU_cache_flush_entire_data(void)
207{
208
209}
210
211void _CPU_cache_invalidate_entire_data(void)
212{
213
214}
215
216void _CPU_cache_invalidate_entire_instruction(void)
217{
218
219}
220
221void _CPU_cache_enable_data(void)
222{
223  _CPU_OR1K_Cache_enable_data();
224}
225
226void _CPU_cache_disable_data(void)
227{
228  _CPU_OR1K_Cache_disable_data();
229
230}
231
232void _CPU_cache_enable_instruction(void)
233{
234
235  _CPU_OR1K_Cache_enable_instruction();
236}
237
238void _CPU_cache_disable_instruction(void)
239{
240  _CPU_OR1K_Cache_disable_instruction();
241}
Note: See TracBrowser for help on using the repository browser.