From: "Aatif Mushtaq/Aatif Mushtaq" <aatif4.m@samsung.com>
To: "'Vinod Koul'" <vkoul@kernel.org>
Cc: <dmaengine@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<pankaj.dubey@samsung.com>, <aswani.reddy@samsung.com>
Subject: RE: [PATCH 1/3] dmaengine: Add support for 2D DMA operation
Date: Mon, 24 Mar 2025 13:04:53 +0530 [thread overview]
Message-ID: <000001db9c8f$3ce35770$b6aa0650$@samsung.com> (raw)
In-Reply-To:
Hi Vinod,
> -----Original Message-----
> From: Aatif Mushtaq/Aatif Mushtaq <aatif4.m@samsung.com>
> Sent: 06 March 2025 12:06
> To: 'Vinod Koul' <vkoul@kernel.org>
> Cc: 'dmaengine@vger.kernel.org' <dmaengine@vger.kernel.org>; 'linux-
> kernel@vger.kernel.org' <linux-kernel@vger.kernel.org>;
> 'pankaj.dubey@samsung.com' <pankaj.dubey@samsung.com>;
> 'aswani.reddy@samsung.com' <aswani.reddy@samsung.com>
> Subject: RE: [PATCH 1/3] dmaengine: Add support for 2D DMA operation
>
>
>
> > -----Original Message-----
> > From: Aatif Mushtaq/Aatif Mushtaq <aatif4.m@samsung.com>
> > Sent: 28 February 2025 15:03
> > To: 'Vinod Koul' <vkoul@kernel.org>
> > Cc: 'dmaengine@vger.kernel.org' <dmaengine@vger.kernel.org>; 'linux-
> > kernel@vger.kernel.org' <linux-kernel@vger.kernel.org>;
> > 'pankaj.dubey@samsung.com' <pankaj.dubey@samsung.com>;
> > 'aswani.reddy@samsung.com' <aswani.reddy@samsung.com>
> > Subject: RE: [PATCH 1/3] dmaengine: Add support for 2D DMA operation
> >
> >
> >
> > > -----Original Message-----
> > > From: Vinod Koul <vkoul@kernel.org>
> > > Sent: 27 February 2025 13:32
> > > To: Aatif Mushtaq <aatif4.m@samsung.com>
> > > Cc: dmaengine@vger.kernel.org; linux-kernel@vger.kernel.org;
> > > pankaj.dubey@samsung.com; aswani.reddy@samsung.com
> > > Subject: Re: [PATCH 1/3] dmaengine: Add support for 2D DMA operation
> > >
> > > On 10-02-25, 11:49, Aatif Mushtaq wrote:
> > > > Add a new dma engine API to support 2D DMA operations.
> > > > The API will be used to get the descriptor for 2D transfer based on
> > > > the 16-bit immediate to define the stride length between
> > > > consecuitive source address or destination address after every DMA
> > > > load and store instruction is processed.
> > >
> > > Why should we define a new API for this...? Why not use the sg or
> > > interleaved api for this?
> > >
> >
> > Thanks for pointing out, interleaved API can be used for this.
> > I will make the change
> >
>
> While trying to make the change I realised that sg and interleaved
> APIs cannot be used for our use case.
> Interleaved API is used to transfer data from non-contiguous
> buffer to non-contiguous buffer and sg API is used to transfer
> non-contiguous buffer to contiguous buffer but both the APIs work
> on multiple data chunks where each chunk has its individual attributes
> and there is a tx descriptor for each data chunk.
> But in our case we have single tx descriptor to increment the source or
> destination after every DMA LOAD and STORE operation till the desired
> length of transfer is achieved, which means we don't have multiple data
> chunks which is required in case of interleaved and sg.
> The use case is to do memory to memory copy but not in a linear way,
> such that we can define a gap between each burst.
>
I want to gently remind you to please review my approach.
> > > >
> > > > Signed-off-by: Aatif Mushtaq <aatif4.m@samsung.com>
> > > > ---
> > > > include/linux/dmaengine.h | 25 +++++++++++++++++++++++++
> > > > 1 file changed, 25 insertions(+)
> > > >
> > > > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> > > > index b137fdb56093..8a73b2147983 100644
> > > > --- a/include/linux/dmaengine.h
> > > > +++ b/include/linux/dmaengine.h
> > > > @@ -833,6 +833,7 @@ struct dma_filter {
> > > > * be called after period_len bytes have been transferred.
> > > > * @device_prep_interleaved_dma: Transfer expression in a generic
> > way.
> > > > * @device_prep_dma_imm_data: DMA's 8 byte immediate data to
> the
> > > dst
> > > > address
> > > > + * @device_prep_2d_dma_memcpy: prepares a 2D memcpy
> operation
> > > > * @device_caps: May be used to override the generic DMA slave
> > > capabilities
> > > > * with per-channel specific ones
> > > > * @device_config: Pushes a new configuration to a channel, return
> > > > 0 or an error @@ -938,6 +939,9 @@ struct dma_device {
> > > > struct dma_async_tx_descriptor *(*device_prep_dma_imm_data)(
> > > > struct dma_chan *chan, dma_addr_t dst, u64 data,
> > > > unsigned long flags);
> > > > + struct dma_async_tx_descriptor
> > > *(*device_prep_2d_dma_memcpy)(
> > > > + struct dma_chan *chan, dma_addr_t dest, dma_addr_t
src,
> > > > + size_t len, u16 src_imm, u16 dest_imm, unsigned long
flags);
> > > >
> > > > void (*device_caps)(struct dma_chan *chan, struct
dma_slave_caps
> > > *caps);
> > > > int (*device_config)(struct dma_chan *chan, struct
> > > dma_slave_config
> > > > *config); @@ -1087,6 +1091,27 @@ static inline struct
> > > dma_async_tx_descriptor *dmaengine_prep_dma_memcpy(
> > > > len, flags);
> > > > }
> > > >
> > > > +/**
> > > > + * device_prep_2d_dma_memcpy() - Prepare a DMA 2D memcpy
> > > descriptor.
> > > > + * @chan: The channel to be used for this descriptor
> > > > + * @dest: Address of the destination data for a DMA channel
> > > > + * @src: Address of the source data for a DMA channel
> > > > + * @len: The total size of data
> > > > + * @src_imm: The immediate value to be added to the src address
> > > > +register
> > > > + * @dest_imm: The immediate value to be added to the dst address
> > > > +register
> > > > + * @flags: DMA engine flags
> > > > + */
> > > > +static inline struct dma_async_tx_descriptor
> > > *device_prep_2d_dma_memcpy(
> > > > + struct dma_chan *chan, dma_addr_t dest, dma_addr_t
src,
> > > > + size_t len, u16 src_imm, u16 dest_imm, unsigned long
flags) {
> > > > + if (!chan || !chan->device || !chan->device-
> > > >device_prep_2d_dma_memcpy)
> > > > + return NULL;
> > > > +
> > > > + return chan->device->device_prep_2d_dma_memcpy(chan, dest,
> > > src, len,
> > > > + src_imm,
dest_imm,
> > > flags); }
> > > > +
> > > > static inline bool dmaengine_is_metadata_mode_supported(struct
> > > dma_chan *chan,
> > > > enum dma_desc_metadata_mode mode) {
> > > > --
> > > > 2.17.1
> > >
> > > --
> > > ~Vinod
next prev parent reply other threads:[~2025-03-24 10:22 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20250210062219epcas5p4695fe63e9ba36c19a640504f95dc3f12@epcas5p4.samsung.com>
2025-02-10 6:19 ` [PATCH 0/3] Add capability for 2D DMA transfer Aatif Mushtaq
2025-02-10 6:19 ` [PATCH 1/3] dmaengine: Add support for 2D DMA operation Aatif Mushtaq
2025-02-10 7:50 ` Pankaj Dubey
2025-02-27 8:01 ` Vinod Koul
2025-02-28 9:32 ` Aatif Mushtaq/Aatif Mushtaq
2025-03-06 6:35 ` Aatif Mushtaq/Aatif Mushtaq
2025-03-24 7:34 ` Aatif Mushtaq/Aatif Mushtaq [this message]
2025-02-10 6:19 ` [PATCH 2/3] dmaengine: pl330: Add DMAADDH instruction Aatif Mushtaq
2025-02-10 7:53 ` Pankaj Dubey
2025-02-10 6:19 ` [PATCH 3/3] dmaengine: pl330: Add DMA_2D capability Aatif Mushtaq
2025-02-10 7:54 ` Pankaj Dubey
[not found] ` <CGME20250210062219epcas5p4695fe63e9ba36c19a640504f95dc3f12@epcms5p5>
[not found] ` <20250224084948epcms5p57acb02e41b7626321d82c74569361be5@epcms5p5>
2025-02-27 8:00 ` FW: [PATCH 0/3] Add capability for 2D DMA transfer Vinod Koul
2025-02-28 9:28 ` Aatif Mushtaq/Aatif Mushtaq
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='000001db9c8f$3ce35770$b6aa0650$@samsung.com' \
--to=aatif4.m@samsung.com \
--cc=aswani.reddy@samsung.com \
--cc=dmaengine@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pankaj.dubey@samsung.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox