Quellcode durchsuchen

kernel: improve dma ops inlining patches

Signed-off-by: Felix Fietkau <[email protected]>

SVN-Revision: 37790
Felix Fietkau vor 12 Jahren
Ursprung
Commit
e27f67b30a

+ 40 - 28
target/linux/generic/patches-3.10/130-mips_remove_plat_dma_functions.patch

@@ -1,35 +1,20 @@
+From 151c4e4a06b0b8d16c2fd392bb0e33868b12357f Mon Sep 17 00:00:00 2001
 From: Felix Fietkau <[email protected]>
-Subject: [PATCH 1/2] MIPS: remove unnecessary platform dma helper functions
+Date: Mon, 12 Aug 2013 12:45:52 +0200
+Subject: [PATCH] MIPS: remove unnecessary platform dma helper functions
 
 Signed-off-by: Felix Fietkau <[email protected]>
 ---
---- a/arch/mips/mm/dma-default.c
-+++ b/arch/mips/mm/dma-default.c
-@@ -289,7 +289,6 @@ static void mips_dma_sync_single_for_cpu
- static void mips_dma_sync_single_for_device(struct device *dev,
- 	dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
- {
--	plat_extra_sync_for_device(dev);
- 	if (!plat_device_is_coherent(dev))
- 		__dma_sync(dma_addr_to_page(dev, dma_handle),
- 			   dma_handle & ~PAGE_MASK, size, direction);
-@@ -323,7 +322,7 @@ static void mips_dma_sync_sg_for_device(
- 
- int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
- {
--	return plat_dma_mapping_error(dev, dma_addr);
-+	return 0;
- }
- 
- int mips_dma_supported(struct device *dev, u64 mask)
-@@ -336,7 +335,6 @@ void dma_cache_sync(struct device *dev, 
- {
- 	BUG_ON(direction == DMA_NONE);
- 
--	plat_extra_sync_for_device(dev);
- 	if (!plat_device_is_coherent(dev))
- 		__dma_sync_virtual(vaddr, size, direction);
- }
+ arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h | 12 ------------
+ arch/mips/include/asm/mach-generic/dma-coherence.h       | 10 ----------
+ arch/mips/include/asm/mach-ip27/dma-coherence.h          | 10 ----------
+ arch/mips/include/asm/mach-ip32/dma-coherence.h          | 11 -----------
+ arch/mips/include/asm/mach-jazz/dma-coherence.h          | 10 ----------
+ arch/mips/include/asm/mach-loongson/dma-coherence.h      | 10 ----------
+ arch/mips/include/asm/mach-powertv/dma-coherence.h       | 10 ----------
+ arch/mips/mm/dma-default.c                               |  4 +---
+ 8 files changed, 1 insertion(+), 76 deletions(-)
+
 --- a/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
 +++ b/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
 @@ -46,22 +46,11 @@ static inline int plat_dma_supported(str
@@ -170,3 +155,30 @@ Signed-off-by: Felix Fietkau <[email protected]>
  static inline int plat_device_is_coherent(struct device *dev)
  {
  	return 0;
+--- a/arch/mips/mm/dma-default.c
++++ b/arch/mips/mm/dma-default.c
+@@ -289,7 +289,6 @@ static void mips_dma_sync_single_for_cpu
+ static void mips_dma_sync_single_for_device(struct device *dev,
+ 	dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
+ {
+-	plat_extra_sync_for_device(dev);
+ 	if (!plat_device_is_coherent(dev))
+ 		__dma_sync(dma_addr_to_page(dev, dma_handle),
+ 			   dma_handle & ~PAGE_MASK, size, direction);
+@@ -323,7 +322,7 @@ static void mips_dma_sync_sg_for_device(
+ 
+ int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
+ {
+-	return plat_dma_mapping_error(dev, dma_addr);
++	return 0;
+ }
+ 
+ int mips_dma_supported(struct device *dev, u64 mask)
+@@ -336,7 +335,6 @@ void dma_cache_sync(struct device *dev, 
+ {
+ 	BUG_ON(direction == DMA_NONE);
+ 
+-	plat_extra_sync_for_device(dev);
+ 	if (!plat_device_is_coherent(dev))
+ 		__dma_sync_virtual(vaddr, size, direction);
+ }

+ 89 - 0
target/linux/generic/patches-3.10/131-improve_noncoherent_dma_checks.patch

@@ -0,0 +1,89 @@
+From d593f8fc627f8cdaee9c14e4d22b0770a09baaf1 Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <[email protected]>
+Date: Thu, 15 Aug 2013 10:47:47 +0200
+Subject: [PATCH] MIPS: improve checks for noncoherent DMA
+
+Only one MIPS development board actually supports enabling/disabling DMA
+coherency at runtime, so it's not a good idea to push the overhead of
+checking that configuration setting onto every other supported target as
+well.
+
+Signed-off-by: Felix Fietkau <[email protected]>
+---
+ arch/mips/Kconfig                                  | 6 +++++-
+ arch/mips/include/asm/dma-coherence.h              | 7 +++++++
+ arch/mips/include/asm/mach-generic/dma-coherence.h | 4 ----
+ arch/mips/mm/dma-default.c                         | 2 ++
+ 4 files changed, 14 insertions(+), 5 deletions(-)
+
+--- a/arch/mips/Kconfig
++++ b/arch/mips/Kconfig
+@@ -296,7 +296,7 @@ config MIPS_MALTA
+ 	select CEVT_R4K
+ 	select CSRC_R4K
+ 	select CSRC_GIC
+-	select DMA_NONCOHERENT
++	select DMA_MAYBE_COHERENT
+ 	select GENERIC_ISA_DMA
+ 	select HAVE_PCSPKR_PLATFORM
+ 	select IRQ_CPU
+@@ -947,6 +947,10 @@ config FW_CFE
+ config ARCH_DMA_ADDR_T_64BIT
+ 	def_bool (HIGHMEM && 64BIT_PHYS_ADDR) || 64BIT
+ 
++config DMA_MAYBE_COHERENT
++	select DMA_NONCOHERENT
++	bool
++
+ config DMA_COHERENT
+ 	bool
+ 
+--- a/arch/mips/include/asm/dma-coherence.h
++++ b/arch/mips/include/asm/dma-coherence.h
+@@ -9,7 +9,14 @@
+ #ifndef __ASM_DMA_COHERENCE_H
+ #define __ASM_DMA_COHERENCE_H
+ 
++#ifdef CONFIG_DMA_MAYBE_COHERENT
+ extern int coherentio;
+ extern int hw_coherentio;
++#elif defined(CONFIG_DMA_COHERENT)
++#define coherentio	1
++#else
++#define coherentio	0
++#endif
++#define hw_coherentio	0
+ 
+ #endif
+--- a/arch/mips/include/asm/mach-generic/dma-coherence.h
++++ b/arch/mips/include/asm/mach-generic/dma-coherence.h
+@@ -49,11 +49,7 @@ static inline int plat_dma_supported(str
+ 
+ static inline int plat_device_is_coherent(struct device *dev)
+ {
+-#ifdef CONFIG_DMA_COHERENT
+-	return 1;
+-#else
+ 	return coherentio;
+-#endif
+ }
+ 
+ #endif /* __ASM_MACH_GENERIC_DMA_COHERENCE_H */
+--- a/arch/mips/mm/dma-default.c
++++ b/arch/mips/mm/dma-default.c
+@@ -22,6 +22,7 @@
+ 
+ #include <dma-coherence.h>
+ 
++#ifdef CONFIG_DMA_MAYBE_COHERENT
+ int coherentio = 0;	/* User defined DMA coherency from command line. */
+ EXPORT_SYMBOL_GPL(coherentio);
+ int hw_coherentio = 0;	/* Actual hardware supported DMA coherency setting. */
+@@ -41,6 +42,7 @@ static int __init setnocoherentio(char *
+ 	return 0;
+ }
+ early_param("nocoherentio", setnocoherentio);
++#endif
+ 
+ static inline struct page *dma_addr_to_page(struct device *dev,
+ 	dma_addr_t dma_addr)

+ 28 - 12
target/linux/generic/patches-3.10/131-mips_inline_dma_ops.patch → target/linux/generic/patches-3.10/132-mips_inline_dma_ops.patch

@@ -1,5 +1,7 @@
+From 2c58080407554e1bac8fd50d23cb02420524caed Mon Sep 17 00:00:00 2001
 From: Felix Fietkau <[email protected]>
-Subject: [PATCH 2/2] MIPS: partially inline dma ops
+Date: Mon, 12 Aug 2013 12:50:22 +0200
+Subject: [PATCH] MIPS: partially inline dma ops
 
 Several DMA ops are no-op on many platforms, and the indirection through
 the mips_dma_map_ops function table is causing the compiler to emit
@@ -10,9 +12,14 @@ based system), and also slightly reduces code size of a few drivers.
 
 Signed-off-by: Felix Fietkau <[email protected]>
 ---
+ arch/mips/Kconfig                   |   4 +
+ arch/mips/include/asm/dma-mapping.h | 360 +++++++++++++++++++++++++++++++++++-
+ arch/mips/mm/dma-default.c          | 163 ++--------------
+ 3 files changed, 373 insertions(+), 154 deletions(-)
+
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -1426,6 +1426,7 @@ config CPU_CAVIUM_OCTEON
+@@ -1430,6 +1430,7 @@ config CPU_CAVIUM_OCTEON
  	select LIBFDT
  	select USE_OF
  	select USB_EHCI_BIG_ENDIAN_MMIO
@@ -20,7 +27,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	help
  	  The Cavium Octeon processor is a highly integrated chip containing
  	  many ethernet hardware widgets for networking tasks. The processor
-@@ -1646,6 +1647,9 @@ config SYS_HAS_CPU_XLR
+@@ -1650,6 +1651,9 @@ config SYS_HAS_CPU_XLR
  config SYS_HAS_CPU_XLP
  	bool
  
@@ -444,9 +451,18 @@ Signed-off-by: Felix Fietkau <[email protected]>
  }
 --- a/arch/mips/mm/dma-default.c
 +++ b/arch/mips/mm/dma-default.c
-@@ -42,26 +42,6 @@ static int __init setnocoherentio(char *
- }
+@@ -24,7 +24,7 @@
+ 
+ #ifdef CONFIG_DMA_MAYBE_COHERENT
+ int coherentio = 0;	/* User defined DMA coherency from command line. */
+-EXPORT_SYMBOL_GPL(coherentio);
++EXPORT_SYMBOL(coherentio);
+ int hw_coherentio = 0;	/* Actual hardware supported DMA coherency setting. */
+ 
+ static int __init setcoherentio(char *str)
+@@ -44,26 +44,6 @@ static int __init setnocoherentio(char *
  early_param("nocoherentio", setnocoherentio);
+ #endif
  
 -static inline struct page *dma_addr_to_page(struct device *dev,
 -	dma_addr_t dma_addr)
@@ -471,7 +487,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp)
  {
  	gfp_t dma_flag;
-@@ -117,8 +97,9 @@ void *dma_alloc_noncoherent(struct devic
+@@ -119,8 +99,9 @@ void *dma_alloc_noncoherent(struct devic
  }
  EXPORT_SYMBOL(dma_alloc_noncoherent);
  
@@ -483,7 +499,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  {
  	void *ret;
  
-@@ -142,6 +123,7 @@ static void *mips_dma_alloc_coherent(str
+@@ -144,6 +125,7 @@ static void *mips_dma_alloc_coherent(str
  
  	return ret;
  }
@@ -491,7 +507,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  
  void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr,
-@@ -152,8 +134,8 @@ void dma_free_noncoherent(struct device 
+@@ -154,8 +136,8 @@ void dma_free_noncoherent(struct device 
  }
  EXPORT_SYMBOL(dma_free_noncoherent);
  
@@ -502,7 +518,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  {
  	unsigned long addr = (unsigned long) vaddr;
  	int order = get_order(size);
-@@ -168,6 +150,7 @@ static void mips_dma_free_coherent(struc
+@@ -170,6 +152,7 @@ static void mips_dma_free_coherent(struc
  
  	free_pages(addr, get_order(size));
  }
@@ -510,7 +526,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  static inline void __dma_sync_virtual(void *addr, size_t size,
  	enum dma_data_direction direction)
-@@ -196,8 +179,8 @@ static inline void __dma_sync_virtual(vo
+@@ -198,8 +181,8 @@ static inline void __dma_sync_virtual(vo
   * If highmem is not configured then the bulk of this loop gets
   * optimized out.
   */
@@ -521,7 +537,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  {
  	size_t left = size;
  
-@@ -226,109 +209,7 @@ static inline void __dma_sync(struct pag
+@@ -228,109 +211,7 @@ static inline void __dma_sync(struct pag
  		left -= len;
  	} while (left);
  }
@@ -632,7 +648,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
  			 enum dma_data_direction direction)
-@@ -341,23 +222,10 @@ void dma_cache_sync(struct device *dev, 
+@@ -343,23 +224,10 @@ void dma_cache_sync(struct device *dev, 
  
  EXPORT_SYMBOL(dma_cache_sync);