If the "dma-coherent" property is present in the device tree, the driver will
not perform cache invalidations. This feature significantly improves data
throughput and reduces CPU load.

Signed-off-by: Eli Billauer <eli.billa...@gmail.com>
---
 drivers/staging/xillybus/xillybus_of.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/drivers/staging/xillybus/xillybus_of.c 
b/drivers/staging/xillybus/xillybus_of.c
index be12440..23a609b 100644
--- a/drivers/staging/xillybus/xillybus_of.c
+++ b/drivers/staging/xillybus/xillybus_of.c
@@ -54,6 +54,13 @@ static void xilly_dma_sync_single_for_device_of(struct 
xilly_endpoint *ep,
        dma_sync_single_for_device(ep->dev, dma_handle, size, direction);
 }
 
+static void xilly_dma_sync_single_nop(struct xilly_endpoint *ep,
+                                     dma_addr_t dma_handle,
+                                     size_t size,
+                                     int direction)
+{
+}
+
 static dma_addr_t xilly_map_single_of(struct xilly_cleanup *mem,
                                      struct xilly_endpoint *ep,
                                      void *ptr,
@@ -102,14 +109,26 @@ static struct xilly_endpoint_hardware of_hw = {
        .unmap_single = xilly_unmap_single_of
 };
 
+static struct xilly_endpoint_hardware of_hw_coherent = {
+       .owner = THIS_MODULE,
+       .hw_sync_sgl_for_cpu = xilly_dma_sync_single_nop,
+       .hw_sync_sgl_for_device = xilly_dma_sync_single_nop,
+       .map_single = xilly_map_single_of,
+       .unmap_single = xilly_unmap_single_of
+};
+
 static int xilly_drv_probe(struct platform_device *op)
 {
        struct device *dev = &op->dev;
        struct xilly_endpoint *endpoint;
        int rc = 0;
        int irq;
+       struct xilly_endpoint_hardware *ephw = &of_hw;
+
+       if (of_property_read_bool(dev->of_node, "dma-coherent"))
+               ephw = &of_hw_coherent;
 
-       endpoint = xillybus_init_endpoint(NULL, dev, &of_hw);
+       endpoint = xillybus_init_endpoint(NULL, dev, ephw);
 
        if (!endpoint)
                return -ENOMEM;
-- 
1.7.2.3

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to