[PATCH v2][RFC] OMAP4: sDMA driver: descriptor autoloading feature
hemanthv at ti.com
Tue Sep 1 05:47:47 EDT 2009
----- Original Message -----
From: "S, Venkatraman" <svenkatr at ti.com>
To: <linux-omap at vger.kernel.org>
Cc: <linux-arm-kernel at lists.infradead.org>; "Shilimkar, Santosh"
<santosh.shilimkar at ti.com>
Sent: Thursday, August 27, 2009 4:41 PM
Subject: [PATCH v2][RFC] OMAP4: sDMA driver: descriptor autoloading feature
> (Updated version of previous patch:
> Add sDMA driver support for descriptor autoloading feature.
> Descriptor autoloading is OMAP4 sDMA hardware capability that can be
> exploited for scatter gather scenarios.
> The feature works as described below
> 1) A sDMA channel is programmed to be in 'linked list' mode
> 2) The client (sDMA user) provides a list of descriptors in a linked list
> 3) Each of the 'descriptor' (element in the linked list) contains an
> updated set of DMA configuration register values
> 4) Client starts DMA transfer
> 5) sDMA controller loads the first element to its register configuration
> memory and executes the transfer
> 6) After completion, loads the next element (in linked list) to
> configuration memory and executes the transfer, without MCU intervention.
> 7) Interrupt is generated after all transfers are completed; this can be
> configured to be done differently.
> Configurations and additional features
> 1) Fast mode & non-fast mode
> Fast mode/non-fast decides on how the first transfer begins. In
> non-fast mode, the first element in the linked list is loaded only after
> completing the transfer according to the configurations already in the
> sDMA channel registers. In fast mode, the loading of the first element
> precedes the transfer.
> 2) Pause / resume of transfers
> A transfer can be paused after a descriptor set has been loaded,
> provided the 'pause bit' is set in the linked list element.
> An ongoing transfer cannot be paused. If the 'pause bit' is set, transfer
> is not started after loading the register set from memory.
> Such a transfer can be resumed later.
> 3) Descriptor types
> 3 possible configurations of descriptors (initialized as linked list
> elements) are possible. Type 1 provides the maximum flexibility, which
> contains most register definitions of a DMA logical channel. Fewer options
> are present in type 2. Type 3 can just modify source/destinations address
> of transfers. In all transfers, unmodified registers settings are
> maintained for the next transfer.
> Patch provides options / API for
> 1) Setting up a descriptor loading for DMA channel for sg type transfers
> 2) configuration with linked list elements
> 3) Starting / pause and resume of the said transfers, query state
> 4) Closing/Releasing the DMA channel
> The patches are generated against kernel 2.6.31-rc1, tested on OMAP4
> simulator platform.
It might be easier to understand the APIs if you could provide an example.
Could you take example of a contiguous/non-contiguous buffer and explain how
the desciptor based DMA could be used on this.
More information about the linux-arm-kernel