diff options
Diffstat (limited to 'arch/sparc64')
-rw-r--r-- | arch/sparc64/kernel/iommu.c | 7 | ||||
-rw-r--r-- | arch/sparc64/kernel/iommu_common.h | 14 | ||||
-rw-r--r-- | arch/sparc64/kernel/pci_sun4v.c | 7 |
3 files changed, 10 insertions, 18 deletions
diff --git a/arch/sparc64/kernel/iommu.c b/arch/sparc64/kernel/iommu.c index f73b238cd2d4..1cc1995531e2 100644 --- a/arch/sparc64/kernel/iommu.c +++ b/arch/sparc64/kernel/iommu.c | |||
@@ -575,7 +575,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, | |||
575 | } | 575 | } |
576 | /* Allocate iommu entries for that segment */ | 576 | /* Allocate iommu entries for that segment */ |
577 | paddr = (unsigned long) SG_ENT_PHYS_ADDRESS(s); | 577 | paddr = (unsigned long) SG_ENT_PHYS_ADDRESS(s); |
578 | npages = iommu_nr_pages(paddr, slen); | 578 | npages = iommu_num_pages(paddr, slen, IO_PAGE_SIZE); |
579 | entry = iommu_range_alloc(dev, iommu, npages, &handle); | 579 | entry = iommu_range_alloc(dev, iommu, npages, &handle); |
580 | 580 | ||
581 | /* Handle failure */ | 581 | /* Handle failure */ |
@@ -647,7 +647,8 @@ iommu_map_failed: | |||
647 | iopte_t *base; | 647 | iopte_t *base; |
648 | 648 | ||
649 | vaddr = s->dma_address & IO_PAGE_MASK; | 649 | vaddr = s->dma_address & IO_PAGE_MASK; |
650 | npages = iommu_nr_pages(s->dma_address, s->dma_length); | 650 | npages = iommu_num_pages(s->dma_address, s->dma_length, |
651 | IO_PAGE_SIZE); | ||
651 | iommu_range_free(iommu, vaddr, npages); | 652 | iommu_range_free(iommu, vaddr, npages); |
652 | 653 | ||
653 | entry = (vaddr - iommu->page_table_map_base) | 654 | entry = (vaddr - iommu->page_table_map_base) |
@@ -715,7 +716,7 @@ static void dma_4u_unmap_sg(struct device *dev, struct scatterlist *sglist, | |||
715 | 716 | ||
716 | if (!len) | 717 | if (!len) |
717 | break; | 718 | break; |
718 | npages = iommu_nr_pages(dma_handle, len); | 719 | npages = iommu_num_pages(dma_handle, len, IO_PAGE_SIZE); |
719 | iommu_range_free(iommu, dma_handle, npages); | 720 | iommu_range_free(iommu, dma_handle, npages); |
720 | 721 | ||
721 | entry = ((dma_handle - iommu->page_table_map_base) | 722 | entry = ((dma_handle - iommu->page_table_map_base) |
diff --git a/arch/sparc64/kernel/iommu_common.h b/arch/sparc64/kernel/iommu_common.h index 202d8ae2a67e..591f5879039c 100644 --- a/arch/sparc64/kernel/iommu_common.h +++ b/arch/sparc64/kernel/iommu_common.h | |||
@@ -35,17 +35,6 @@ | |||
35 | 35 | ||
36 | #define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG)))) | 36 | #define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG)))) |
37 | 37 | ||
38 | static inline unsigned long iommu_nr_pages(unsigned long vaddr, | ||
39 | unsigned long slen) | ||
40 | { | ||
41 | unsigned long npages; | ||
42 | |||
43 | npages = IO_PAGE_ALIGN(vaddr + slen) - (vaddr & IO_PAGE_MASK); | ||
44 | npages >>= IO_PAGE_SHIFT; | ||
45 | |||
46 | return npages; | ||
47 | } | ||
48 | |||
49 | static inline int is_span_boundary(unsigned long entry, | 38 | static inline int is_span_boundary(unsigned long entry, |
50 | unsigned long shift, | 39 | unsigned long shift, |
51 | unsigned long boundary_size, | 40 | unsigned long boundary_size, |
@@ -53,7 +42,8 @@ static inline int is_span_boundary(unsigned long entry, | |||
53 | struct scatterlist *sg) | 42 | struct scatterlist *sg) |
54 | { | 43 | { |
55 | unsigned long paddr = SG_ENT_PHYS_ADDRESS(outs); | 44 | unsigned long paddr = SG_ENT_PHYS_ADDRESS(outs); |
56 | int nr = iommu_nr_pages(paddr, outs->dma_length + sg->length); | 45 | int nr = iommu_num_pages(paddr, outs->dma_length + sg->length, |
46 | IO_PAGE_SIZE); | ||
57 | 47 | ||
58 | return iommu_is_span_boundary(entry, nr, shift, boundary_size); | 48 | return iommu_is_span_boundary(entry, nr, shift, boundary_size); |
59 | } | 49 | } |
diff --git a/arch/sparc64/kernel/pci_sun4v.c b/arch/sparc64/kernel/pci_sun4v.c index e24495407e89..34a1fded3941 100644 --- a/arch/sparc64/kernel/pci_sun4v.c +++ b/arch/sparc64/kernel/pci_sun4v.c | |||
@@ -384,7 +384,7 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, | |||
384 | } | 384 | } |
385 | /* Allocate iommu entries for that segment */ | 385 | /* Allocate iommu entries for that segment */ |
386 | paddr = (unsigned long) SG_ENT_PHYS_ADDRESS(s); | 386 | paddr = (unsigned long) SG_ENT_PHYS_ADDRESS(s); |
387 | npages = iommu_nr_pages(paddr, slen); | 387 | npages = iommu_num_pages(paddr, slen, IO_PAGE_SIZE); |
388 | entry = iommu_range_alloc(dev, iommu, npages, &handle); | 388 | entry = iommu_range_alloc(dev, iommu, npages, &handle); |
389 | 389 | ||
390 | /* Handle failure */ | 390 | /* Handle failure */ |
@@ -461,7 +461,8 @@ iommu_map_failed: | |||
461 | unsigned long vaddr, npages; | 461 | unsigned long vaddr, npages; |
462 | 462 | ||
463 | vaddr = s->dma_address & IO_PAGE_MASK; | 463 | vaddr = s->dma_address & IO_PAGE_MASK; |
464 | npages = iommu_nr_pages(s->dma_address, s->dma_length); | 464 | npages = iommu_num_pages(s->dma_address, s->dma_length, |
465 | IO_PAGE_SIZE); | ||
465 | iommu_range_free(iommu, vaddr, npages); | 466 | iommu_range_free(iommu, vaddr, npages); |
466 | /* XXX demap? XXX */ | 467 | /* XXX demap? XXX */ |
467 | s->dma_address = DMA_ERROR_CODE; | 468 | s->dma_address = DMA_ERROR_CODE; |
@@ -500,7 +501,7 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, | |||
500 | 501 | ||
501 | if (!len) | 502 | if (!len) |
502 | break; | 503 | break; |
503 | npages = iommu_nr_pages(dma_handle, len); | 504 | npages = iommu_num_pages(dma_handle, len, IO_PAGE_SIZE); |
504 | iommu_range_free(iommu, dma_handle, npages); | 505 | iommu_range_free(iommu, dma_handle, npages); |
505 | 506 | ||
506 | entry = ((dma_handle - iommu->page_table_map_base) >> IO_PAGE_SHIFT); | 507 | entry = ((dma_handle - iommu->page_table_map_base) >> IO_PAGE_SHIFT); |