dmaengine: imx-dma: cleanup scatterlist layering violations
authorLogan Gunthorpe <logang@deltatee.com>
Tue, 30 May 2017 22:39:16 +0000 (16:39 -0600)
committerVinod Koul <vinod.koul@intel.com>
Thu, 1 Jun 2017 16:39:12 +0000 (22:09 +0530)
This dma engine driver directly accesses page_link assuming knowledge
that should be contained only in scatterlist.h.

We replace these with calls to sg_chain and sg_assign_page.

Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Stephen Bates <sbates@raithlin.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Per Förlin <per.forlin@axis.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/imx-dma.c

index ab0fb80..f681df8 100644 (file)
@@ -888,7 +888,7 @@ static struct dma_async_tx_descriptor *imxdma_prep_dma_cyclic(
        sg_init_table(imxdmac->sg_list, periods);
 
        for (i = 0; i < periods; i++) {
-               imxdmac->sg_list[i].page_link = 0;
+               sg_assign_page(&imxdmac->sg_list[i], NULL);
                imxdmac->sg_list[i].offset = 0;
                imxdmac->sg_list[i].dma_address = dma_addr;
                sg_dma_len(&imxdmac->sg_list[i]) = period_len;
@@ -896,10 +896,7 @@ static struct dma_async_tx_descriptor *imxdma_prep_dma_cyclic(
        }
 
        /* close the loop */
-       imxdmac->sg_list[periods].offset = 0;
-       sg_dma_len(&imxdmac->sg_list[periods]) = 0;
-       imxdmac->sg_list[periods].page_link =
-               ((unsigned long)imxdmac->sg_list | 0x01) & ~0x02;
+       sg_chain(imxdmac->sg_list, periods + 1, imxdmac->sg_list);
 
        desc->type = IMXDMA_DESC_CYCLIC;
        desc->sg = imxdmac->sg_list;