DMA: Enhance DMA driver functionality: (#1013)
DMA: Enhance DMA driver functionality: (#1013)

* DMA: Enhance DMA driver functionality:

 * Detect and respect MicroDMA limitations
 * Detect (and bail) if HW is configured in scatter-gather mode
 * Ensure DMA buffers are properly aligned
 * Record actual transferred data length
 * Allow sending subset of dma buffer (offset and length)
 * Detect (and raise) DMA errors in synchronous mode
 * Correct Max DMA length  (2^c_sg_length_width -1)
 * 64-bit address support

Todo:

 * Detect/report DMA errors in async/irq mode

* pynq:  DMA:  Support for scatter-gather mode

Note that this expects a single buffer to be handed in for the entire
transfer.  It probably makes sense to allow handing in multiple
buffers, but that would represent an API change.

Notably missing:

 * Scatter-gather with MicroDMA  (detects and bails)
 * Error handling in IRQ paths

* DMA:  Handle DG DMA transfer completion prior to calling wait()

Co-authored-by: Solomon Peachy <c7326415f08b0412d8e63e97d60cebd84d2341fa@philips.com>
schelleg/PYNQ,cathalmccabe/PYNQ,Xilinx/PYNQ,cathalmccabe/PYNQ,cathalmccabe/PYNQ,Xilinx/PYNQ,yunqu/PYNQ,Xilinx/PYNQ,yunqu/PYNQ,schelleg/PYNQ,Xilinx/PYNQ,yunqu/PYNQ,Xilinx/PYNQ,cathalmccabe/PYNQ,yunqu/PYNQ,yunqu/PYNQ,schelleg/PYNQ,cathalmccabe/PYNQ,cathalmccabe/PYNQ,schelleg/PYNQ,schelleg/PYNQ