[PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation

Frank Li posted 9 patches 1 month ago
Documentation/driver-api/dmaengine/client.rst |   9 ++
drivers/crypto/atmel-aes.c                    |  10 +--
drivers/dma/dmaengine.c                       |   3 +
drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
drivers/nvme/target/pci-epf.c                 |  21 ++---
drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
8 files changed, 177 insertions(+), 84 deletions(-)
[PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation
Posted by Frank Li 1 month ago
Previously, configuration and preparation required two separate calls. This
works well when configuration is done only once during initialization.

However, in cases where the burst length or source/destination address must
be adjusted for each transfer, calling two functions is verbose.

	if (dmaengine_slave_config(chan, &sconf)) {
		dev_err(dev, "DMA slave config fail\n");
		return -EIO;
	}

	tx = dmaengine_prep_slave_single(chan, dma_local, len, dir, flags);

After new API added

	tx = dmaengine_prep_config_single(chan, dma_local, len, dir, flags, &sconf);

Additional, prevous two calls requires additional locking to ensure both
steps complete atomically.

    mutex_lock()
    dmaengine_slave_config()
    dmaengine_prep_slave_single()
    mutex_unlock()

after new API added, mutex lock can be moved. See patch
     nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
Changes in v3:
- collect review tags
- create safe version in framework
- Link to v2: https://lore.kernel.org/r/20251218-dma_prep_config-v2-0-c07079836128@nxp.com

Changes in v2:
- Use name dmaengine_prep_config_single() and dmaengine_prep_config_sg()
- Add _safe version to avoid confuse, which needn't additional mutex.
- Update document/
- Update commit message. add () for function name. Use upcase for subject.
- Add more explain for remove lock.
- Link to v1: https://lore.kernel.org/r/20251208-dma_prep_config-v1-0-53490c5e1e2a@nxp.com

---
Frank Li (9):
      dmaengine: Add API to combine configuration and preparation (sg and single)
      dmaengine: Add safe API to combine configuration and preparation
      PCI: endpoint: pci-epf-test: Use dmaenigne_prep_config_single() to simplify code
      dmaengine: dw-edma: Use new .device_prep_config_sg() callback
      dmaengine: dw-edma: Pass dma_slave_config to dw_edma_device_transfer()
      nvmet: pci-epf: Remove unnecessary dmaengine_terminate_sync() on each DMA transfer
      nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API
      PCI: epf-mhi: Use dmaengine_prep_config_single() to simplify code
      crypto: atmel: Use dmaengine_prep_config_single() API

 Documentation/driver-api/dmaengine/client.rst |   9 ++
 drivers/crypto/atmel-aes.c                    |  10 +--
 drivers/dma/dmaengine.c                       |   3 +
 drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
 drivers/nvme/target/pci-epf.c                 |  21 ++---
 drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
 drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
 include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
 8 files changed, 177 insertions(+), 84 deletions(-)
---
base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
change-id: 20251204-dma_prep_config-654170d245a2

Best regards,
--
Frank Li <Frank.Li@nxp.com>
Re: [PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation
Posted by Niklas Cassel 3 weeks, 4 days ago
Frank,

Thanks a lot for your work on this series!

On Mon, Jan 05, 2026 at 05:46:50PM -0500, Frank Li wrote:
>  Documentation/driver-api/dmaengine/client.rst |   9 ++
>  drivers/crypto/atmel-aes.c                    |  10 +--
>  drivers/dma/dmaengine.c                       |   3 +
>  drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
>  drivers/nvme/target/pci-epf.c                 |  21 ++---
>  drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
>  drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
>  include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
>  8 files changed, 177 insertions(+), 84 deletions(-)

Is the plan to merge this series via the dmaengine tree?

If so, we might need an Ack from Mani on the pci-epf-mhi.c and
pci-epf-test.c patch.

Likewise we might need an Ack from Keith/Christoph on the
drivers/nvme/target/pci-epf.c patches.


Kind regards,
Niklas
Re: [PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation
Posted by Manivannan Sadhasivam 2 weeks, 6 days ago
On Mon, Jan 12, 2026 at 02:01:32PM +0100, Niklas Cassel wrote:
> Frank,
> 
> Thanks a lot for your work on this series!
> 
> On Mon, Jan 05, 2026 at 05:46:50PM -0500, Frank Li wrote:
> >  Documentation/driver-api/dmaengine/client.rst |   9 ++
> >  drivers/crypto/atmel-aes.c                    |  10 +--
> >  drivers/dma/dmaengine.c                       |   3 +
> >  drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
> >  drivers/nvme/target/pci-epf.c                 |  21 ++---
> >  drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
> >  drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
> >  include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
> >  8 files changed, 177 insertions(+), 84 deletions(-)
> 
> Is the plan to merge this series via the dmaengine tree?
> 

It makes sense to take it through dmaengine tree given that the changes in PCI
and other drivers are straightforward.

> If so, we might need an Ack from Mani on the pci-epf-mhi.c and
> pci-epf-test.c patch.
> 

Just did.

- Mani

-- 
மணிவண்ணன் சதாசிவம்
Re: [PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation
Posted by Niklas Cassel 2 weeks, 6 days ago
On Sat, Jan 17, 2026 at 04:35:40PM +0530, Manivannan Sadhasivam wrote:
> On Mon, Jan 12, 2026 at 02:01:32PM +0100, Niklas Cassel wrote:
> > Frank,
> > 
> > Thanks a lot for your work on this series!
> > 
> > On Mon, Jan 05, 2026 at 05:46:50PM -0500, Frank Li wrote:
> > >  Documentation/driver-api/dmaengine/client.rst |   9 ++
> > >  drivers/crypto/atmel-aes.c                    |  10 +--
> > >  drivers/dma/dmaengine.c                       |   3 +
> > >  drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
> > >  drivers/nvme/target/pci-epf.c                 |  21 ++---
> > >  drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
> > >  drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
> > >  include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
> > >  8 files changed, 177 insertions(+), 84 deletions(-)
> > 
> > Is the plan to merge this series via the dmaengine tree?
> > 
> 
> It makes sense to take it through dmaengine tree given that the changes in PCI
> and other drivers are straightforward.
> 
> > If so, we might need an Ack from Mani on the pci-epf-mhi.c and
> > pci-epf-test.c patch.
> > 
> 
> Just did.

Great!

Keith, Christoph, any chance to get an ack on the NVMe patches?


Herbert Xu, David Miller (crypto API maintainers),
any chance to get an ack on the crypto driver ?
There does not seem to be an explicit entry in MAINTAINERS for the atmel
crypto driver, and another atmel crypto driver is marked as orphan.


Kind regards,
Niklas
Re: [PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation
Posted by Frank Li 2 weeks, 2 days ago
On Mon, Jan 05, 2026 at 05:46:50PM -0500, Frank Li wrote:
> Previously, configuration and preparation required two separate calls. This
> works well when configuration is done only once during initialization.
>
> However, in cases where the burst length or source/destination address must
> be adjusted for each transfer, calling two functions is verbose.
>
> 	if (dmaengine_slave_config(chan, &sconf)) {
> 		dev_err(dev, "DMA slave config fail\n");
> 		return -EIO;
> 	}
>
> 	tx = dmaengine_prep_slave_single(chan, dma_local, len, dir, flags);
>
> After new API added
>
> 	tx = dmaengine_prep_config_single(chan, dma_local, len, dir, flags, &sconf);
>
> Additional, prevous two calls requires additional locking to ensure both
> steps complete atomically.
>
>     mutex_lock()
>     dmaengine_slave_config()
>     dmaengine_prep_slave_single()
>     mutex_unlock()
>
> after new API added, mutex lock can be moved. See patch
>      nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API
>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---

Vinod:
	Can you take care these patches? At least first 2 patches! So
I can did more clean up at next kernel release.

Frank

> Changes in v3:
> - collect review tags
> - create safe version in framework
> - Link to v2: https://lore.kernel.org/r/20251218-dma_prep_config-v2-0-c07079836128@nxp.com
>
> Changes in v2:
> - Use name dmaengine_prep_config_single() and dmaengine_prep_config_sg()
> - Add _safe version to avoid confuse, which needn't additional mutex.
> - Update document/
> - Update commit message. add () for function name. Use upcase for subject.
> - Add more explain for remove lock.
> - Link to v1: https://lore.kernel.org/r/20251208-dma_prep_config-v1-0-53490c5e1e2a@nxp.com
>
> ---
> Frank Li (9):
>       dmaengine: Add API to combine configuration and preparation (sg and single)
>       dmaengine: Add safe API to combine configuration and preparation
>       PCI: endpoint: pci-epf-test: Use dmaenigne_prep_config_single() to simplify code
>       dmaengine: dw-edma: Use new .device_prep_config_sg() callback
>       dmaengine: dw-edma: Pass dma_slave_config to dw_edma_device_transfer()
>       nvmet: pci-epf: Remove unnecessary dmaengine_terminate_sync() on each DMA transfer
>       nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API
>       PCI: epf-mhi: Use dmaengine_prep_config_single() to simplify code
>       crypto: atmel: Use dmaengine_prep_config_single() API
>
>  Documentation/driver-api/dmaengine/client.rst |   9 ++
>  drivers/crypto/atmel-aes.c                    |  10 +--
>  drivers/dma/dmaengine.c                       |   3 +
>  drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
>  drivers/nvme/target/pci-epf.c                 |  21 ++---
>  drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
>  drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
>  include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
>  8 files changed, 177 insertions(+), 84 deletions(-)
> ---
> base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
> change-id: 20251204-dma_prep_config-654170d245a2
>
> Best regards,
> --
> Frank Li <Frank.Li@nxp.com>
>
Re: [PATCH v3 0/9] dmaengine: Add new API to combine configuration and descriptor preparation
Posted by Frank Li 1 week ago
On Wed, Jan 21, 2026 at 11:30:09AM -0500, Frank Li wrote:
> On Mon, Jan 05, 2026 at 05:46:50PM -0500, Frank Li wrote:
> > Previously, configuration and preparation required two separate calls. This
> > works well when configuration is done only once during initialization.
> >
> > However, in cases where the burst length or source/destination address must
> > be adjusted for each transfer, calling two functions is verbose.
> >
> > 	if (dmaengine_slave_config(chan, &sconf)) {
> > 		dev_err(dev, "DMA slave config fail\n");
> > 		return -EIO;
> > 	}
> >
> > 	tx = dmaengine_prep_slave_single(chan, dma_local, len, dir, flags);
> >
> > After new API added
> >
> > 	tx = dmaengine_prep_config_single(chan, dma_local, len, dir, flags, &sconf);
> >
> > Additional, prevous two calls requires additional locking to ensure both
> > steps complete atomically.
> >
> >     mutex_lock()
> >     dmaengine_slave_config()
> >     dmaengine_prep_slave_single()
> >     mutex_unlock()
> >
> > after new API added, mutex lock can be moved. See patch
> >      nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API
> >
> > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > ---
>
> Vinod:
> 	Can you take care these patches? At least first 2 patches! So
> I can did more clean up at next kernel release.

Vinod Koul:

	Do you have chance to pick up (at least first 2 patches) for 6.20?
So I can start do more cleanup work.

	There are two serial depend on this one

https://lore.kernel.org/dmaengine/20251212-edma_ll-v1-0-fc863d9f5ca3@nxp.com/
https://lore.kernel.org/dmaengine/aWT4p7RnFykJnuOz@ryzen/

Frank

>
> Frank
>
> > Changes in v3:
> > - collect review tags
> > - create safe version in framework
> > - Link to v2: https://lore.kernel.org/r/20251218-dma_prep_config-v2-0-c07079836128@nxp.com
> >
> > Changes in v2:
> > - Use name dmaengine_prep_config_single() and dmaengine_prep_config_sg()
> > - Add _safe version to avoid confuse, which needn't additional mutex.
> > - Update document/
> > - Update commit message. add () for function name. Use upcase for subject.
> > - Add more explain for remove lock.
> > - Link to v1: https://lore.kernel.org/r/20251208-dma_prep_config-v1-0-53490c5e1e2a@nxp.com
> >
> > ---
> > Frank Li (9):
> >       dmaengine: Add API to combine configuration and preparation (sg and single)
> >       dmaengine: Add safe API to combine configuration and preparation
> >       PCI: endpoint: pci-epf-test: Use dmaenigne_prep_config_single() to simplify code
> >       dmaengine: dw-edma: Use new .device_prep_config_sg() callback
> >       dmaengine: dw-edma: Pass dma_slave_config to dw_edma_device_transfer()
> >       nvmet: pci-epf: Remove unnecessary dmaengine_terminate_sync() on each DMA transfer
> >       nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API
> >       PCI: epf-mhi: Use dmaengine_prep_config_single() to simplify code
> >       crypto: atmel: Use dmaengine_prep_config_single() API
> >
> >  Documentation/driver-api/dmaengine/client.rst |   9 ++
> >  drivers/crypto/atmel-aes.c                    |  10 +--
> >  drivers/dma/dmaengine.c                       |   3 +
> >  drivers/dma/dw-edma/dw-edma-core.c            |  41 ++++++---
> >  drivers/nvme/target/pci-epf.c                 |  21 ++---
> >  drivers/pci/endpoint/functions/pci-epf-mhi.c  |  52 ++++--------
> >  drivers/pci/endpoint/functions/pci-epf-test.c |   8 +-
> >  include/linux/dmaengine.h                     | 117 ++++++++++++++++++++++++--
> >  8 files changed, 177 insertions(+), 84 deletions(-)
> > ---
> > base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
> > change-id: 20251204-dma_prep_config-654170d245a2
> >
> > Best regards,
> > --
> > Frank Li <Frank.Li@nxp.com>
> >