[RFC 2/6] dmaengine: xilinx_dma: Pass AXI4-Stream control words to netdev dma client
From: Peter Ujfalusi <hidden>
Date: 2018-06-01 10:17:21
Also in:
dmaengine, lkml
Hi Radhey, On 2018-05-30 20:29, Radhey Shyam Pandey wrote:
quoted
In couple of days I can update the metadata patches I have atm and send as RFC. Is there anything from your side I should take into account when doing that?I think a generic interface to attach/share metadata buffer b/w client and the dmaengine driver is good enough. Is metadata patchset (early version) available in TI external repos?
I don't have it in public repository, but now that the TRM is public I can start preparing things for upstream. I have attached the patch I ended up with, but I need to add the documentation part. Since the 'metadata' is part of the DMA descriptor itself I thought that it might be better to reflect that -> the metadata_ops is part of the dma_async_tx_descriptor struct. DMA drivers can initialize it when it is supported by the channel or setup. In my case it is optional, many peripherals did not use it at all. I have two modes to deal with the metadata: 1. attach mode Client drivers are giving a buffer and a size to the DMA driver and in case of TX the data is copied to the descriptor's metadata part. In case of RX when the transfer is completed the DMA driver will copy the data from the DMA descriptor to the client provided buffer. Here we need one memcpy for each descriptor. 2. pointer mode If we have high throughput peripheral, the per descriptor memcpy can be an obstacle for performance. TX: The client dmaengine_desc_get_metadata_ptr() to get the pointer to the metadata section of the descriptor, it will receive back the max size and the currently used size (important for RX). This is done before issue_pending(). The client can update the metadata directly and when it is done calls the dmaengine_desc_set_metadata_len() to tell the DMA driver the size of the metadata it has configured. RX: in the DMA callback the client calls dmaengine_desc_get_metadata_ptr() to get the pointer and the size of the metadata we have received and can process the information w/o memcpy. I think it might be better to rename these from metadata to client_data or something. It is part of the DMA descriptor, passed along with the DMA descriptor, but it is owned by the client driver. - P?ter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-dmaengine-Add-metadat_ops-for-dma_async_tx_descripto.patch Type: text/x-patch Size: 3092 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20180601/d3c18cb2/attachment-0001.bin>