Merge branch 'topic/sprd' into for-linus
This commit is contained in:
@@ -58,4 +58,73 @@ enum sprd_dma_int_type {
|
||||
SPRD_DMA_CFGERR_INT,
|
||||
};
|
||||
|
||||
/*
|
||||
* struct sprd_dma_linklist - DMA link-list address structure
|
||||
* @virt_addr: link-list virtual address to configure link-list node
|
||||
* @phy_addr: link-list physical address to link DMA transfer
|
||||
*
|
||||
* The Spreadtrum DMA controller supports the link-list mode, that means slaves
|
||||
* can supply several groups configurations (each configuration represents one
|
||||
* DMA transfer) saved in memory, and DMA controller will link these groups
|
||||
* configurations by writing the physical address of each configuration into the
|
||||
* link-list register.
|
||||
*
|
||||
* Just as shown below, the link-list pointer register will be pointed to the
|
||||
* physical address of 'configuration 1', and the 'configuration 1' link-list
|
||||
* pointer will be pointed to 'configuration 2', and so on.
|
||||
* Once trigger the DMA transfer, the DMA controller will load 'configuration
|
||||
* 1' to its registers automatically, after 'configuration 1' transaction is
|
||||
* done, DMA controller will load 'configuration 2' automatically, until all
|
||||
* DMA transactions are done.
|
||||
*
|
||||
* Note: The last link-list pointer should point to the physical address
|
||||
* of 'configuration 1', which can avoid DMA controller loads incorrect
|
||||
* configuration when the last configuration transaction is done.
|
||||
*
|
||||
* DMA controller linklist memory
|
||||
* ====================== -----------------------
|
||||
*| | | configuration 1 |<---
|
||||
*| DMA controller | ------->| | |
|
||||
*| | | | | |
|
||||
*| | | | | |
|
||||
*| | | | | |
|
||||
*| linklist pointer reg |---- ----| linklist pointer | |
|
||||
* ====================== | ----------------------- |
|
||||
* | |
|
||||
* | ----------------------- |
|
||||
* | | configuration 2 | |
|
||||
* --->| | |
|
||||
* | | |
|
||||
* | | |
|
||||
* | | |
|
||||
* ----| linklist pointer | |
|
||||
* | ----------------------- |
|
||||
* | |
|
||||
* | ----------------------- |
|
||||
* | | configuration 3 | |
|
||||
* --->| | |
|
||||
* | | |
|
||||
* | . | |
|
||||
* . |
|
||||
* . |
|
||||
* . |
|
||||
* | . |
|
||||
* | ----------------------- |
|
||||
* | | configuration n | |
|
||||
* --->| | |
|
||||
* | | |
|
||||
* | | |
|
||||
* | | |
|
||||
* | linklist pointer |----
|
||||
* -----------------------
|
||||
*
|
||||
* To support the link-list mode, DMA slaves should allocate one segment memory
|
||||
* from always-on IRAM or dma coherent memory to store these groups of DMA
|
||||
* configuration, and pass the virtual and physical address to DMA controller.
|
||||
*/
|
||||
struct sprd_dma_linklist {
|
||||
unsigned long virt_addr;
|
||||
phys_addr_t phy_addr;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user