llis_bus is the DMA address of the LLI array. Casting it to be a
pointer just to be able to use pointer arithmetic on it is not nice.
We can trivially deal with the places where we do arithmetic on it,
and it's actually cleaner this way.
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>
u32 cctl, u32 *remainder)
{
struct pl08x_lli *llis_va = txd->llis_va;
u32 cctl, u32 *remainder)
{
struct pl08x_lli *llis_va = txd->llis_va;
- struct pl08x_lli *llis_bus = (struct pl08x_lli *) txd->llis_bus;
+ dma_addr_t llis_bus = txd->llis_bus;
BUG_ON(num_llis >= MAX_NUM_TSFR_LLIS);
BUG_ON(num_llis >= MAX_NUM_TSFR_LLIS);
* memory. So we don't manipulate this bit currently.
*/
* memory. So we don't manipulate this bit currently.
*/
- llis_va[num_llis].next =
- (dma_addr_t)((u32) &(llis_bus[num_llis + 1]));
+ llis_va[num_llis].next = llis_bus + (num_llis + 1) * sizeof(struct pl08x_lli);
if (cctl & PL080_CONTROL_SRC_INCR)
txd->srcbus.addr += len;
if (cctl & PL080_CONTROL_SRC_INCR)
txd->srcbus.addr += len;
int max_bytes_per_lli;
int total_bytes = 0;
struct pl08x_lli *llis_va;
int max_bytes_per_lli;
int total_bytes = 0;
struct pl08x_lli *llis_va;
- struct pl08x_lli *llis_bus;
txd->llis_va = dma_pool_alloc(pl08x->pool, GFP_NOWAIT,
&txd->llis_bus);
txd->llis_va = dma_pool_alloc(pl08x->pool, GFP_NOWAIT,
&txd->llis_bus);
struct pl08x_txd *txd)
{
/* Free the LLI */
struct pl08x_txd *txd)
{
/* Free the LLI */
- dma_pool_free(pl08x->pool, txd->llis_va,
- txd->llis_bus);
+ dma_pool_free(pl08x->pool, txd->llis_va, txd->llis_bus);