> -----Original Message----- > From: Emil Renner Berthing <emil.renner.berthing@xxxxxxxxxxxxx> > Sent: Friday, September 22, 2023 4:16 PM > To: shravan Chippa - I35088 <Shravan.Chippa@xxxxxxxxxxxxx>; > green.wan@xxxxxxxxxx; vkoul@xxxxxxxxxx; robh+dt@xxxxxxxxxx; > krzysztof.kozlowski+dt@xxxxxxxxxx; palmer@xxxxxxxxxxx; > paul.walmsley@xxxxxxxxxx; conor+dt@xxxxxxxxxx; palmer@xxxxxxxxxx > Cc: dmaengine@xxxxxxxxxxxxxxx; devicetree@xxxxxxxxxxxxxxx; linux- > riscv@xxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Nagasuresh Relli - > I67208 <Nagasuresh.Relli@xxxxxxxxxxxxx>; Praveen Kumar - I30718 > <Praveen.Kumar@xxxxxxxxxxxxx> > Subject: Re: [PATCH v1 1/3] dmaengine: sf-pdma: Support > of_dma_controller_register() > > [You don't often get email from emil.renner.berthing@xxxxxxxxxxxxx. Learn > why this is important at https://aka.ms/LearnAboutSenderIdentification ] > > EXTERNAL EMAIL: Do not click links or open attachments unless you know the > content is safe > > shravan chippa wrote: > > From: Shravan Chippa <shravan.chippa@xxxxxxxxxxxxx> > > > > Update sf-pdma driver to adopt generic DMA device tree bindings. > > It calls of_dma_controller_register() with sf-pdma specific > > of_dma_xlate to get the generic DMA device tree helper support and the > > DMA clients can look up the sf-pdma controller using standard APIs. > > > > Signed-off-by: Shravan Chippa <shravan.chippa@xxxxxxxxxxxxx> > > --- > > drivers/dma/sf-pdma/sf-pdma.c | 41 > > +++++++++++++++++++++++++++++++++++ > > 1 file changed, 41 insertions(+) > > > > diff --git a/drivers/dma/sf-pdma/sf-pdma.c > > b/drivers/dma/sf-pdma/sf-pdma.c index d1c6956af452..c7558c9f9ac3 > > 100644 > > --- a/drivers/dma/sf-pdma/sf-pdma.c > > +++ b/drivers/dma/sf-pdma/sf-pdma.c > > @@ -20,6 +20,7 @@ > > #include <linux/mod_devicetable.h> > > #include <linux/dma-mapping.h> > > #include <linux/of.h> > > +#include <linux/of_dma.h> > > #include <linux/slab.h> > > > > #include "sf-pdma.h" > > @@ -490,6 +491,33 @@ static void sf_pdma_setup_chans(struct sf_pdma > *pdma) > > } > > } > > > > +static struct dma_chan *sf_pdma_of_xlate(struct of_phandle_args > *dma_spec, > > + struct of_dma *ofdma) { > > + struct sf_pdma *pdma = ofdma->of_dma_data; > > + struct device *dev = pdma->dma_dev.dev; > > + struct sf_pdma_chan *chan; > > + struct dma_chan *c; > > + u32 channel_id; > > + > > + if (dma_spec->args_count != 1) { > > + dev_err(dev, "Bad number of cells\n"); > > + return NULL; > > + } > > + > > + channel_id = dma_spec->args[0]; > > + > > + chan = &pdma->chans[channel_id]; > > + > > + c = dma_get_slave_channel(&chan->vchan.chan); > > + if (!c) { > > + dev_err(dev, "No more channels available\n"); > > + return NULL; > > + } > > + > > + return c; > > +} > > + > > static int sf_pdma_probe(struct platform_device *pdev) { > > struct sf_pdma *pdma; > > @@ -563,7 +591,20 @@ static int sf_pdma_probe(struct platform_device > *pdev) > > return ret; > > } > > > > + ret = of_dma_controller_register(pdev->dev.of_node, > > + sf_pdma_of_xlate, pdma); > > + if (ret < 0) { > > + dev_err(&pdev->dev, > > + "Can't register SiFive Platform OF_DMA. (%d)\n", ret); > > + goto err_unregister; > > + } > > + > > Hi Shrivan, > > Doesn't this need a matching unregister/free call in the sf_pdma_remove > function? > > /Emil > Will add of_dma_controller_free(np) call in the sf_pdma_remove(). > > return 0; > > + > > +err_unregister: > > + dma_async_device_unregister(&pdma->dma_dev); > > + > > + return ret; > > } > > > > static int sf_pdma_remove(struct platform_device *pdev) > > -- > > 2.34.1 > > > > > > _______________________________________________ > > linux-riscv mailing list > > linux-riscv@xxxxxxxxxxxxxxxxxxx > > http://lists.infradead.org/mailman/listinfo/linux-riscv