diff options
Diffstat (limited to 'arch/sparc/mm/iommu.c')
-rw-r--r-- | arch/sparc/mm/iommu.c | 38 |
1 files changed, 1 insertions, 37 deletions
diff --git a/arch/sparc/mm/iommu.c b/arch/sparc/mm/iommu.c index c64f81e370aa..720bea2c7fdd 100644 --- a/arch/sparc/mm/iommu.c +++ b/arch/sparc/mm/iommu.c | |||
@@ -39,8 +39,6 @@ | |||
39 | 39 | ||
40 | /* srmmu.c */ | 40 | /* srmmu.c */ |
41 | extern int viking_mxcc_present; | 41 | extern int viking_mxcc_present; |
42 | BTFIXUPDEF_CALL(void, flush_page_for_dma, unsigned long) | ||
43 | #define flush_page_for_dma(page) BTFIXUP_CALL(flush_page_for_dma)(page) | ||
44 | extern int flush_page_for_dma_global; | 42 | extern int flush_page_for_dma_global; |
45 | static int viking_flush; | 43 | static int viking_flush; |
46 | /* viking.S */ | 44 | /* viking.S */ |
@@ -216,11 +214,6 @@ static u32 iommu_get_scsi_one(struct device *dev, char *vaddr, unsigned int len) | |||
216 | return busa + off; | 214 | return busa + off; |
217 | } | 215 | } |
218 | 216 | ||
219 | static __u32 iommu_get_scsi_one_noflush(struct device *dev, char *vaddr, unsigned long len) | ||
220 | { | ||
221 | return iommu_get_scsi_one(dev, vaddr, len); | ||
222 | } | ||
223 | |||
224 | static __u32 iommu_get_scsi_one_gflush(struct device *dev, char *vaddr, unsigned long len) | 217 | static __u32 iommu_get_scsi_one_gflush(struct device *dev, char *vaddr, unsigned long len) |
225 | { | 218 | { |
226 | flush_page_for_dma(0); | 219 | flush_page_for_dma(0); |
@@ -238,19 +231,6 @@ static __u32 iommu_get_scsi_one_pflush(struct device *dev, char *vaddr, unsigned | |||
238 | return iommu_get_scsi_one(dev, vaddr, len); | 231 | return iommu_get_scsi_one(dev, vaddr, len); |
239 | } | 232 | } |
240 | 233 | ||
241 | static void iommu_get_scsi_sgl_noflush(struct device *dev, struct scatterlist *sg, int sz) | ||
242 | { | ||
243 | int n; | ||
244 | |||
245 | while (sz != 0) { | ||
246 | --sz; | ||
247 | n = (sg->length + sg->offset + PAGE_SIZE-1) >> PAGE_SHIFT; | ||
248 | sg->dma_address = iommu_get_one(dev, sg_page(sg), n) + sg->offset; | ||
249 | sg->dma_length = sg->length; | ||
250 | sg = sg_next(sg); | ||
251 | } | ||
252 | } | ||
253 | |||
254 | static void iommu_get_scsi_sgl_gflush(struct device *dev, struct scatterlist *sg, int sz) | 234 | static void iommu_get_scsi_sgl_gflush(struct device *dev, struct scatterlist *sg, int sz) |
255 | { | 235 | { |
256 | int n; | 236 | int n; |
@@ -426,17 +406,6 @@ static void iommu_unmap_dma_area(struct device *dev, unsigned long busa, int len | |||
426 | } | 406 | } |
427 | #endif | 407 | #endif |
428 | 408 | ||
429 | static const struct sparc32_dma_ops iommu_dma_noflush_ops = { | ||
430 | .get_scsi_one = iommu_get_scsi_one_noflush, | ||
431 | .get_scsi_sgl = iommu_get_scsi_sgl_noflush, | ||
432 | .release_scsi_one = iommu_release_scsi_one, | ||
433 | .release_scsi_sgl = iommu_release_scsi_sgl, | ||
434 | #ifdef CONFIG_SBUS | ||
435 | .map_dma_area = iommu_map_dma_area, | ||
436 | .unmap_dma_area = iommu_unmap_dma_area, | ||
437 | #endif | ||
438 | }; | ||
439 | |||
440 | static const struct sparc32_dma_ops iommu_dma_gflush_ops = { | 409 | static const struct sparc32_dma_ops iommu_dma_gflush_ops = { |
441 | .get_scsi_one = iommu_get_scsi_one_gflush, | 410 | .get_scsi_one = iommu_get_scsi_one_gflush, |
442 | .get_scsi_sgl = iommu_get_scsi_sgl_gflush, | 411 | .get_scsi_sgl = iommu_get_scsi_sgl_gflush, |
@@ -461,12 +430,7 @@ static const struct sparc32_dma_ops iommu_dma_pflush_ops = { | |||
461 | 430 | ||
462 | void __init ld_mmu_iommu(void) | 431 | void __init ld_mmu_iommu(void) |
463 | { | 432 | { |
464 | viking_flush = (BTFIXUPVAL_CALL(flush_page_for_dma) == (unsigned long)viking_flush_page); | 433 | if (flush_page_for_dma_global) { |
465 | |||
466 | if (!BTFIXUPVAL_CALL(flush_page_for_dma)) { | ||
467 | /* IO coherent chip */ | ||
468 | sparc32_dma_ops = &iommu_dma_noflush_ops; | ||
469 | } else if (flush_page_for_dma_global) { | ||
470 | /* flush_page_for_dma flushes everything, no matter of what page is it */ | 434 | /* flush_page_for_dma flushes everything, no matter of what page is it */ |
471 | sparc32_dma_ops = &iommu_dma_gflush_ops; | 435 | sparc32_dma_ops = &iommu_dma_gflush_ops; |
472 | } else { | 436 | } else { |