• L
    dma: Indicate residue granularity in dma_slave_caps · 50720563
    Lars-Peter Clausen 提交于
    This patch adds a new field to the dma_slave_caps struct which indicates the
    granularity with which the driver is able to update the residue field of the
    dma_tx_state struct. Making this information available to dmaengine users allows
    them to make better decisions on how to operate. E.g. for audio certain features
    like wakeup less operation or timer based scheduling only make sense and work
    correctly if the reported residue is fine-grained enough.
    
    Right now four different levels of granularity are supported:
    	* DESCRIPTOR: The DMA channel is only able to tell whether a descriptor has
    	  been completed or not, which means residue reporting is not supported by
    	  this channel. The residue field of the dma_tx_state field will always be
    	  0.
    	* SEGMENT: The DMA channel updates the residue field after each successfully
    	  completed segment of the transfer (For cyclic transfers this is after each
    	  period). This is typically implemented by having the hardware generate an
    	  interrupt after each transferred segment and then the drivers updates the
    	  outstanding residue by the size of the segment. Another possibility is if
    	  the hardware supports SG and the segment descriptor has a field which gets
    	  set after the segment has been completed. The driver then counts the
    	  number of segments without the flag set to compute the residue.
    	* BURST: The DMA channel updates the residue field after each transferred
    	  burst. This is typically only supported if the hardware has a progress
    	  register of some sort (E.g. a register with the current read/write address
    	  or a register with the amount of bursts/beats/bytes that have been
    	  transferred or still need to be transferred).
    Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
    Acked-by: NVinod Koul <vinod.koul@intel.com>
    Signed-off-by: NMark Brown <broonie@linaro.org>
    50720563
dmaengine.h 37.2 KB