• Zhangfei Gao's avatar
    dmaengine: mmp-pdma support · c8acd6aa
    Zhangfei Gao authored
    1. virtual channel vs. physical channel
    Virtual channel is managed by dmaengine
    Physical channel handling resource, such as irq
    Physical channel is alloced dynamically as descending priority,
    freed immediately when irq done.
    The availble highest priority physically channel will alwayes be alloced
    
    Issue pending list -> alloc highest dma physically channel available -> dma done -> free physically channel
    
    2. list: running list & pending list
    submit: desc list -> pending list
    issue_pending_list: if (IDLE) pending list -> running list; free pending list (RUN)
    irq: free running list (IDLE)
         check pendlist -> pending list -> running list; free pending list (RUN)
    
    3. irq:
    Each list generate one irq, calling callback
    One list may contain several desc chain, in such case, make sure only the last desc list generate irq.
    
    4. async
    Submit will add desc chain to pending list, which can be multi-called
    If multi desc chain is submitted, only the last desc would generate irq -> call back
    If IDLE, issue_pending_list start pending_list, transforming pendlist to running list
    If RUN, irq will start pending list
    
    5. test
    5.1 pxa3xx_nand on pxa910
    5.2 insmod dmatest.ko (threads_per_chan=y)
    By default drivers/dma/dmatest.c test every channel and test memcpy with 1 threads per channel
    Signed-off-by: default avatarZhangfei Gao <zhangfei.gao@marvell.com>
    Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarVinod Koul <vinod.koul@linux.intel.com>
    c8acd6aa
mmp_pdma.c 22.3 KB