|
14 | 14 | .global sdk_version
|
15 | 15 | .global fileCluster
|
16 | 16 |
|
| 17 | +#define ICACHE_SIZE 0x2000 |
| 18 | +#define DCACHE_SIZE 0x1000 |
17 | 19 | #define CACHE_LINE_SIZE 32
|
18 | 20 |
|
19 | 21 |
|
@@ -215,41 +217,33 @@ cacheFlush:
|
215 | 217 | ldr r8,= 0x4000208
|
216 | 218 | ldr r11,[r8]
|
217 | 219 | mov r7, #0
|
218 |
| - str r7, [r8] |
| 220 | + str r7, [r8] |
219 | 221 |
|
220 |
| - add r10, R4, #4 |
221 |
| - |
222 | 222 | //---------------------------------------------------------------------------------
|
223 |
| -DC_FlushRange: |
| 223 | +IC_InvalidateAll: |
224 | 224 | /*---------------------------------------------------------------------------------
|
225 |
| - Clean and invalidate a range |
| 225 | + Clean and invalidate entire data cache |
226 | 226 | ---------------------------------------------------------------------------------*/
|
227 |
| - add r1, r1, r0 |
228 |
| - bic r0, r0, #(CACHE_LINE_SIZE - 1) |
229 |
| -.flush: |
230 |
| - mcr p15, 0, r7, c7, c10, 1 @ clean and flush address |
231 |
| - mcr p15, 0, r0, c7, c14, 1 @ clean and flush address |
232 |
| - add r0, r0, #CACHE_LINE_SIZE |
233 |
| - cmp r0, r1 |
234 |
| - blt .flush |
235 |
| - |
236 |
| - ldmia r10, {r0,r1} |
237 |
| - |
| 227 | + mcr p15, 0, r7, c7, c5, 0 |
| 228 | + |
238 | 229 | //---------------------------------------------------------------------------------
|
239 |
| -IC_InvalidateRange: |
| 230 | +DC_FlushAll: |
240 | 231 | /*---------------------------------------------------------------------------------
|
241 |
| - Invalidate a range |
| 232 | + Clean and invalidate a range |
242 | 233 | ---------------------------------------------------------------------------------*/
|
243 |
| - add r1, r1, r0 |
244 |
| - bic r0, r0, #CACHE_LINE_SIZE - 1 |
245 |
| -.invalidate: |
246 |
| - mcr p15, 0, r0, c7, c5, 1 |
| 234 | + mov r1, #0 |
| 235 | +outer_loop: |
| 236 | + mov r0, #0 |
| 237 | +inner_loop: |
| 238 | + orr r2, r1, r0 @ generate segment and line address |
| 239 | + mcr p15, 0, r7, c7, c10, 4 |
| 240 | + mcr p15, 0, r2, c7, c14, 2 @ clean and flush the line |
247 | 241 | add r0, r0, #CACHE_LINE_SIZE
|
248 |
| - cmp r0, r1 |
249 |
| - blt .invalidate |
250 |
| - @ restore r0, r1 |
251 |
| - |
252 |
| - @ldmia r10, {r0,r1} |
| 242 | + cmp r0, #DCACHE_SIZE/4 |
| 243 | + bne inner_loop |
| 244 | + add r1, r1, #0x40000000 |
| 245 | + cmp r1, #0 |
| 246 | + bne outer_loop |
253 | 247 |
|
254 | 248 | //---------------------------------------------------------------------------------
|
255 | 249 | DC_WaitWriteBufferEmpty:
|
|
0 commit comments