123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- #include <linux/linkage.h>
- #include <linux/init.h>
- #include <asm/assembler.h>
- #include <asm/page.h>
- #include "proc-macros.S"
- #define CACHE_DLINESIZE 32
- #define CACHE_DSEGMENTS 8
- #define CACHE_DENTRIES 64
- #define CACHE_DLIMIT 16384
- ENTRY(v4wt_flush_icache_all)
- mov r0, #0
- mcr p15, 0, r0, c7, c5, 0
- ret lr
- ENDPROC(v4wt_flush_icache_all)
- ENTRY(v4wt_flush_user_cache_all)
-
- ENTRY(v4wt_flush_kern_cache_all)
- mov r2, #VM_EXEC
- mov ip, #0
- __flush_whole_cache:
- tst r2, #VM_EXEC
- mcrne p15, 0, ip, c7, c5, 0
- mcr p15, 0, ip, c7, c6, 0
- ret lr
- ENTRY(v4wt_flush_user_cache_range)
- sub r3, r1, r0
- cmp r3, #CACHE_DLIMIT
- bhs __flush_whole_cache
- 1: mcr p15, 0, r0, c7, c6, 1
- tst r2, #VM_EXEC
- mcrne p15, 0, r0, c7, c5, 1
- add r0, r0, #CACHE_DLINESIZE
- cmp r0, r1
- blo 1b
- ret lr
- ENTRY(v4wt_coherent_kern_range)
-
- ENTRY(v4wt_coherent_user_range)
- bic r0, r0, #CACHE_DLINESIZE - 1
- 1: mcr p15, 0, r0, c7, c5, 1
- add r0, r0, #CACHE_DLINESIZE
- cmp r0, r1
- blo 1b
- mov r0, #0
- ret lr
- ENTRY(v4wt_flush_kern_dcache_area)
- mov r2, #0
- mcr p15, 0, r2, c7, c5, 0
- add r1, r0, r1
-
- v4wt_dma_inv_range:
- bic r0, r0, #CACHE_DLINESIZE - 1
- 1: mcr p15, 0, r0, c7, c6, 1
- add r0, r0, #CACHE_DLINESIZE
- cmp r0, r1
- blo 1b
- ret lr
- .globl v4wt_dma_flush_range
- .equ v4wt_dma_flush_range, v4wt_dma_inv_range
- ENTRY(v4wt_dma_unmap_area)
- add r1, r1, r0
- teq r2, #DMA_TO_DEVICE
- bne v4wt_dma_inv_range
-
- ENTRY(v4wt_dma_map_area)
- ret lr
- ENDPROC(v4wt_dma_unmap_area)
- ENDPROC(v4wt_dma_map_area)
- .globl v4wt_flush_kern_cache_louis
- .equ v4wt_flush_kern_cache_louis, v4wt_flush_kern_cache_all
- __INITDATA
-
- define_cache_functions v4wt
|