Re: [PATCH 01/18] dmaengine: of-dma: Add support for optional router configuration callback
From: Vinod Koul
Date: Wed Oct 07 2020 - 01:44:20 EST
Hi Peter,
On 30-09-20, 12:13, Peter Ujfalusi wrote:
> Additional configuration for the DMA event router might be needed for a
> channel which can not be done during device_alloc_chan_resources callback
> since the router information is not yet present for the drivers.
>
> If there is a need for additional configuration for the channel if DMA
> router is in use, then the driver can implement the device_router_config
> callback.
So what is the additional information you need, I am looking at the code
below and xlate invokes device_router_config() which driver will
implement..
Are you using this to configure channels based on info from DT?
>
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx>
> ---
> drivers/dma/of-dma.c | 10 ++++++++++
> include/linux/dmaengine.h | 2 ++
> 2 files changed, 12 insertions(+)
>
> diff --git a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c
> index 8a4f608904b9..ec00b20ae8e4 100644
> --- a/drivers/dma/of-dma.c
> +++ b/drivers/dma/of-dma.c
> @@ -75,8 +75,18 @@ static struct dma_chan *of_dma_router_xlate(struct of_phandle_args *dma_spec,
> ofdma->dma_router->route_free(ofdma->dma_router->dev,
> route_data);
> } else {
> + int ret = 0;
> +
> chan->router = ofdma->dma_router;
> chan->route_data = route_data;
> +
> + if (chan->device->device_router_config)
> + ret = chan->device->device_router_config(chan);
> +
> + if (ret) {
> + dma_release_channel(chan);
> + chan = ERR_PTR(ret);
> + }
> }
>
> /*
> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> index dd357a747780..d6197fe875af 100644
> --- a/include/linux/dmaengine.h
> +++ b/include/linux/dmaengine.h
> @@ -800,6 +800,7 @@ struct dma_filter {
> * by tx_status
> * @device_alloc_chan_resources: allocate resources and return the
> * number of allocated descriptors
> + * @device_router_config: optional callback for DMA router configuration
> * @device_free_chan_resources: release DMA channel's resources
> * @device_prep_dma_memcpy: prepares a memcpy operation
> * @device_prep_dma_xor: prepares a xor operation
> @@ -874,6 +875,7 @@ struct dma_device {
> enum dma_residue_granularity residue_granularity;
>
> int (*device_alloc_chan_resources)(struct dma_chan *chan);
> + int (*device_router_config)(struct dma_chan *chan);
> void (*device_free_chan_resources)(struct dma_chan *chan);
>
> struct dma_async_tx_descriptor *(*device_prep_dma_memcpy)(
> --
> Peter
>
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
--
~Vinod