* - start - virtual start address of region
* - end - virtual end address of region
*/
-ENTRY(rpi_dma_inv_range)
-v6_dma_inv_range:
+ENTRY(v6_dma_inv_range)
#ifdef CONFIG_DMA_CACHE_RWFO
ldrb r2, [r0] @ read for ownership
strb r2, [r0] @ write for ownership
* - start - virtual start address of region
* - end - virtual end address of region
*/
-ENTRY(rpi_dma_clean_range)
-v6_dma_clean_range:
+ENTRY(v6_dma_clean_range)
bic r0, r0, #D_CACHE_LINE_SIZE - 1
1:
#ifdef CONFIG_DMA_CACHE_RWFO
* - start - virtual start address of region
* - end - virtual end address of region
*/
-ENTRY(rpi_dma_inv_range)
-v7_dma_inv_range:
+ENTRY(v7_dma_inv_range)
dcache_line_size r2, r3
sub r3, r2, #1
tst r0, r3
* - start - virtual start address of region
* - end - virtual end address of region
*/
-ENTRY(rpi_dma_clean_range)
-v7_dma_clean_range:
+ENTRY(v7_dma_clean_range)
dcache_line_size r2, r3
sub r3, r2, #1
bic r0, r0, r3
for (i=0; i<ioparam.op_count; i++) {
struct vmcs_sm_ioctl_clean_invalid_block *op = block + i;
for (j = 0; j < op->block_count; ++j) {
- extern void rpi_dma_inv_range(void *start, void *end);
- extern void rpi_dma_clean_range(void *start, void *end);
+
+
+ extern void v6_dma_inv_range(void *start, void *end);
+ extern void v6_dma_clean_range(void *start, void *end);
unsigned long base = (unsigned long)op->start_address + j * op->inter_block_stride;
unsigned long end = base + op->block_size;
- /* L1/L2 cache clean/invalidate */
- if (op->invalidate_mode == 1)
- rpi_dma_inv_range((void *)base, (void *)end);
- else
- rpi_dma_clean_range((void *)base, (void *)end);
+ /* L1/L2 cache clean */
+ if (op->invalidate_mode & 2) {
+#if defined(CONFIG_CPU_CACHE_V7)
+ extern void v7_dma_clean_range(void *start, void *end);
+ v7_dma_clean_range((void *)base, (void *)end);
+#elif defined(CONFIG_CPU_CACHE_V6)
+ extern void v6_dma_clean_range(void *start, void *end);
+ v6_dma_clean_range((void *)base, (void *)end);
+#endif
+ /* L1/L2 cache invalidate */
+ } else if (op->invalidate_mode & 1) {
+#if defined(CONFIG_CPU_CACHE_V7)
+ extern void v7_dma_inv_range(void *start, void *end);
+ v7_dma_inv_range((void *)base, (void *)end);
+#elif defined(CONFIG_CPU_CACHE_V6)
+ extern void v6_dma_inv_range(void *start, void *end);
+ v6_dma_inv_range((void *)base, (void *)end);
+#endif
+ }
}
}
kfree(block);