Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma

* 'fixes' of git://git.infradead.org/users/vkoul/slave-dma:
i.MX SDMA: Fix burstsize settings
ARM: mach-shmobile: both USB DMAC instances on sh7372 are slave-only
dma: sh_dma: not all SH DMAC implementations support MEMCPY
at_hdmac: bugfix for enabling channel irq
dmaengine: fix missing 'cnt' in ?: in dmatest

+20 -15
+2
arch/arm/mach-shmobile/setup-sh7372.c
··· 662 662 .dmaor_is_32bit = 1, 663 663 .needs_tend_set = 1, 664 664 .no_dmars = 1, 665 + .slave_only = 1, 665 666 }; 666 667 667 668 static struct resource sh7372_usb_dmae0_resources[] = { ··· 724 723 .dmaor_is_32bit = 1, 725 724 .needs_tend_set = 1, 726 725 .no_dmars = 1, 726 + .slave_only = 1, 727 727 }; 728 728 729 729 static struct resource sh7372_usb_dmae1_resources[] = {
+2 -2
drivers/dma/at_hdmac.c
··· 1343 1343 1344 1344 tasklet_init(&atchan->tasklet, atc_tasklet, 1345 1345 (unsigned long)atchan); 1346 - atc_enable_irq(atchan); 1346 + atc_enable_chan_irq(atdma, i); 1347 1347 } 1348 1348 1349 1349 /* set base routines */ ··· 1410 1410 struct at_dma_chan *atchan = to_at_dma_chan(chan); 1411 1411 1412 1412 /* Disable interrupts */ 1413 - atc_disable_irq(atchan); 1413 + atc_disable_chan_irq(atdma, chan->chan_id); 1414 1414 tasklet_disable(&atchan->tasklet); 1415 1415 1416 1416 tasklet_kill(&atchan->tasklet);
+8 -9
drivers/dma/at_hdmac_regs.h
··· 327 327 } 328 328 329 329 330 - static void atc_setup_irq(struct at_dma_chan *atchan, int on) 330 + static void atc_setup_irq(struct at_dma *atdma, int chan_id, int on) 331 331 { 332 - struct at_dma *atdma = to_at_dma(atchan->chan_common.device); 333 - u32 ebci; 332 + u32 ebci; 334 333 335 334 /* enable interrupts on buffer transfer completion & error */ 336 - ebci = AT_DMA_BTC(atchan->chan_common.chan_id) 337 - | AT_DMA_ERR(atchan->chan_common.chan_id); 335 + ebci = AT_DMA_BTC(chan_id) 336 + | AT_DMA_ERR(chan_id); 338 337 if (on) 339 338 dma_writel(atdma, EBCIER, ebci); 340 339 else 341 340 dma_writel(atdma, EBCIDR, ebci); 342 341 } 343 342 344 - static inline void atc_enable_irq(struct at_dma_chan *atchan) 343 + static void atc_enable_chan_irq(struct at_dma *atdma, int chan_id) 345 344 { 346 - atc_setup_irq(atchan, 1); 345 + atc_setup_irq(atdma, chan_id, 1); 347 346 } 348 347 349 - static inline void atc_disable_irq(struct at_dma_chan *atchan) 348 + static void atc_disable_chan_irq(struct at_dma *atdma, int chan_id) 350 349 { 351 - atc_setup_irq(atchan, 0); 350 + atc_setup_irq(atdma, chan_id, 0); 352 351 } 353 352 354 353
+1 -1
drivers/dma/dmatest.c
··· 599 599 } 600 600 if (dma_has_cap(DMA_PQ, dma_dev->cap_mask)) { 601 601 cnt = dmatest_add_threads(dtc, DMA_PQ); 602 - thread_count += cnt > 0 ?: 0; 602 + thread_count += cnt > 0 ? cnt : 0; 603 603 } 604 604 605 605 pr_info("dmatest: Started %u threads using %s\n",
+4 -2
drivers/dma/imx-sdma.c
··· 1102 1102 case DMA_SLAVE_CONFIG: 1103 1103 if (dmaengine_cfg->direction == DMA_DEV_TO_MEM) { 1104 1104 sdmac->per_address = dmaengine_cfg->src_addr; 1105 - sdmac->watermark_level = dmaengine_cfg->src_maxburst; 1105 + sdmac->watermark_level = dmaengine_cfg->src_maxburst * 1106 + dmaengine_cfg->src_addr_width; 1106 1107 sdmac->word_size = dmaengine_cfg->src_addr_width; 1107 1108 } else { 1108 1109 sdmac->per_address = dmaengine_cfg->dst_addr; 1109 - sdmac->watermark_level = dmaengine_cfg->dst_maxburst; 1110 + sdmac->watermark_level = dmaengine_cfg->dst_maxburst * 1111 + dmaengine_cfg->dst_addr_width; 1110 1112 sdmac->word_size = dmaengine_cfg->dst_addr_width; 1111 1113 } 1112 1114 sdmac->direction = dmaengine_cfg->direction;
+2 -1
drivers/dma/shdma.c
··· 1262 1262 1263 1263 INIT_LIST_HEAD(&shdev->common.channels); 1264 1264 1265 - dma_cap_set(DMA_MEMCPY, shdev->common.cap_mask); 1265 + if (!pdata->slave_only) 1266 + dma_cap_set(DMA_MEMCPY, shdev->common.cap_mask); 1266 1267 if (pdata->slave && pdata->slave_num) 1267 1268 dma_cap_set(DMA_SLAVE, shdev->common.cap_mask); 1268 1269
+1
include/linux/sh_dma.h
··· 70 70 unsigned int needs_tend_set:1; 71 71 unsigned int no_dmars:1; 72 72 unsigned int chclr_present:1; 73 + unsigned int slave_only:1; 73 74 }; 74 75 75 76 /* DMA register */