|
|
@@ -67,3 +67,27 @@ set on each call.
|
|
|
Since it is optional for platforms to implement
|
|
|
DMA_ATTR_NO_KERNEL_MAPPING, those that do not will simply ignore the
|
|
|
attribute and exhibit default behavior.
|
|
|
+
|
|
|
+DMA_ATTR_SKIP_CPU_SYNC
|
|
|
+----------------------
|
|
|
+
|
|
|
+By default dma_map_{single,page,sg} functions family transfer a given
|
|
|
+buffer from CPU domain to device domain. Some advanced use cases might
|
|
|
+require sharing a buffer between more than one device. This requires
|
|
|
+having a mapping created separately for each device and is usually
|
|
|
+performed by calling dma_map_{single,page,sg} function more than once
|
|
|
+for the given buffer with device pointer to each device taking part in
|
|
|
+the buffer sharing. The first call transfers a buffer from 'CPU' domain
|
|
|
+to 'device' domain, what synchronizes CPU caches for the given region
|
|
|
+(usually it means that the cache has been flushed or invalidated
|
|
|
+depending on the dma direction). However, next calls to
|
|
|
+dma_map_{single,page,sg}() for other devices will perform exactly the
|
|
|
+same sychronization operation on the CPU cache. CPU cache sychronization
|
|
|
+might be a time consuming operation, especially if the buffers are
|
|
|
+large, so it is highly recommended to avoid it if possible.
|
|
|
+DMA_ATTR_SKIP_CPU_SYNC allows platform code to skip synchronization of
|
|
|
+the CPU cache for the given buffer assuming that it has been already
|
|
|
+transferred to 'device' domain. This attribute can be also used for
|
|
|
+dma_unmap_{single,page,sg} functions family to force buffer to stay in
|
|
|
+device domain after releasing a mapping for it. Use this attribute with
|
|
|
+care!
|