53c700: convert to dma_alloc_noncoherent
authorChristoph Hellwig <hch@lst.de>
Tue, 18 Aug 2020 14:38:25 +0000 (16:38 +0200)
committerChristoph Hellwig <hch@lst.de>
Fri, 25 Sep 2020 04:20:45 +0000 (06:20 +0200)
Use the new non-coherent DMA API including proper ownership transfers.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
drivers/scsi/53c700.c

index c59226d7e2f6b5606191130c93ee4b3a5676b273..5117d90ccd9edf4d601b68655666e79b75bd1d14 100644 (file)
@@ -269,18 +269,25 @@ NCR_700_get_SXFER(struct scsi_device *SDp)
                                              spi_period(SDp->sdev_target));
 }
 
+static inline dma_addr_t virt_to_dma(struct NCR_700_Host_Parameters *h, void *p)
+{
+       return h->pScript + ((uintptr_t)p - (uintptr_t)h->script);
+}
+
 static inline void dma_sync_to_dev(struct NCR_700_Host_Parameters *h,
                void *addr, size_t size)
 {
        if (h->noncoherent)
-               dma_cache_sync(h->dev, addr, size, DMA_TO_DEVICE);
+               dma_sync_single_for_device(h->dev, virt_to_dma(h, addr),
+                                          size, DMA_BIDIRECTIONAL);
 }
 
 static inline void dma_sync_from_dev(struct NCR_700_Host_Parameters *h,
                void *addr, size_t size)
 {
        if (h->noncoherent)
-               dma_cache_sync(h->dev, addr, size, DMA_FROM_DEVICE);
+               dma_sync_single_for_device(h->dev, virt_to_dma(h, addr), size,
+                                          DMA_BIDIRECTIONAL);
 }
 
 struct Scsi_Host *
@@ -300,8 +307,8 @@ NCR_700_detect(struct scsi_host_template *tpnt,
        memory = dma_alloc_coherent(dev, TOTAL_MEM_SIZE, &pScript, GFP_KERNEL);
        if (!memory) {
                hostdata->noncoherent = 1;
-               memory = dma_alloc_attrs(dev, TOTAL_MEM_SIZE, &pScript,
-                                        GFP_KERNEL, DMA_ATTR_NON_CONSISTENT);
+               memory = dma_alloc_noncoherent(dev, TOTAL_MEM_SIZE, &pScript,
+                                        DMA_BIDIRECTIONAL, GFP_KERNEL);
        }
        if (!memory) {
                printk(KERN_ERR "53c700: Failed to allocate memory for driver, detaching\n");
@@ -414,8 +421,9 @@ NCR_700_release(struct Scsi_Host *host)
                (struct NCR_700_Host_Parameters *)host->hostdata[0];
 
        if (hostdata->noncoherent)
-               dma_free_attrs(hostdata->dev, TOTAL_MEM_SIZE, hostdata->script,
-                              hostdata->pScript, DMA_ATTR_NON_CONSISTENT);
+               dma_free_noncoherent(hostdata->dev, TOTAL_MEM_SIZE,
+                               hostdata->script, hostdata->pScript,
+                               DMA_BIDIRECTIONAL);
        else
                dma_free_coherent(hostdata->dev, TOTAL_MEM_SIZE,
                                  hostdata->script, hostdata->pScript);