Message ID | 20240621104932.4116137-3-joy.zou@nxp.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | add edma src ID check at request channel | expand |
On Fri, Jun 21, 2024 at 06:49:32PM +0800, Joy Zou wrote: > Check src ID to detect misuse of same src ID for multiple DMA channels. > > Signed-off-by: Joy Zou <joy.zou@nxp.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> > --- > drivers/dma/fsl-edma-main.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c > index d4f29ece69f5..47939d010e59 100644 > --- a/drivers/dma/fsl-edma-main.c > +++ b/drivers/dma/fsl-edma-main.c > @@ -100,6 +100,22 @@ static irqreturn_t fsl_edma_irq_handler(int irq, void *dev_id) > return fsl_edma_err_handler(irq, dev_id); > } > > +static bool fsl_edma_srcid_in_use(struct fsl_edma_engine *fsl_edma, u32 srcid) > +{ > + struct fsl_edma_chan *fsl_chan; > + int i; > + > + for (i = 0; i < fsl_edma->n_chans; i++) { > + fsl_chan = &fsl_edma->chans[i]; > + > + if (fsl_chan->srcid && srcid == fsl_chan->srcid) { > + dev_err(&fsl_chan->pdev->dev, "The srcid is using! Can't use repeatly."); > + return true; > + } > + } > + return false; > +} > + > static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, > struct of_dma *ofdma) > { > @@ -117,6 +133,10 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, > list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) { > if (chan->client_count) > continue; > + > + if (fsl_edma_srcid_in_use(fsl_edma, dma_spec->args[1])) > + return NULL; > + > if ((chan->chan_id / chans_per_mux) == dma_spec->args[0]) { > chan = dma_get_slave_channel(chan); > if (chan) { > @@ -161,6 +181,8 @@ static struct dma_chan *fsl_edma3_xlate(struct of_phandle_args *dma_spec, > continue; > > fsl_chan = to_fsl_edma_chan(chan); > + if (fsl_edma_srcid_in_use(fsl_edma, dma_spec->args[0])) > + return NULL; > i = fsl_chan - fsl_edma->chans; > > fsl_chan->priority = dma_spec->args[1]; > -- > 2.37.1 >
On 21-06-24, 18:49, Joy Zou wrote: > Check src ID to detect misuse of same src ID for multiple DMA channels. > > Signed-off-by: Joy Zou <joy.zou@nxp.com> > --- > drivers/dma/fsl-edma-main.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c > index d4f29ece69f5..47939d010e59 100644 > --- a/drivers/dma/fsl-edma-main.c > +++ b/drivers/dma/fsl-edma-main.c > @@ -100,6 +100,22 @@ static irqreturn_t fsl_edma_irq_handler(int irq, void *dev_id) > return fsl_edma_err_handler(irq, dev_id); > } > > +static bool fsl_edma_srcid_in_use(struct fsl_edma_engine *fsl_edma, u32 srcid) > +{ > + struct fsl_edma_chan *fsl_chan; > + int i; > + > + for (i = 0; i < fsl_edma->n_chans; i++) { > + fsl_chan = &fsl_edma->chans[i]; > + > + if (fsl_chan->srcid && srcid == fsl_chan->srcid) { > + dev_err(&fsl_chan->pdev->dev, "The srcid is using! Can't use repeatly."); Better message would be: "The srcid is in use, cant use!" wdyt? > + return true; > + } > + } > + return false; > +} > + > static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, > struct of_dma *ofdma) > { > @@ -117,6 +133,10 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, > list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) { > if (chan->client_count) > continue; > + > + if (fsl_edma_srcid_in_use(fsl_edma, dma_spec->args[1])) > + return NULL; > + > if ((chan->chan_id / chans_per_mux) == dma_spec->args[0]) { > chan = dma_get_slave_channel(chan); > if (chan) { > @@ -161,6 +181,8 @@ static struct dma_chan *fsl_edma3_xlate(struct of_phandle_args *dma_spec, > continue; > > fsl_chan = to_fsl_edma_chan(chan); > + if (fsl_edma_srcid_in_use(fsl_edma, dma_spec->args[0])) > + return NULL; > i = fsl_chan - fsl_edma->chans; > > fsl_chan->priority = dma_spec->args[1]; > -- > 2.37.1
> -----Original Message----- > From: Vinod Koul <vkoul@kernel.org> > Sent: 2024年6月28日 15:32 > To: Joy Zou <joy.zou@nxp.com> > Cc: Frank Li <frank.li@nxp.com>; imx@lists.linux.dev; > dmaengine@vger.kernel.org; linux-kernel@vger.kernel.org > Subject: [EXT] Re: [PATCH v1 2/2] dmaengine: fsl-edma: add edma src ID > check at request channel > On 21-06-24, 18:49, Joy Zou wrote: > > Check src ID to detect misuse of same src ID for multiple DMA channels. > > > > Signed-off-by: Joy Zou <joy.zou@nxp.com> > > --- > > drivers/dma/fsl-edma-main.c | 22 ++++++++++++++++++++++ > > 1 file changed, 22 insertions(+) > > > > diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c > > index d4f29ece69f5..47939d010e59 100644 > > --- a/drivers/dma/fsl-edma-main.c > > +++ b/drivers/dma/fsl-edma-main.c > > @@ -100,6 +100,22 @@ static irqreturn_t fsl_edma_irq_handler(int irq, > void *dev_id) > > return fsl_edma_err_handler(irq, dev_id); } > > > > +static bool fsl_edma_srcid_in_use(struct fsl_edma_engine *fsl_edma, > > +u32 srcid) { > > + struct fsl_edma_chan *fsl_chan; > > + int i; > > + > > + for (i = 0; i < fsl_edma->n_chans; i++) { > > + fsl_chan = &fsl_edma->chans[i]; > > + > > + if (fsl_chan->srcid && srcid == fsl_chan->srcid) { > > + dev_err(&fsl_chan->pdev->dev, "The srcid is > > + using! Can't use repeatly."); > > Better message would be: "The srcid is in use, cant use!" > > wdyt? Thanks your for comments! It's better. Will change it. BR Joy Zou
diff --git a/drivers/dma/fsl-edma-main.c b/drivers/dma/fsl-edma-main.c index d4f29ece69f5..47939d010e59 100644 --- a/drivers/dma/fsl-edma-main.c +++ b/drivers/dma/fsl-edma-main.c @@ -100,6 +100,22 @@ static irqreturn_t fsl_edma_irq_handler(int irq, void *dev_id) return fsl_edma_err_handler(irq, dev_id); } +static bool fsl_edma_srcid_in_use(struct fsl_edma_engine *fsl_edma, u32 srcid) +{ + struct fsl_edma_chan *fsl_chan; + int i; + + for (i = 0; i < fsl_edma->n_chans; i++) { + fsl_chan = &fsl_edma->chans[i]; + + if (fsl_chan->srcid && srcid == fsl_chan->srcid) { + dev_err(&fsl_chan->pdev->dev, "The srcid is using! Can't use repeatly."); + return true; + } + } + return false; +} + static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, struct of_dma *ofdma) { @@ -117,6 +133,10 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) { if (chan->client_count) continue; + + if (fsl_edma_srcid_in_use(fsl_edma, dma_spec->args[1])) + return NULL; + if ((chan->chan_id / chans_per_mux) == dma_spec->args[0]) { chan = dma_get_slave_channel(chan); if (chan) { @@ -161,6 +181,8 @@ static struct dma_chan *fsl_edma3_xlate(struct of_phandle_args *dma_spec, continue; fsl_chan = to_fsl_edma_chan(chan); + if (fsl_edma_srcid_in_use(fsl_edma, dma_spec->args[0])) + return NULL; i = fsl_chan - fsl_edma->chans; fsl_chan->priority = dma_spec->args[1];
Check src ID to detect misuse of same src ID for multiple DMA channels. Signed-off-by: Joy Zou <joy.zou@nxp.com> --- drivers/dma/fsl-edma-main.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)