Commit 543cea9a authored by Christoph Hellwig's avatar Christoph Hellwig

ia64: use generic swiotlb_ops

These are identical to the ia64 ops, and would also support CMA
if enabled on ia64.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
parent d5c23ebf
...@@ -146,6 +146,7 @@ config IA64_GENERIC ...@@ -146,6 +146,7 @@ config IA64_GENERIC
bool "generic" bool "generic"
select NUMA select NUMA
select ACPI_NUMA select ACPI_NUMA
select DMA_DIRECT_OPS
select SWIOTLB select SWIOTLB
select PCI_MSI select PCI_MSI
help help
...@@ -166,6 +167,7 @@ config IA64_GENERIC ...@@ -166,6 +167,7 @@ config IA64_GENERIC
config IA64_DIG config IA64_DIG
bool "DIG-compliant" bool "DIG-compliant"
select DMA_DIRECT_OPS
select SWIOTLB select SWIOTLB
config IA64_DIG_VTD config IA64_DIG_VTD
...@@ -181,6 +183,7 @@ config IA64_HP_ZX1 ...@@ -181,6 +183,7 @@ config IA64_HP_ZX1
config IA64_HP_ZX1_SWIOTLB config IA64_HP_ZX1_SWIOTLB
bool "HP-zx1/sx1000 with software I/O TLB" bool "HP-zx1/sx1000 with software I/O TLB"
select DMA_DIRECT_OPS
select SWIOTLB select SWIOTLB
help help
Build a kernel that runs on HP zx1 and sx1000 systems even when they Build a kernel that runs on HP zx1 and sx1000 systems even when they
...@@ -204,6 +207,7 @@ config IA64_SGI_UV ...@@ -204,6 +207,7 @@ config IA64_SGI_UV
bool "SGI-UV" bool "SGI-UV"
select NUMA select NUMA
select ACPI_NUMA select ACPI_NUMA
select DMA_DIRECT_OPS
select SWIOTLB select SWIOTLB
help help
Selecting this option will optimize the kernel for use on UV based Selecting this option will optimize the kernel for use on UV based
...@@ -214,6 +218,7 @@ config IA64_SGI_UV ...@@ -214,6 +218,7 @@ config IA64_SGI_UV
config IA64_HP_SIM config IA64_HP_SIM
bool "Ski-simulator" bool "Ski-simulator"
select DMA_DIRECT_OPS
select SWIOTLB select SWIOTLB
depends on !PM depends on !PM
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <asm/machvec.h> #include <asm/machvec.h>
extern const struct dma_map_ops sba_dma_ops, ia64_swiotlb_dma_ops; extern const struct dma_map_ops sba_dma_ops;
/* swiotlb declarations & definitions: */ /* swiotlb declarations & definitions: */
extern int swiotlb_late_init_with_default_size (size_t size); extern int swiotlb_late_init_with_default_size (size_t size);
...@@ -38,7 +38,7 @@ static inline int use_swiotlb(struct device *dev) ...@@ -38,7 +38,7 @@ static inline int use_swiotlb(struct device *dev)
const struct dma_map_ops *hwsw_dma_get_ops(struct device *dev) const struct dma_map_ops *hwsw_dma_get_ops(struct device *dev)
{ {
if (use_swiotlb(dev)) if (use_swiotlb(dev))
return &ia64_swiotlb_dma_ops; return &swiotlb_dma_ops;
return &sba_dma_ops; return &sba_dma_ops;
} }
EXPORT_SYMBOL(hwsw_dma_get_ops); EXPORT_SYMBOL(hwsw_dma_get_ops);
......
...@@ -2096,7 +2096,7 @@ static int __init acpi_sba_ioc_init_acpi(void) ...@@ -2096,7 +2096,7 @@ static int __init acpi_sba_ioc_init_acpi(void)
/* This has to run before acpi_scan_init(). */ /* This has to run before acpi_scan_init(). */
arch_initcall(acpi_sba_ioc_init_acpi); arch_initcall(acpi_sba_ioc_init_acpi);
extern const struct dma_map_ops ia64_swiotlb_dma_ops; extern const struct dma_map_ops swiotlb_dma_ops;
static int __init static int __init
sba_init(void) sba_init(void)
...@@ -2111,7 +2111,7 @@ sba_init(void) ...@@ -2111,7 +2111,7 @@ sba_init(void)
* a successful kdump kernel boot is to use the swiotlb. * a successful kdump kernel boot is to use the swiotlb.
*/ */
if (is_kdump_kernel()) { if (is_kdump_kernel()) {
dma_ops = &ia64_swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
if (swiotlb_late_init_with_default_size(64 * (1<<20)) != 0) if (swiotlb_late_init_with_default_size(64 * (1<<20)) != 0)
panic("Unable to initialize software I/O TLB:" panic("Unable to initialize software I/O TLB:"
" Try machvec=dig boot option"); " Try machvec=dig boot option");
...@@ -2133,7 +2133,7 @@ sba_init(void) ...@@ -2133,7 +2133,7 @@ sba_init(void)
* If we didn't find something sba_iommu can claim, we * If we didn't find something sba_iommu can claim, we
* need to setup the swiotlb and switch to the dig machvec. * need to setup the swiotlb and switch to the dig machvec.
*/ */
dma_ops = &ia64_swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
if (swiotlb_late_init_with_default_size(64 * (1<<20)) != 0) if (swiotlb_late_init_with_default_size(64 * (1<<20)) != 0)
panic("Unable to find SBA IOMMU or initialize " panic("Unable to find SBA IOMMU or initialize "
"software I/O TLB: Try machvec=dig boot option"); "software I/O TLB: Try machvec=dig boot option");
......
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
#include <linux/cache.h> #include <linux/cache.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/swiotlb.h>
#include <asm/swiotlb.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/iommu.h> #include <asm/iommu.h>
#include <asm/machvec.h> #include <asm/machvec.h>
...@@ -15,40 +14,9 @@ ...@@ -15,40 +14,9 @@
int swiotlb __read_mostly; int swiotlb __read_mostly;
EXPORT_SYMBOL(swiotlb); EXPORT_SYMBOL(swiotlb);
static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp,
unsigned long attrs)
{
if (dev->coherent_dma_mask != DMA_BIT_MASK(64))
gfp |= GFP_DMA32;
return swiotlb_alloc_coherent(dev, size, dma_handle, gfp);
}
static void ia64_swiotlb_free_coherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t dma_addr,
unsigned long attrs)
{
swiotlb_free_coherent(dev, size, vaddr, dma_addr);
}
const struct dma_map_ops ia64_swiotlb_dma_ops = {
.alloc = ia64_swiotlb_alloc_coherent,
.free = ia64_swiotlb_free_coherent,
.map_page = swiotlb_map_page,
.unmap_page = swiotlb_unmap_page,
.map_sg = swiotlb_map_sg_attrs,
.unmap_sg = swiotlb_unmap_sg_attrs,
.sync_single_for_cpu = swiotlb_sync_single_for_cpu,
.sync_single_for_device = swiotlb_sync_single_for_device,
.sync_sg_for_cpu = swiotlb_sync_sg_for_cpu,
.sync_sg_for_device = swiotlb_sync_sg_for_device,
.dma_supported = swiotlb_dma_supported,
.mapping_error = swiotlb_dma_mapping_error,
};
void __init swiotlb_dma_init(void) void __init swiotlb_dma_init(void)
{ {
dma_ops = &ia64_swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
swiotlb_init(1); swiotlb_init(1);
} }
...@@ -60,7 +28,7 @@ void __init pci_swiotlb_init(void) ...@@ -60,7 +28,7 @@ void __init pci_swiotlb_init(void)
printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n"); printk(KERN_INFO "PCI-DMA: Re-initialize machine vector.\n");
machvec_init("dig"); machvec_init("dig");
swiotlb_init(1); swiotlb_init(1);
dma_ops = &ia64_swiotlb_dma_ops; dma_ops = &swiotlb_dma_ops;
#else #else
panic("Unable to find Intel IOMMU"); panic("Unable to find Intel IOMMU");
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment