Message ID | 20250311-qce-cmd-descr-v7-1-db613f5d9c9f@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v7,1/8] dmaengine: add DMA_PREP_LOCK and DMA_PREP_UNLOCK flag | expand |
On Tue, Mar 11, 2025 at 10:25:32AM +0100, Bartosz Golaszewski wrote: > From: Md Sadre Alam <quic_mdalam@quicinc.com> > > Add lock and unlock flags for the command descriptor. With the former set > in the requester pipe, the bam controller will lock all other pipes and > process the request only from requester pipe. Unlocking can only be > performed from the same pipe. > > Setting the DMA_PREP_LOCK/DMA_PREP_UNLOCK flags in the command > descriptor means, the caller requests the BAM controller to be locked > for the duration of the transaction. In this case the BAM driver must > set the LOCK/UNLOCK bits in the HW descriptor respectively. > > Only BAM IPs version 1.4.0 and above support the LOCK/UNLOCK feature. You are describing behaviour (and even versions) of a particular DMA hardware (BAM) in the commit message for a generic flag. Please drop all of that. Generic code should be described in generic terms. > > Signed-off-by: Md Sadre Alam <quic_mdalam@quicinc.com> > [Bartosz: reworked the commit message] > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > --- > Documentation/driver-api/dmaengine/provider.rst | 15 +++++++++++++++ > include/linux/dmaengine.h | 6 ++++++ > 2 files changed, 21 insertions(+) > > diff --git a/Documentation/driver-api/dmaengine/provider.rst b/Documentation/driver-api/dmaengine/provider.rst > index 3085f8b460fa..a032e55d0a4f 100644 > --- a/Documentation/driver-api/dmaengine/provider.rst > +++ b/Documentation/driver-api/dmaengine/provider.rst > @@ -628,6 +628,21 @@ DMA_CTRL_REUSE > - This flag is only supported if the channel reports the DMA_LOAD_EOT > capability. > > +- DMA_PREP_LOCK > + > + - If set, the DMA will lock all other pipes not related to the current > + pipe group, and keep handling the current pipe only. > + > + - All pipes not within this group will be locked by this pipe upon lock > + event. > + > + - only pipes which are in the same group and relate to the same Environment > + Execution(EE) will not be locked by a certain pipe. > + > +- DMA_PREP_UNLOCK > + > + - If set, DMA will release all locked pipes > + > General Design Notes > ==================== > > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h > index 346251bf1026..8ebd43a998a7 100644 > --- a/include/linux/dmaengine.h > +++ b/include/linux/dmaengine.h > @@ -200,6 +200,10 @@ struct dma_vec { > * transaction is marked with DMA_PREP_REPEAT will cause the new transaction > * to never be processed and stay in the issued queue forever. The flag is > * ignored if the previous transaction is not a repeated transaction. > + * @DMA_PREP_LOCK: tell the driver that there is a lock bit set on command > + * descriptor. > + * @DMA_PREP_UNLOCK: tell the driver that there is a un-lock bit set on command > + * descriptor. > */ > enum dma_ctrl_flags { > DMA_PREP_INTERRUPT = (1 << 0), > @@ -212,6 +216,8 @@ enum dma_ctrl_flags { > DMA_PREP_CMD = (1 << 7), > DMA_PREP_REPEAT = (1 << 8), > DMA_PREP_LOAD_EOT = (1 << 9), > + DMA_PREP_LOCK = (1 << 10), > + DMA_PREP_UNLOCK = (1 << 11), > }; > > /** > > -- > 2.45.2 >
diff --git a/Documentation/driver-api/dmaengine/provider.rst b/Documentation/driver-api/dmaengine/provider.rst index 3085f8b460fa..a032e55d0a4f 100644 --- a/Documentation/driver-api/dmaengine/provider.rst +++ b/Documentation/driver-api/dmaengine/provider.rst @@ -628,6 +628,21 @@ DMA_CTRL_REUSE - This flag is only supported if the channel reports the DMA_LOAD_EOT capability. +- DMA_PREP_LOCK + + - If set, the DMA will lock all other pipes not related to the current + pipe group, and keep handling the current pipe only. + + - All pipes not within this group will be locked by this pipe upon lock + event. + + - only pipes which are in the same group and relate to the same Environment + Execution(EE) will not be locked by a certain pipe. + +- DMA_PREP_UNLOCK + + - If set, DMA will release all locked pipes + General Design Notes ==================== diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 346251bf1026..8ebd43a998a7 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -200,6 +200,10 @@ struct dma_vec { * transaction is marked with DMA_PREP_REPEAT will cause the new transaction * to never be processed and stay in the issued queue forever. The flag is * ignored if the previous transaction is not a repeated transaction. + * @DMA_PREP_LOCK: tell the driver that there is a lock bit set on command + * descriptor. + * @DMA_PREP_UNLOCK: tell the driver that there is a un-lock bit set on command + * descriptor. */ enum dma_ctrl_flags { DMA_PREP_INTERRUPT = (1 << 0), @@ -212,6 +216,8 @@ enum dma_ctrl_flags { DMA_PREP_CMD = (1 << 7), DMA_PREP_REPEAT = (1 << 8), DMA_PREP_LOAD_EOT = (1 << 9), + DMA_PREP_LOCK = (1 << 10), + DMA_PREP_UNLOCK = (1 << 11), }; /**