From: Stephan Gerhold <stephan.gerhold@linaro.org>
To: Bartosz Golaszewski <brgl@kernel.org>
Cc: Vinod Koul <vkoul@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
Thara Gopinath <thara.gopinath@gmail.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>,
Udit Tiwari <quic_utiwari@quicinc.com>,
Daniel Perez-Zoghbi <dperezzo@quicinc.com>,
Md Sadre Alam <mdalam@qti.qualcomm.com>,
Dmitry Baryshkov <lumag@kernel.org>,
Peter Ujfalusi <peter.ujfalusi@gmail.com>,
Michal Simek <michal.simek@amd.com>,
Frank Li <Frank.Li@kernel.org>,
dmaengine@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-crypto@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Subject: Re: [PATCH v12 05/12] dmaengine: qcom: bam_dma: add support for BAM locking
Date: Wed, 11 Mar 2026 12:25:07 +0100 [thread overview]
Message-ID: <abFRE1qHgP-SYWZL@linaro.org> (raw)
In-Reply-To: <CAMRc=MeSfFyVYSJHzHvuynRR3TWRz04tyiOy1JvqyHP0aQKPOA@mail.gmail.com>
On Wed, Mar 11, 2026 at 03:32:38AM -0700, Bartosz Golaszewski wrote:
> On Wed, Mar 11, 2026 at 11:00 AM Stephan Gerhold
> <stephan.gerhold@linaro.org> wrote:
> >
> > I'm not entirely sure if this actually guarantees waiting with the
> > unlock until the transaction is "done", for two reasons:
> >
> > 1. &bchan->vc.desc_issued looks like a "TODO" list for descriptors we
> > haven't fully managed to squeeze into the BAM FIFO yet. It doesn't
> > tell you which descriptors have been consumed and finished
> > processing inside the FIFO.
> >
> > Consider e.g. the following case: The client has issued a number of
> > descriptors, they all fit into the FIFO. The first descriptor has a
> > callback assigned, so we ask the BAM to send us an interrupt when it
> > has been consumed. We get the interrupt for the first descriptor and
> > process_channel_irqs() marks it as completed, the rest of the
> > descriptors are still pending. &bchan->vc.desc_issued is empty, so
> > you queue the unlock command before the rest of the descriptors have
> > finished.
> >
>
> Thanks for looking into it. Good catch, I think you're right.
>
> > 2. From reading the BAM chapter in the APQ8016E TRM I get the
> > impression that by default an interrupt for a descriptor just tells
> > you that the descriptor was consumed by the BAM (and forwarded to
> > the peripheral). If you want to guarantee that the transaction is
> > actually done on the peripheral side before allowing writes into
> > config registers, you would need to set the NWD (Notify When Done)
> > bit (aka DMA_PREP_FENCE) on the last descriptor before the unlock
> > command.
> >
> > NWD seems to stall descriptor processing until the peripheral
> > signals completion, so this might allow you to immediately queue the
> > unlock command like in v11. The downside is that you would need to
> > make assumptions about the set of commands submitted by the client
> > again... The downstream driver seems to set NWD on the data
> > descriptor immediately before the UNLOCK command [1].
> >
>
> If what we have in the queue is:
>
> [DATA] [DATA] [DATA] [CMD]
>
> And we want to extend it with LOCK/UNLOCK like so:
>
> [LOCK] [DATA] [DATA] [DATA] [CMD] [UNLOCK]
>
> Should the NWD go with the last DATA descriptor or the last descriptor period
> whether data or command?
>
> It's, again, not very clear from reading tha part.
>
I'm not sure, my impression is that the exact behavior of NWD is quite
specific to the actual peripheral (i.e. QCE, QPIC NAND, etc). In the
downstream drivers:
- QCE seems to add NWD to the last data descriptor before the UNLOCK
(as I wrote, it seems to queue command descriptors before data).
- QPIC NAND has a dedicated "cmd" pipe that doesn't get any data
descriptors, it specifies NWD always for the EXEC_CMD register write,
which isn't even the last descriptor. This is also done in mainline
already (see NAND_BAM_NWD in qcom_write_reg_dma() [1]).
It is possible that NWD works only when attached to certain descriptors
(when there is an actual operation running that gets completed by a
certain descriptor), so we might not be able to simply add NWD to the
last descriptor. :/
I suppose you could argue that "make sure engine does not get
re-configured while busy" is a requirement of QCE and not BAM, so
perhaps it would be easiest and safest if you just add DMA_PREP_FENCE to
the right descriptor inside the QCE driver. qcom_nandc has that already.
Thanks,
Stephan
[1]: https://elixir.bootlin.com/linux/v7.0-rc3/source/drivers/mtd/nand/qpic_common.c#L484
next prev parent reply other threads:[~2026-03-11 11:25 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 15:44 [PATCH v12 00/12] crypto/dmaengine: qce: introduce BAM locking and use DMA for register I/O Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 01/12] dmaengine: constify struct dma_descriptor_metadata_ops Bartosz Golaszewski
2026-03-11 12:43 ` Manivannan Sadhasivam
2026-03-10 15:44 ` [PATCH v12 02/12] dmaengine: qcom: bam_dma: convert tasklet to a BH workqueue Bartosz Golaszewski
2026-03-11 12:45 ` Manivannan Sadhasivam
2026-03-10 15:44 ` [PATCH v12 03/12] dmaengine: qcom: bam_dma: Extend the driver's device match data Bartosz Golaszewski
2026-03-11 12:47 ` Manivannan Sadhasivam
2026-03-10 15:44 ` [PATCH v12 04/12] dmaengine: qcom: bam_dma: Add pipe_lock_supported flag support Bartosz Golaszewski
2026-03-11 12:52 ` Manivannan Sadhasivam
2026-03-10 15:44 ` [PATCH v12 05/12] dmaengine: qcom: bam_dma: add support for BAM locking Bartosz Golaszewski
2026-03-11 10:00 ` Stephan Gerhold
2026-03-11 10:32 ` Bartosz Golaszewski
2026-03-11 11:25 ` Stephan Gerhold [this message]
2026-03-11 13:26 ` Manivannan Sadhasivam
2026-03-10 15:44 ` [PATCH v12 06/12] crypto: qce - Include algapi.h in the core.h header Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 07/12] crypto: qce - Remove unused ignore_buf Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 08/12] crypto: qce - Simplify arguments of devm_qce_dma_request() Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 09/12] crypto: qce - Use existing devres APIs in devm_qce_dma_request() Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 10/12] crypto: qce - Map crypto memory for DMA Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 11/12] crypto: qce - Add BAM DMA support for crypto register I/O Bartosz Golaszewski
2026-03-10 15:44 ` [PATCH v12 12/12] crypto: qce - Communicate the base physical address to the dmaengine Bartosz Golaszewski
2026-03-11 8:03 ` [PATCH v12 00/12] crypto/dmaengine: qce: introduce BAM locking and use DMA for register I/O Bartosz Golaszewski
2026-03-11 8:06 ` Stephan Gerhold
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=abFRE1qHgP-SYWZL@linaro.org \
--to=stephan.gerhold@linaro.org \
--cc=Frank.Li@kernel.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=bartosz.golaszewski@oss.qualcomm.com \
--cc=brgl@kernel.org \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=dmaengine@vger.kernel.org \
--cc=dperezzo@quicinc.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=mdalam@qti.qualcomm.com \
--cc=michal.simek@amd.com \
--cc=peter.ujfalusi@gmail.com \
--cc=quic_utiwari@quicinc.com \
--cc=thara.gopinath@gmail.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