diff options
Diffstat (limited to 'arch/arm/mm/cache-fa.S')
-rw-r--r-- | arch/arm/mm/cache-fa.S | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/arch/arm/mm/cache-fa.S b/arch/arm/mm/cache-fa.S index b63a8f7b95cf..7148e53e6078 100644 --- a/arch/arm/mm/cache-fa.S +++ b/arch/arm/mm/cache-fa.S | |||
@@ -127,15 +127,16 @@ ENTRY(fa_coherent_user_range) | |||
127 | mov pc, lr | 127 | mov pc, lr |
128 | 128 | ||
129 | /* | 129 | /* |
130 | * flush_kern_dcache_page(kaddr) | 130 | * flush_kern_dcache_area(void *addr, size_t size) |
131 | * | 131 | * |
132 | * Ensure that the data held in the page kaddr is written back | 132 | * Ensure that the data held in the page kaddr is written back |
133 | * to the page in question. | 133 | * to the page in question. |
134 | * | 134 | * |
135 | * - kaddr - kernel address (guaranteed to be page aligned) | 135 | * - addr - kernel address |
136 | * - size - size of region | ||
136 | */ | 137 | */ |
137 | ENTRY(fa_flush_kern_dcache_page) | 138 | ENTRY(fa_flush_kern_dcache_area) |
138 | add r1, r0, #PAGE_SZ | 139 | add r1, r0, r1 |
139 | 1: mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line | 140 | 1: mcr p15, 0, r0, c7, c14, 1 @ clean & invalidate D line |
140 | add r0, r0, #CACHE_DLINESIZE | 141 | add r0, r0, #CACHE_DLINESIZE |
141 | cmp r0, r1 | 142 | cmp r0, r1 |
@@ -156,7 +157,7 @@ ENTRY(fa_flush_kern_dcache_page) | |||
156 | * - start - virtual start address | 157 | * - start - virtual start address |
157 | * - end - virtual end address | 158 | * - end - virtual end address |
158 | */ | 159 | */ |
159 | ENTRY(fa_dma_inv_range) | 160 | fa_dma_inv_range: |
160 | tst r0, #CACHE_DLINESIZE - 1 | 161 | tst r0, #CACHE_DLINESIZE - 1 |
161 | bic r0, r0, #CACHE_DLINESIZE - 1 | 162 | bic r0, r0, #CACHE_DLINESIZE - 1 |
162 | mcrne p15, 0, r0, c7, c14, 1 @ clean & invalidate D entry | 163 | mcrne p15, 0, r0, c7, c14, 1 @ clean & invalidate D entry |
@@ -179,7 +180,7 @@ ENTRY(fa_dma_inv_range) | |||
179 | * - start - virtual start address | 180 | * - start - virtual start address |
180 | * - end - virtual end address | 181 | * - end - virtual end address |
181 | */ | 182 | */ |
182 | ENTRY(fa_dma_clean_range) | 183 | fa_dma_clean_range: |
183 | bic r0, r0, #CACHE_DLINESIZE - 1 | 184 | bic r0, r0, #CACHE_DLINESIZE - 1 |
184 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 185 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
185 | add r0, r0, #CACHE_DLINESIZE | 186 | add r0, r0, #CACHE_DLINESIZE |
@@ -204,6 +205,30 @@ ENTRY(fa_dma_flush_range) | |||
204 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer | 205 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer |
205 | mov pc, lr | 206 | mov pc, lr |
206 | 207 | ||
208 | /* | ||
209 | * dma_map_area(start, size, dir) | ||
210 | * - start - kernel virtual start address | ||
211 | * - size - size of region | ||
212 | * - dir - DMA direction | ||
213 | */ | ||
214 | ENTRY(fa_dma_map_area) | ||
215 | add r1, r1, r0 | ||
216 | cmp r2, #DMA_TO_DEVICE | ||
217 | beq fa_dma_clean_range | ||
218 | bcs fa_dma_inv_range | ||
219 | b fa_dma_flush_range | ||
220 | ENDPROC(fa_dma_map_area) | ||
221 | |||
222 | /* | ||
223 | * dma_unmap_area(start, size, dir) | ||
224 | * - start - kernel virtual start address | ||
225 | * - size - size of region | ||
226 | * - dir - DMA direction | ||
227 | */ | ||
228 | ENTRY(fa_dma_unmap_area) | ||
229 | mov pc, lr | ||
230 | ENDPROC(fa_dma_unmap_area) | ||
231 | |||
207 | __INITDATA | 232 | __INITDATA |
208 | 233 | ||
209 | .type fa_cache_fns, #object | 234 | .type fa_cache_fns, #object |
@@ -213,8 +238,8 @@ ENTRY(fa_cache_fns) | |||
213 | .long fa_flush_user_cache_range | 238 | .long fa_flush_user_cache_range |
214 | .long fa_coherent_kern_range | 239 | .long fa_coherent_kern_range |
215 | .long fa_coherent_user_range | 240 | .long fa_coherent_user_range |
216 | .long fa_flush_kern_dcache_page | 241 | .long fa_flush_kern_dcache_area |
217 | .long fa_dma_inv_range | 242 | .long fa_dma_map_area |
218 | .long fa_dma_clean_range | 243 | .long fa_dma_unmap_area |
219 | .long fa_dma_flush_range | 244 | .long fa_dma_flush_range |
220 | .size fa_cache_fns, . - fa_cache_fns | 245 | .size fa_cache_fns, . - fa_cache_fns |