]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/dma/hsu/hsu.c
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[karo-tx-linux.git] / drivers / dma / hsu / hsu.c
index ee510515ce187af75d3ba873b65d5de26cc3acb4..f8c5cd53307c2c5993add0114720bd8b005e4f21 100644 (file)
@@ -77,8 +77,8 @@ static void hsu_dma_chan_start(struct hsu_dma_chan *hsuc)
        hsu_chan_writel(hsuc, HSU_CH_MTSR, mtsr);
 
        /* Set descriptors */
-       count = (desc->nents - desc->active) % HSU_DMA_CHAN_NR_DESC;
-       for (i = 0; i < count; i++) {
+       count = desc->nents - desc->active;
+       for (i = 0; i < count && i < HSU_DMA_CHAN_NR_DESC; i++) {
                hsu_chan_writel(hsuc, HSU_CH_DxSAR(i), desc->sg[i].addr);
                hsu_chan_writel(hsuc, HSU_CH_DxTSR(i), desc->sg[i].len);
 
@@ -160,7 +160,7 @@ irqreturn_t hsu_dma_irq(struct hsu_dma_chip *chip, unsigned short nr)
                return IRQ_NONE;
 
        /* Timeout IRQ, need wait some time, see Errata 2 */
-       if (hsuc->direction == DMA_DEV_TO_MEM && (sr & HSU_CH_SR_DESCTO_ANY))
+       if (sr & HSU_CH_SR_DESCTO_ANY)
                udelay(2);
 
        sr &= ~HSU_CH_SR_DESCTO_ANY;
@@ -420,6 +420,8 @@ int hsu_dma_probe(struct hsu_dma_chip *chip)
 
        hsu->dma.dev = chip->dev;
 
+       dma_set_max_seg_size(hsu->dma.dev, HSU_CH_DxTSR_MASK);
+
        ret = dma_async_device_register(&hsu->dma);
        if (ret)
                return ret;