| .. | .. |
|---|
| 10 | 10 | #include <linux/slab.h> |
|---|
| 11 | 11 | #include <linux/delay.h> |
|---|
| 12 | 12 | #include <linux/device.h> |
|---|
| 13 | | -#include <linux/dma-mapping.h> |
|---|
| 13 | +#include <linux/dma-map-ops.h> |
|---|
| 14 | 14 | #include <linux/errno.h> |
|---|
| 15 | 15 | #include <linux/iommu-helper.h> |
|---|
| 16 | 16 | #include <linux/bitmap.h> |
|---|
| .. | .. |
|---|
| 108 | 108 | /* Allocate and initialize the free area map. */ |
|---|
| 109 | 109 | sz = num_tsb_entries / 8; |
|---|
| 110 | 110 | sz = (sz + 7UL) & ~7UL; |
|---|
| 111 | | - iommu->tbl.map = kmalloc_node(sz, GFP_KERNEL, numa_node); |
|---|
| 111 | + iommu->tbl.map = kzalloc_node(sz, GFP_KERNEL, numa_node); |
|---|
| 112 | 112 | if (!iommu->tbl.map) |
|---|
| 113 | 113 | return -ENOMEM; |
|---|
| 114 | | - memset(iommu->tbl.map, 0, sz); |
|---|
| 115 | 114 | |
|---|
| 116 | 115 | iommu_tbl_pool_init(&iommu->tbl, num_tsb_entries, IO_PAGE_SHIFT, |
|---|
| 117 | 116 | (tlb_type != hypervisor ? iommu_flushall : NULL), |
|---|
| .. | .. |
|---|
| 315 | 314 | bad_no_ctx: |
|---|
| 316 | 315 | if (printk_ratelimit()) |
|---|
| 317 | 316 | WARN_ON(1); |
|---|
| 318 | | - return SPARC_MAPPING_ERROR; |
|---|
| 317 | + return DMA_MAPPING_ERROR; |
|---|
| 319 | 318 | } |
|---|
| 320 | 319 | |
|---|
| 321 | 320 | static void strbuf_flush(struct strbuf *strbuf, struct iommu *iommu, |
|---|
| .. | .. |
|---|
| 473 | 472 | outs->dma_length = 0; |
|---|
| 474 | 473 | |
|---|
| 475 | 474 | max_seg_size = dma_get_max_seg_size(dev); |
|---|
| 476 | | - seg_boundary_size = ALIGN(dma_get_seg_boundary(dev) + 1, |
|---|
| 477 | | - IO_PAGE_SIZE) >> IO_PAGE_SHIFT; |
|---|
| 475 | + seg_boundary_size = dma_get_seg_boundary_nr_pages(dev, IO_PAGE_SHIFT); |
|---|
| 478 | 476 | base_shift = iommu->tbl.table_map_base >> IO_PAGE_SHIFT; |
|---|
| 479 | 477 | for_each_sg(sglist, s, nelems, i) { |
|---|
| 480 | 478 | unsigned long paddr, npages, entry, out_entry = 0, slen; |
|---|
| .. | .. |
|---|
| 548 | 546 | |
|---|
| 549 | 547 | if (outcount < incount) { |
|---|
| 550 | 548 | outs = sg_next(outs); |
|---|
| 551 | | - outs->dma_address = SPARC_MAPPING_ERROR; |
|---|
| 549 | + outs->dma_address = DMA_MAPPING_ERROR; |
|---|
| 552 | 550 | outs->dma_length = 0; |
|---|
| 553 | 551 | } |
|---|
| 554 | 552 | |
|---|
| .. | .. |
|---|
| 574 | 572 | iommu_tbl_range_free(&iommu->tbl, vaddr, npages, |
|---|
| 575 | 573 | IOMMU_ERROR_CODE); |
|---|
| 576 | 574 | |
|---|
| 577 | | - s->dma_address = SPARC_MAPPING_ERROR; |
|---|
| 575 | + s->dma_address = DMA_MAPPING_ERROR; |
|---|
| 578 | 576 | s->dma_length = 0; |
|---|
| 579 | 577 | } |
|---|
| 580 | 578 | if (s == outs) |
|---|
| .. | .. |
|---|
| 742 | 740 | spin_unlock_irqrestore(&iommu->lock, flags); |
|---|
| 743 | 741 | } |
|---|
| 744 | 742 | |
|---|
| 745 | | -static int dma_4u_mapping_error(struct device *dev, dma_addr_t dma_addr) |
|---|
| 746 | | -{ |
|---|
| 747 | | - return dma_addr == SPARC_MAPPING_ERROR; |
|---|
| 748 | | -} |
|---|
| 749 | | - |
|---|
| 750 | 743 | static int dma_4u_supported(struct device *dev, u64 device_mask) |
|---|
| 751 | 744 | { |
|---|
| 752 | 745 | struct iommu *iommu = dev->archdata.iommu; |
|---|
| 753 | 746 | |
|---|
| 754 | | - if (device_mask > DMA_BIT_MASK(32)) |
|---|
| 755 | | - return 0; |
|---|
| 756 | | - if ((device_mask & iommu->dma_addr_mask) == iommu->dma_addr_mask) |
|---|
| 747 | + if (ali_sound_dma_hack(dev, device_mask)) |
|---|
| 757 | 748 | return 1; |
|---|
| 758 | | -#ifdef CONFIG_PCI |
|---|
| 759 | | - if (dev_is_pci(dev)) |
|---|
| 760 | | - return pci64_dma_supported(to_pci_dev(dev), device_mask); |
|---|
| 761 | | -#endif |
|---|
| 762 | | - return 0; |
|---|
| 749 | + |
|---|
| 750 | + if (device_mask < iommu->dma_addr_mask) |
|---|
| 751 | + return 0; |
|---|
| 752 | + return 1; |
|---|
| 763 | 753 | } |
|---|
| 764 | 754 | |
|---|
| 765 | 755 | static const struct dma_map_ops sun4u_dma_ops = { |
|---|
| .. | .. |
|---|
| 772 | 762 | .sync_single_for_cpu = dma_4u_sync_single_for_cpu, |
|---|
| 773 | 763 | .sync_sg_for_cpu = dma_4u_sync_sg_for_cpu, |
|---|
| 774 | 764 | .dma_supported = dma_4u_supported, |
|---|
| 775 | | - .mapping_error = dma_4u_mapping_error, |
|---|
| 776 | 765 | }; |
|---|
| 777 | 766 | |
|---|
| 778 | 767 | const struct dma_map_ops *dma_ops = &sun4u_dma_ops; |
|---|