Re: [patch 07/11] powerpc/dma: implement new dma_*map*_attrs() interfaces

2008-07-07 Thread Geoff Levand
Benjamin Herrenschmidt wrote:
 On Fri, 2008-07-04 at 21:05 +0200, [EMAIL PROTECTED] wrote:
 plain text document attachment
 (0007-powerpc-dma-implement-new-dma_-map-_attrs-interfa.patch)
 Update powerpc to use the new dma_*map*_attrs() interfaces. In doing so
 update struct dma_mapping_ops to accept a struct dma_attrs and propagate
 these changes through to all users of the code (generic IOMMU and the
 64bit DMA code, and the iseries and ps3 platform code).
 
 The old dma_*map_*() interfaces are reimplemented as calls to the
 corresponding new interfaces.
 
 Geoff, I think the PS3 bits in this patch are ok but I'd like
 you to double-check and send your ack if you think they are.


I tested on PS3 with ps3_defconfig, and it works OK.

Acked-by: Geoff Levand [EMAIL PROTECTED]


 Signed-off-by: Mark Nelson [EMAIL PROTECTED]
 Signed-off-by: Arnd Bergmann [EMAIL PROTECTED]
 ---
  arch/powerpc/Kconfig|1 +
  arch/powerpc/kernel/dma_64.c|   34 ++---
  arch/powerpc/kernel/ibmebus.c   |   12 ++-
  arch/powerpc/kernel/iommu.c |   11 ++-
  arch/powerpc/platforms/iseries/iommu.c  |4 +-
  arch/powerpc/platforms/ps3/system-bus.c |   17 +++--
  include/asm-powerpc/dma-mapping.h   |  116 
 +++
  include/asm-powerpc/iommu.h |   12 ++-
  8 files changed, 144 insertions(+), 63 deletions(-)


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: [patch 07/11] powerpc/dma: implement new dma_*map*_attrs() interfaces

2008-07-06 Thread Benjamin Herrenschmidt
On Fri, 2008-07-04 at 21:05 +0200, [EMAIL PROTECTED] wrote:
 plain text document attachment
 (0007-powerpc-dma-implement-new-dma_-map-_attrs-interfa.patch)
 Update powerpc to use the new dma_*map*_attrs() interfaces. In doing so
 update struct dma_mapping_ops to accept a struct dma_attrs and propagate
 these changes through to all users of the code (generic IOMMU and the
 64bit DMA code, and the iseries and ps3 platform code).
 
 The old dma_*map_*() interfaces are reimplemented as calls to the
 corresponding new interfaces.

Geoff, I think the PS3 bits in this patch are ok but I'd like
you to double-check and send your ack if you think they are.

Cheers,
Ben.

 Signed-off-by: Mark Nelson [EMAIL PROTECTED]
 Signed-off-by: Arnd Bergmann [EMAIL PROTECTED]
 ---
  arch/powerpc/Kconfig|1 +
  arch/powerpc/kernel/dma_64.c|   34 ++---
  arch/powerpc/kernel/ibmebus.c   |   12 ++-
  arch/powerpc/kernel/iommu.c |   11 ++-
  arch/powerpc/platforms/iseries/iommu.c  |4 +-
  arch/powerpc/platforms/ps3/system-bus.c |   17 +++--
  include/asm-powerpc/dma-mapping.h   |  116 
 +++
  include/asm-powerpc/iommu.h |   12 ++-
  8 files changed, 144 insertions(+), 63 deletions(-)
 
 diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
 index f2a0f50..462c86a 100644
 --- a/arch/powerpc/Kconfig
 +++ b/arch/powerpc/Kconfig
 @@ -110,6 +110,7 @@ config PPC
   select HAVE_KPROBES
   select HAVE_KRETPROBES
   select HAVE_LMB
 + select HAVE_DMA_ATTRS
  
  config EARLY_PRINTK
   bool
 diff --git a/arch/powerpc/kernel/dma_64.c b/arch/powerpc/kernel/dma_64.c
 index 7397445..3ae0c35 100644
 --- a/arch/powerpc/kernel/dma_64.c
 +++ b/arch/powerpc/kernel/dma_64.c
 @@ -50,32 +50,38 @@ static void dma_iommu_free_coherent(struct device *dev, 
 size_t size,
   */
  static dma_addr_t dma_iommu_map_single(struct device *dev, void *vaddr,
  size_t size,
 -enum dma_data_direction direction)
 +enum dma_data_direction direction,
 +struct dma_attrs *attrs)
  {
   return iommu_map_single(dev, dev-archdata.dma_data, vaddr, size,
 - device_to_mask(dev), direction);
 + device_to_mask(dev), direction, attrs);
  }
  
 
  static void dma_iommu_unmap_single(struct device *dev, dma_addr_t dma_handle,
  size_t size,
 -enum dma_data_direction direction)
 +enum dma_data_direction direction,
 +struct dma_attrs *attrs)
  {
 - iommu_unmap_single(dev-archdata.dma_data, dma_handle, size, direction);
 + iommu_unmap_single(dev-archdata.dma_data, dma_handle, size, direction,
 +attrs);
  }
  
 
  static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
 - int nelems, enum dma_data_direction direction)
 + int nelems, enum dma_data_direction direction,
 + struct dma_attrs *attrs)
  {
   return iommu_map_sg(dev, dev-archdata.dma_data, sglist, nelems,
 - device_to_mask(dev), direction);
 + device_to_mask(dev), direction, attrs);
  }
  
  static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist 
 *sglist,
 - int nelems, enum dma_data_direction direction)
 + int nelems, enum dma_data_direction direction,
 + struct dma_attrs *attrs)
  {
 - iommu_unmap_sg(dev-archdata.dma_data, sglist, nelems, direction);
 + iommu_unmap_sg(dev-archdata.dma_data, sglist, nelems, direction,
 +attrs);
  }
  
  /* We support DMA to/from any memory page via the iommu */
 @@ -148,19 +154,22 @@ static void dma_direct_free_coherent(struct device 
 *dev, size_t size,
  
  static dma_addr_t dma_direct_map_single(struct device *dev, void *ptr,
   size_t size,
 - enum dma_data_direction direction)
 + enum dma_data_direction direction,
 + struct dma_attrs *attrs)
  {
   return virt_to_abs(ptr) + get_dma_direct_offset(dev);
  }
  
  static void dma_direct_unmap_single(struct device *dev, dma_addr_t dma_addr,
   size_t size,
 - enum dma_data_direction direction)
 + enum dma_data_direction direction,
 + struct dma_attrs *attrs)
  {
  }
  
  static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
 -  int nents, enum dma_data_direction direction)
 +  int nents, enum 

[patch 07/11] powerpc/dma: implement new dma_*map*_attrs() interfaces

2008-07-04 Thread arnd
Update powerpc to use the new dma_*map*_attrs() interfaces. In doing so
update struct dma_mapping_ops to accept a struct dma_attrs and propagate
these changes through to all users of the code (generic IOMMU and the
64bit DMA code, and the iseries and ps3 platform code).

The old dma_*map_*() interfaces are reimplemented as calls to the
corresponding new interfaces.

Signed-off-by: Mark Nelson [EMAIL PROTECTED]
Signed-off-by: Arnd Bergmann [EMAIL PROTECTED]
---
 arch/powerpc/Kconfig|1 +
 arch/powerpc/kernel/dma_64.c|   34 ++---
 arch/powerpc/kernel/ibmebus.c   |   12 ++-
 arch/powerpc/kernel/iommu.c |   11 ++-
 arch/powerpc/platforms/iseries/iommu.c  |4 +-
 arch/powerpc/platforms/ps3/system-bus.c |   17 +++--
 include/asm-powerpc/dma-mapping.h   |  116 +++
 include/asm-powerpc/iommu.h |   12 ++-
 8 files changed, 144 insertions(+), 63 deletions(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index f2a0f50..462c86a 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -110,6 +110,7 @@ config PPC
select HAVE_KPROBES
select HAVE_KRETPROBES
select HAVE_LMB
+   select HAVE_DMA_ATTRS
 
 config EARLY_PRINTK
bool
diff --git a/arch/powerpc/kernel/dma_64.c b/arch/powerpc/kernel/dma_64.c
index 7397445..3ae0c35 100644
--- a/arch/powerpc/kernel/dma_64.c
+++ b/arch/powerpc/kernel/dma_64.c
@@ -50,32 +50,38 @@ static void dma_iommu_free_coherent(struct device *dev, 
size_t size,
  */
 static dma_addr_t dma_iommu_map_single(struct device *dev, void *vaddr,
   size_t size,
-  enum dma_data_direction direction)
+  enum dma_data_direction direction,
+  struct dma_attrs *attrs)
 {
return iommu_map_single(dev, dev-archdata.dma_data, vaddr, size,
-   device_to_mask(dev), direction);
+   device_to_mask(dev), direction, attrs);
 }
 
 
 static void dma_iommu_unmap_single(struct device *dev, dma_addr_t dma_handle,
   size_t size,
-  enum dma_data_direction direction)
+  enum dma_data_direction direction,
+  struct dma_attrs *attrs)
 {
-   iommu_unmap_single(dev-archdata.dma_data, dma_handle, size, direction);
+   iommu_unmap_single(dev-archdata.dma_data, dma_handle, size, direction,
+  attrs);
 }
 
 
 static int dma_iommu_map_sg(struct device *dev, struct scatterlist *sglist,
-   int nelems, enum dma_data_direction direction)
+   int nelems, enum dma_data_direction direction,
+   struct dma_attrs *attrs)
 {
return iommu_map_sg(dev, dev-archdata.dma_data, sglist, nelems,
-   device_to_mask(dev), direction);
+   device_to_mask(dev), direction, attrs);
 }
 
 static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist,
-   int nelems, enum dma_data_direction direction)
+   int nelems, enum dma_data_direction direction,
+   struct dma_attrs *attrs)
 {
-   iommu_unmap_sg(dev-archdata.dma_data, sglist, nelems, direction);
+   iommu_unmap_sg(dev-archdata.dma_data, sglist, nelems, direction,
+  attrs);
 }
 
 /* We support DMA to/from any memory page via the iommu */
@@ -148,19 +154,22 @@ static void dma_direct_free_coherent(struct device *dev, 
size_t size,
 
 static dma_addr_t dma_direct_map_single(struct device *dev, void *ptr,
size_t size,
-   enum dma_data_direction direction)
+   enum dma_data_direction direction,
+   struct dma_attrs *attrs)
 {
return virt_to_abs(ptr) + get_dma_direct_offset(dev);
 }
 
 static void dma_direct_unmap_single(struct device *dev, dma_addr_t dma_addr,
size_t size,
-   enum dma_data_direction direction)
+   enum dma_data_direction direction,
+   struct dma_attrs *attrs)
 {
 }
 
 static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
-int nents, enum dma_data_direction direction)
+int nents, enum dma_data_direction direction,
+struct dma_attrs *attrs)
 {
struct scatterlist *sg;
int i;
@@ -174,7 +183,8 @@ static int dma_direct_map_sg(struct device *dev, struct 
scatterlist *sgl,
 }
 
 static void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sg,
-