Use the new non-coherent DMA API including proper ownership transfers.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 drivers/scsi/53c700.c | 11 +++++++++--
 drivers/scsi/53c700.h | 16 ++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index 9a343f8ecb6c3e..5117d90ccd9edf 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -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 *
diff --git a/drivers/scsi/53c700.h b/drivers/scsi/53c700.h
index 0f545b05fe611d..c9f8c497babb3d 100644
--- a/drivers/scsi/53c700.h
+++ b/drivers/scsi/53c700.h
@@ -423,33 +423,33 @@ struct NCR_700_Host_Parameters {
 #define NCR_710_MIN_XFERP      0
 #define NCR_700_MIN_PERIOD     25 /* for SDTR message, 100ns */
 
-#define script_patch_32(dev, script, symbol, value) \
+#define script_patch_32(h, script, symbol, value) \
 { \
        int i; \
        dma_addr_t da = value; \
        for(i=0; i< (sizeof(A_##symbol##_used) / sizeof(__u32)); i++) { \
                __u32 val = bS_to_cpu((script)[A_##symbol##_used[i]]) + da; \
                (script)[A_##symbol##_used[i]] = bS_to_host(val); \
-               dma_sync_to_dev((dev), &(script)[A_##symbol##_used[i]], 4); \
+               dma_sync_to_dev((h), &(script)[A_##symbol##_used[i]], 4); \
                DEBUG((" script, patching %s at %d to %pad\n", \
                       #symbol, A_##symbol##_used[i], &da)); \
        } \
 }
 
-#define script_patch_32_abs(dev, script, symbol, value) \
+#define script_patch_32_abs(h, script, symbol, value) \
 { \
        int i; \
        dma_addr_t da = value; \
        for(i=0; i< (sizeof(A_##symbol##_used) / sizeof(__u32)); i++) { \
                (script)[A_##symbol##_used[i]] = bS_to_host(da); \
-               dma_sync_to_dev((dev), &(script)[A_##symbol##_used[i]], 4); \
+               dma_sync_to_dev((h), &(script)[A_##symbol##_used[i]], 4); \
                DEBUG((" script, patching %s at %d to %pad\n", \
                       #symbol, A_##symbol##_used[i], &da)); \
        } \
 }
 
 /* Used for patching the SCSI ID in the SELECT instruction */
-#define script_patch_ID(dev, script, symbol, value) \
+#define script_patch_ID(h, script, symbol, value) \
 { \
        int i; \
        for(i=0; i< (sizeof(A_##symbol##_used) / sizeof(__u32)); i++) { \
@@ -457,13 +457,13 @@ struct NCR_700_Host_Parameters {
                val &= 0xff00ffff; \
                val |= ((value) & 0xff) << 16; \
                (script)[A_##symbol##_used[i]] = bS_to_host(val); \
-               dma_sync_to_dev((dev), &(script)[A_##symbol##_used[i]], 4); \
+               dma_sync_to_dev((h), &(script)[A_##symbol##_used[i]], 4); \
                DEBUG((" script, patching ID field %s at %d to 0x%x\n", \
                       #symbol, A_##symbol##_used[i], val)); \
        } \
 }
 
-#define script_patch_16(dev, script, symbol, value) \
+#define script_patch_16(h, script, symbol, value) \
 { \
        int i; \
        for(i=0; i< (sizeof(A_##symbol##_used) / sizeof(__u32)); i++) { \
@@ -471,7 +471,7 @@ struct NCR_700_Host_Parameters {
                val &= 0xffff0000; \
                val |= ((value) & 0xffff); \
                (script)[A_##symbol##_used[i]] = bS_to_host(val); \
-               dma_sync_to_dev((dev), &(script)[A_##symbol##_used[i]], 4); \
+               dma_sync_to_dev((h), &(script)[A_##symbol##_used[i]], 4); \
                DEBUG((" script, patching short field %s at %d to 0x%x\n", \
                       #symbol, A_##symbol##_used[i], val)); \
        } \
-- 
2.28.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to