--- zzzz-none-000/linux-2.6.39.4/arch/arm/mm/dma-mapping.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/arch/arm/mm/dma-mapping.c 2021-11-10 13:38:14.000000000 +0000 @@ -665,3 +665,28 @@ return 0; } fs_initcall(dma_debug_do_init); + + +/* + * Make an area consistent for devices. + */ +void consistent_sync(void *vaddr, size_t size, int direction) +{ + unsigned long start = (unsigned long)vaddr; + unsigned long end = start + size; + + switch (direction) { + case DMA_FROM_DEVICE: /* invalidate only */ + dmac_inv_range((void*)start, (void*)end); + break; + case DMA_TO_DEVICE: /* writeback only */ + dmac_clean_range((void*)start, (void*)end); + break; + case DMA_BIDIRECTIONAL: /* writeback and invalidate */ + dmac_flush_range((void*)start, (void*)end); + break; + default: + BUG(); + } +} +EXPORT_SYMBOL(consistent_sync);