RAM到外设:
User WR -> Cache -> RAM
User -> DMA(RAM->外设)
由此可见,用户写入的数据要先经过Cache,然后才被刷新到RAM,从而造成DMA时,RAM中的数据可能还是旧的。
所以需要写入数据后,DMA前,调用dma_sync_single_for_device强制把Cache中的数据刷新到RAM。
外设到RAM:
User -> DMA(外设->RAM)
User RD -> Cache -> RAM
由此可见,用户读取的数据优先来自Cache,此时Cache中的数据可能还未和RAM中的数据做过同步,导致Cache中的数据可能还是旧的。
所以需要DMA后,读取数据前,调用dma_sync_single_for_cpu把Cache关闭,强制直接从RAM中读取数据。