diff options
-rw-r--r-- | drivers/dma/amba-pl08x.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c index be9a1c718f9a..e5930d512b00 100644 --- a/drivers/dma/amba-pl08x.c +++ b/drivers/dma/amba-pl08x.c | |||
@@ -604,23 +604,17 @@ static int pl08x_fill_llis_for_desc(struct pl08x_driver_data *pl08x, | |||
604 | bd.srcbus.buswidth = bd.srcbus.maxwidth; | 604 | bd.srcbus.buswidth = bd.srcbus.maxwidth; |
605 | bd.dstbus.buswidth = bd.dstbus.maxwidth; | 605 | bd.dstbus.buswidth = bd.dstbus.maxwidth; |
606 | 606 | ||
607 | /* | ||
608 | * Bytes transferred == tsize * MIN(buswidths), not max(buswidths) | ||
609 | */ | ||
610 | max_bytes_per_lli = min(bd.srcbus.buswidth, bd.dstbus.buswidth) * | ||
611 | PL080_CONTROL_TRANSFER_SIZE_MASK; | ||
612 | |||
613 | /* We need to count this down to zero */ | 607 | /* We need to count this down to zero */ |
614 | bd.remainder = txd->len; | 608 | bd.remainder = txd->len; |
615 | 609 | ||
616 | pl08x_choose_master_bus(&bd, &mbus, &sbus, cctl); | 610 | pl08x_choose_master_bus(&bd, &mbus, &sbus, cctl); |
617 | 611 | ||
618 | dev_vdbg(&pl08x->adev->dev, "src=0x%08x%s/%u dst=0x%08x%s/%u len=%zu llimax=%zu\n", | 612 | dev_vdbg(&pl08x->adev->dev, "src=0x%08x%s/%u dst=0x%08x%s/%u len=%zu\n", |
619 | bd.srcbus.addr, cctl & PL080_CONTROL_SRC_INCR ? "+" : "", | 613 | bd.srcbus.addr, cctl & PL080_CONTROL_SRC_INCR ? "+" : "", |
620 | bd.srcbus.buswidth, | 614 | bd.srcbus.buswidth, |
621 | bd.dstbus.addr, cctl & PL080_CONTROL_DST_INCR ? "+" : "", | 615 | bd.dstbus.addr, cctl & PL080_CONTROL_DST_INCR ? "+" : "", |
622 | bd.dstbus.buswidth, | 616 | bd.dstbus.buswidth, |
623 | bd.remainder, max_bytes_per_lli); | 617 | bd.remainder); |
624 | dev_vdbg(&pl08x->adev->dev, "mbus=%s sbus=%s\n", | 618 | dev_vdbg(&pl08x->adev->dev, "mbus=%s sbus=%s\n", |
625 | mbus == &bd.srcbus ? "src" : "dst", | 619 | mbus == &bd.srcbus ? "src" : "dst", |
626 | sbus == &bd.srcbus ? "src" : "dst"); | 620 | sbus == &bd.srcbus ? "src" : "dst"); |
@@ -660,6 +654,10 @@ static int pl08x_fill_llis_for_desc(struct pl08x_driver_data *pl08x, | |||
660 | sbus->buswidth = 1; | 654 | sbus->buswidth = 1; |
661 | } | 655 | } |
662 | 656 | ||
657 | /* Bytes transferred = tsize * src width, not MIN(buswidths) */ | ||
658 | max_bytes_per_lli = bd.srcbus.buswidth * | ||
659 | PL080_CONTROL_TRANSFER_SIZE_MASK; | ||
660 | |||
663 | /* | 661 | /* |
664 | * Make largest possible LLIs until less than one bus | 662 | * Make largest possible LLIs until less than one bus |
665 | * width left | 663 | * width left |