1. 01 9月, 2011 1 次提交
    • M
      powerpc: Override dma_get_required_mask by platform hook and ops · 6a5c7be5
      Milton Miller 提交于
      The hook dma_get_required_mask is supposed to return the mask required
      by the platform to operate efficently.  The generic version of
      dma_get_required_mask in driver/base/platform.c returns a mask based
      only on max_pfn.  However, this is likely too big for iommu systems
      and could be too small for platforms that require a dma offset or have
      a secondary window at a high offset.
      
      Override the default, provide a hook in ppc_md used by pseries lpar and
      cell, and provide the default answer based on memblock_end_of_DRAM(),
      with hooks for get_dma_offset, and provide an implementation for iommu
      that looks at the defined table size.  Coverting from the end address
      to the required bit mask is based on the generic implementation.
      
      The need for this was discovered when the qla2xxx driver switched to
      64 bit dma then reverted to 32 bit when dma_get_required_mask said
      32 bits was sufficient.
      Signed-off-by: NMilton Miller <miltonm@bga.com>
      Signed-off-by: NNishanth Aravamudan <nacc@us.ibm.com>
      Cc: linuxppc-dev@lists.ozlabs.org
      Cc: linux-kernel@vger.kernel.org
      Cc: benh@kernel.crashing.org
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      6a5c7be5
  2. 30 3月, 2011 1 次提交
  3. 02 9月, 2010 1 次提交
  4. 11 8月, 2010 2 次提交
  5. 13 3月, 2010 1 次提交
  6. 16 12月, 2009 1 次提交
  7. 24 9月, 2009 2 次提交
  8. 28 8月, 2009 5 次提交
  9. 28 7月, 2009 2 次提交
  10. 26 6月, 2009 1 次提交
  11. 09 6月, 2009 1 次提交
  12. 27 5月, 2009 1 次提交
    • B
      powerpc: Fix up dma_alloc_coherent() on platforms without cache coherency. · 8b31e49d
      Benjamin Herrenschmidt 提交于
      The implementation we just revived has issues, such as using a
      Kconfig-defined virtual address area in kernel space that nothing
      actually carves out (and thus will overlap whatever is there),
      or having some dependencies on being self contained in a single
      PTE page which adds unnecessary constraints on the kernel virtual
      address space.
      
      This fixes it by using more classic PTE accessors and automatically
      locating the area for consistent memory, carving an appropriate hole
      in the kernel virtual address space, leaving only the size of that
      area as a Kconfig option. It also brings some dma-mask related fixes
      from the ARM implementation which was almost identical initially but
      grew its own fixes.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      8b31e49d
  13. 24 3月, 2009 1 次提交
  14. 16 12月, 2008 1 次提交
  15. 03 12月, 2008 1 次提交
    • B
      powerpc: Add sync_*_for_* to dma_ops · 15e09c0e
      Becky Bruce 提交于
      We need to swap these out once we start using swiotlb, so add
      them to dma_ops.  Create CONFIG_PPC_NEED_DMA_SYNC_OPS Kconfig
      option; this is currently enabled automatically if we're
      CONFIG_NOT_COHERENT_CACHE.  In the future, this will also
      be enabled for builds that need swiotlb.  If PPC_NEED_DMA_SYNC_OPS
      is not defined, the dma_sync_*_for_* ops compile to nothing.
      Otherwise, they access the dma_ops pointers for the sync ops.
      
      This patch also changes dma_sync_single_range_* to actually
      sync the range - previously it was using a generous
      dma_sync_single.  dma_sync_single_* is now implemented
      as a dma_sync_single_range with an offset of 0.
      Signed-off-by: NBecky Bruce <becky.bruce@freescale.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      15e09c0e
  16. 06 11月, 2008 1 次提交
  17. 25 9月, 2008 1 次提交
    • B
      powerpc: Merge 32 and 64-bit dma code · 4fc665b8
      Becky Bruce 提交于
      We essentially adopt the 64-bit dma code, with some changes to support
      32-bit systems, including HIGHMEM.  dma functions on 32-bit are now
      invoked via accessor functions which call the correct op for a device based
      on archdata dma_ops.  If there is no archdata dma_ops, this defaults
      to dma_direct_ops.
      
      In addition, the dma_map/unmap_page functions are added to dma_ops
      because we can't just fall back on map/unmap_single when HIGHMEM is
      enabled. In the case of dma_direct_*, we stop using map/unmap_single
      and just use the page version - this saves a lot of ugly
      ifdeffing.  We leave map/unmap_single in the dma_ops definition,
      though, because they are needed by the iommu code, which does not
      implement map/unmap_page.  Ideally, going forward, we will completely
      eliminate map/unmap_single and just have map/unmap_page, if it's
      workable for 64-bit.
      Signed-off-by: NBecky Bruce <becky.bruce@freescale.com>
      Signed-off-by: NKumar Gala <galak@kernel.crashing.org>
      4fc665b8
  18. 04 8月, 2008 1 次提交
  19. 27 7月, 2008 1 次提交
    • F
      dma-mapping: add the device argument to dma_mapping_error() · 8d8bb39b
      FUJITA Tomonori 提交于
      Add per-device dma_mapping_ops support for CONFIG_X86_64 as POWER
      architecture does:
      
      This enables us to cleanly fix the Calgary IOMMU issue that some devices
      are not behind the IOMMU (http://lkml.org/lkml/2008/5/8/423).
      
      I think that per-device dma_mapping_ops support would be also helpful for
      KVM people to support PCI passthrough but Andi thinks that this makes it
      difficult to support the PCI passthrough (see the above thread).  So I
      CC'ed this to KVM camp.  Comments are appreciated.
      
      A pointer to dma_mapping_ops to struct dev_archdata is added.  If the
      pointer is non NULL, DMA operations in asm/dma-mapping.h use it.  If it's
      NULL, the system-wide dma_ops pointer is used as before.
      
      If it's useful for KVM people, I plan to implement a mechanism to register
      a hook called when a new pci (or dma capable) device is created (it works
      with hot plugging).  It enables IOMMUs to set up an appropriate
      dma_mapping_ops per device.
      
      The major obstacle is that dma_mapping_error doesn't take a pointer to the
      device unlike other DMA operations.  So x86 can't have dma_mapping_ops per
      device.  Note all the POWER IOMMUs use the same dma_mapping_error function
      so this is not a problem for POWER but x86 IOMMUs use different
      dma_mapping_error functions.
      
      The first patch adds the device argument to dma_mapping_error.  The patch
      is trivial but large since it touches lots of drivers and dma-mapping.h in
      all the architecture.
      
      This patch:
      
      dma_mapping_error() doesn't take a pointer to the device unlike other DMA
      operations.  So we can't have dma_mapping_ops per device.
      
      Note that POWER already has dma_mapping_ops per device but all the POWER
      IOMMUs use the same dma_mapping_error function.  x86 IOMMUs use device
      argument.
      
      [akpm@linux-foundation.org: fix sge]
      [akpm@linux-foundation.org: fix svc_rdma]
      [akpm@linux-foundation.org: build fix]
      [akpm@linux-foundation.org: fix bnx2x]
      [akpm@linux-foundation.org: fix s2io]
      [akpm@linux-foundation.org: fix pasemi_mac]
      [akpm@linux-foundation.org: fix sdhci]
      [akpm@linux-foundation.org: build fix]
      [akpm@linux-foundation.org: fix sparc]
      [akpm@linux-foundation.org: fix ibmvscsi]
      Signed-off-by: NFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
      Cc: Muli Ben-Yehuda <muli@il.ibm.com>
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Avi Kivity <avi@qumranet.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      8d8bb39b
  20. 09 7月, 2008 2 次提交
  21. 31 1月, 2008 1 次提交
  22. 25 1月, 2008 1 次提交
  23. 20 12月, 2007 1 次提交
    • M
      [POWERPC] Implement pci_set_dma_mask() in terms of the dma_ops · 84631f37
      Michael Ellerman 提交于
      PowerPC currently doesn't implement pci_set_dma_mask(), which means drivers
      calling it will get the generic version in drivers/pci/pci.c.
      
      The powerpc dma mapping ops include a dma_set_mask() hook, which luckily is
      not implemented by anyone - so there is no bug in the fact that the hook
      is currently never called.
      
      However in future we'll add implementation(s) of dma_set_mask(), and so we
      need pci_set_dma_mask() to call the hook.
      
      To save adding a hook to the dma mapping ops, pci-set_consistent_dma_mask()
      simply calls the dma_set_mask() hook and then copies the new mask into
      dev.coherenet_dma_mask.
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      84631f37
  24. 23 10月, 2007 1 次提交
    • O
      powerpc: Fix fallout from sg_page() changes · 5edadbd0
      Olof Johansson 提交于
      Fix fallout from 18dabf47:
      
      In file included from include/linux/dma-mapping.h:52,
                       from drivers/base/dma-mapping.c:10:
      include/asm/dma-mapping.h: In function 'dma_map_sg':
      include/asm/dma-mapping.h:288: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:288: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:288: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:289: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:290: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h: In function 'dma_sync_sg_for_cpu':
      include/asm/dma-mapping.h:331: error: 'struct scatterlist' has no member named 'page'
      
      drivers/scsi/ps3rom.c: In function 'fetch_to_dev_buffer':
      drivers/scsi/ps3rom.c:150: error: 'struct scatterlist' has no member named 'page'
      Signed-off-by: NOlof Johansson <olof@lixom.net>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      5edadbd0
  25. 17 10月, 2007 1 次提交
  26. 16 10月, 2007 2 次提交
  27. 17 8月, 2007 1 次提交
  28. 10 8月, 2007 1 次提交
  29. 12 7月, 2007 1 次提交
  30. 31 1月, 2007 1 次提交
  31. 08 12月, 2006 1 次提交