Re: [patch 07/11] powerpc/dma: implement new dma_*map*_attrs() interfaces
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
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
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, -