diff options
-rw-r--r-- | arch/arm64/include/asm/dma-mapping.h | 7 | ||||
-rw-r--r-- | arch/arm64/mm/dma-mapping.c | 31 |
2 files changed, 7 insertions, 31 deletions
diff --git a/arch/arm64/include/asm/dma-mapping.h b/arch/arm64/include/asm/dma-mapping.h index dc82e52acdb3..adeae3f6f0fc 100644 --- a/arch/arm64/include/asm/dma-mapping.h +++ b/arch/arm64/include/asm/dma-mapping.h | |||
@@ -52,6 +52,13 @@ static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops) | |||
52 | dev->archdata.dma_ops = ops; | 52 | dev->archdata.dma_ops = ops; |
53 | } | 53 | } |
54 | 54 | ||
55 | static inline int set_arch_dma_coherent_ops(struct device *dev) | ||
56 | { | ||
57 | set_dma_ops(dev, &coherent_swiotlb_dma_ops); | ||
58 | return 0; | ||
59 | } | ||
60 | #define set_arch_dma_coherent_ops set_arch_dma_coherent_ops | ||
61 | |||
55 | #include <asm-generic/dma-mapping-common.h> | 62 | #include <asm-generic/dma-mapping-common.h> |
56 | 63 | ||
57 | static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) | 64 | static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr) |
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 4164c5ace9f8..d6ceb3df0047 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c | |||
@@ -22,11 +22,8 @@ | |||
22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
23 | #include <linux/dma-mapping.h> | 23 | #include <linux/dma-mapping.h> |
24 | #include <linux/dma-contiguous.h> | 24 | #include <linux/dma-contiguous.h> |
25 | #include <linux/of.h> | ||
26 | #include <linux/platform_device.h> | ||
27 | #include <linux/vmalloc.h> | 25 | #include <linux/vmalloc.h> |
28 | #include <linux/swiotlb.h> | 26 | #include <linux/swiotlb.h> |
29 | #include <linux/amba/bus.h> | ||
30 | 27 | ||
31 | #include <asm/cacheflush.h> | 28 | #include <asm/cacheflush.h> |
32 | 29 | ||
@@ -308,40 +305,12 @@ struct dma_map_ops coherent_swiotlb_dma_ops = { | |||
308 | }; | 305 | }; |
309 | EXPORT_SYMBOL(coherent_swiotlb_dma_ops); | 306 | EXPORT_SYMBOL(coherent_swiotlb_dma_ops); |
310 | 307 | ||
311 | static int dma_bus_notifier(struct notifier_block *nb, | ||
312 | unsigned long event, void *_dev) | ||
313 | { | ||
314 | struct device *dev = _dev; | ||
315 | |||
316 | if (event != BUS_NOTIFY_ADD_DEVICE) | ||
317 | return NOTIFY_DONE; | ||
318 | |||
319 | if (of_property_read_bool(dev->of_node, "dma-coherent")) | ||
320 | set_dma_ops(dev, &coherent_swiotlb_dma_ops); | ||
321 | |||
322 | return NOTIFY_OK; | ||
323 | } | ||
324 | |||
325 | static struct notifier_block platform_bus_nb = { | ||
326 | .notifier_call = dma_bus_notifier, | ||
327 | }; | ||
328 | |||
329 | static struct notifier_block amba_bus_nb = { | ||
330 | .notifier_call = dma_bus_notifier, | ||
331 | }; | ||
332 | |||
333 | extern int swiotlb_late_init_with_default_size(size_t default_size); | 308 | extern int swiotlb_late_init_with_default_size(size_t default_size); |
334 | 309 | ||
335 | static int __init swiotlb_late_init(void) | 310 | static int __init swiotlb_late_init(void) |
336 | { | 311 | { |
337 | size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); | 312 | size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); |
338 | 313 | ||
339 | /* | ||
340 | * These must be registered before of_platform_populate(). | ||
341 | */ | ||
342 | bus_register_notifier(&platform_bus_type, &platform_bus_nb); | ||
343 | bus_register_notifier(&amba_bustype, &amba_bus_nb); | ||
344 | |||
345 | dma_ops = &noncoherent_swiotlb_dma_ops; | 314 | dma_ops = &noncoherent_swiotlb_dma_ops; |
346 | 315 | ||
347 | return swiotlb_late_init_with_default_size(swiotlb_size); | 316 | return swiotlb_late_init_with_default_size(swiotlb_size); |