spi: spi-mxs: Fix mapping from vmalloc-ed buffer to scatter list
[firefly-linux-kernel-4.4.55.git] / drivers / spi / spi-mxs.c
index a9e72f9d385e4e8ff73eb8766d2cf519b46768ac..06a11546a1a7a2f8d8958ec589474bae146e56be 100644 (file)
@@ -182,7 +182,6 @@ static int mxs_spi_txrx_dma(struct mxs_spi *spi,
        int min, ret;
        u32 ctrl0;
        struct page *vm_page;
-       void *sg_buf;
        struct {
                u32                     pio[4];
                struct scatterlist      sg;
@@ -232,13 +231,14 @@ static int mxs_spi_txrx_dma(struct mxs_spi *spi,
                                ret = -ENOMEM;
                                goto err_vmalloc;
                        }
-                       sg_buf = page_address(vm_page) +
-                               ((size_t)buf & ~PAGE_MASK);
+
+                       sg_init_table(&dma_xfer[sg_count].sg, 1);
+                       sg_set_page(&dma_xfer[sg_count].sg, vm_page,
+                                   min, offset_in_page(buf));
                } else {
-                       sg_buf = buf;
+                       sg_init_one(&dma_xfer[sg_count].sg, buf, min);
                }
 
-               sg_init_one(&dma_xfer[sg_count].sg, sg_buf, min);
                ret = dma_map_sg(ssp->dev, &dma_xfer[sg_count].sg, 1,
                        (flags & TXRX_WRITE) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);