staging: xillybus: Open Firmware driver supporting coherent DMA
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.billauer@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
24b33c909e
commit
cc212550ee
1 changed files with 20 additions and 1 deletions
|
@ -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;
|
||||
|
||||
endpoint = xillybus_init_endpoint(NULL, dev, &of_hw);
|
||||
if (of_property_read_bool(dev->of_node, "dma-coherent"))
|
||||
ephw = &of_hw_coherent;
|
||||
|
||||
endpoint = xillybus_init_endpoint(NULL, dev, ephw);
|
||||
|
||||
if (!endpoint)
|
||||
return -ENOMEM;
|
||||
|
|
Loading…
Reference in a new issue