diff options
-rw-r--r-- | drivers/dma/at_xdmac.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c index 1dd7edaefbdc..06cbe54e4c30 100644 --- a/drivers/dma/at_xdmac.c +++ b/drivers/dma/at_xdmac.c | |||
@@ -308,6 +308,11 @@ static inline int at_xdmac_csize(u32 maxburst) | |||
308 | return csize; | 308 | return csize; |
309 | }; | 309 | }; |
310 | 310 | ||
311 | static inline bool at_xdmac_chan_is_peripheral_xfer(u32 cfg) | ||
312 | { | ||
313 | return cfg & AT_XDMAC_CC_TYPE_PER_TRAN; | ||
314 | } | ||
315 | |||
311 | static inline u8 at_xdmac_get_dwidth(u32 cfg) | 316 | static inline u8 at_xdmac_get_dwidth(u32 cfg) |
312 | { | 317 | { |
313 | return (cfg & AT_XDMAC_CC_DWIDTH_MASK) >> AT_XDMAC_CC_DWIDTH_OFFSET; | 318 | return (cfg & AT_XDMAC_CC_DWIDTH_MASK) >> AT_XDMAC_CC_DWIDTH_OFFSET; |
@@ -389,7 +394,13 @@ static void at_xdmac_start_xfer(struct at_xdmac_chan *atchan, | |||
389 | at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); | 394 | at_xdmac_chan_read(atchan, AT_XDMAC_CUBC)); |
390 | 395 | ||
391 | at_xdmac_chan_write(atchan, AT_XDMAC_CID, 0xffffffff); | 396 | at_xdmac_chan_write(atchan, AT_XDMAC_CID, 0xffffffff); |
392 | reg = AT_XDMAC_CIE_RBEIE | AT_XDMAC_CIE_WBEIE | AT_XDMAC_CIE_ROIE; | 397 | reg = AT_XDMAC_CIE_RBEIE | AT_XDMAC_CIE_WBEIE; |
398 | /* | ||
399 | * Request Overflow Error is only for peripheral synchronized transfers | ||
400 | */ | ||
401 | if (at_xdmac_chan_is_peripheral_xfer(first->lld.mbr_cfg)) | ||
402 | reg |= AT_XDMAC_CIE_ROIE; | ||
403 | |||
393 | /* | 404 | /* |
394 | * There is no end of list when doing cyclic dma, we need to get | 405 | * There is no end of list when doing cyclic dma, we need to get |
395 | * an interrupt after each periods. | 406 | * an interrupt after each periods. |