Skip to content

Commit

Permalink
ARM: PL08x: fix fill_bytes calculation
Browse files Browse the repository at this point in the history
The number of bytes we want to fill into any LLI is the minimum of:
- number of bytes remaining in the transfer
- number of bytes we can transfer in a single LLI
- number of bytes we can transfer without overflowing the source boundary
- number of bytes we can transfer without overflowing the destination boundary

The minimum of the first two is already calculated (target_len).  We
limit the boundary calculations to this number of bytes, which will
then give us the number of bytes we can place into this LLI.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
  • Loading branch information
Russell King - ARM Linux authored and Dan Williams committed Jan 5, 2011
1 parent d6cf7b5 commit 5f638b4
Showing 1 changed file with 10 additions and 16 deletions.
26 changes: 10 additions & 16 deletions drivers/dma/amba-pl08x.c
Original file line number Diff line number Diff line change
Expand Up @@ -685,31 +685,25 @@ static int pl08x_fill_llis_for_desc(struct pl08x_driver_data *pl08x,
target_len = min(remainder, max_bytes_per_lli);

/*
* Set bus lengths for incrementing buses
* to number of bytes which fill to next memory
* boundary
* Set bus lengths for incrementing buses to the
* number of bytes which fill to next memory boundary,
* limiting on the target length calculated above.
*/
if (cctl & PL080_CONTROL_SRC_INCR)
txd->srcbus.fill_bytes =
pl08x_pre_boundary(
txd->srcbus.addr,
remainder);
pl08x_pre_boundary(txd->srcbus.addr,
target_len);
else
txd->srcbus.fill_bytes =
max_bytes_per_lli;
txd->srcbus.fill_bytes = target_len;

if (cctl & PL080_CONTROL_DST_INCR)
txd->dstbus.fill_bytes =
pl08x_pre_boundary(
txd->dstbus.addr,
remainder);
pl08x_pre_boundary(txd->dstbus.addr,
target_len);
else
txd->dstbus.fill_bytes =
max_bytes_per_lli;
txd->dstbus.fill_bytes = target_len;

/*
* Find the nearest
*/
/* Find the nearest */
lli_len = min(txd->srcbus.fill_bytes,
txd->dstbus.fill_bytes);

Expand Down

0 comments on commit 5f638b4

Please sign in to comment.