lkml.org 
[lkml]   [2020]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 07/20] dmaengine: of-dma: Add support for optional router configuration callback
    Date
    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.

    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
    ---
    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 493a047ed0a2..aed44888cad3 100644
    --- a/include/linux/dmaengine.h
    +++ b/include/linux/dmaengine.h
    @@ -805,6 +805,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
    @@ -879,6 +880,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

    \
     
     \ /
      Last update: 2020-12-08 10:07    [W:2.735 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site