
Use the DMA API bypass mechanism for direct window mappings. This uses
common code and speed up the direct mapping case by avoiding indirect
calls just when not using dma ops at all. It also fixes a problem where
the sync_* methods were using the bypass check for DMA allocations, but
those are part of the streaming ops.
Note that this patch loses the DMA_ATTR_WEAK_ORDERING override, which
has never been well defined, as is only used by a few drivers, which
IIRC never showed up in the typical Cell blade setups that are affected
by the ordering workaround.
Fixes: efd176a04b
("powerpc/pseries/dma: Allow SWIOTLB")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
54 lines
1.0 KiB
C
54 lines
1.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Arch specific extensions to struct device
|
|
*/
|
|
#ifndef _ASM_POWERPC_DEVICE_H
|
|
#define _ASM_POWERPC_DEVICE_H
|
|
|
|
struct device_node;
|
|
#ifdef CONFIG_PPC64
|
|
struct pci_dn;
|
|
struct iommu_table;
|
|
#endif
|
|
|
|
/*
|
|
* Arch extensions to struct device.
|
|
*
|
|
* When adding fields, consider macio_add_one_device in
|
|
* drivers/macintosh/macio_asic.c
|
|
*/
|
|
struct dev_archdata {
|
|
/*
|
|
* These two used to be a union. However, with the hybrid ops we need
|
|
* both so here we store both a DMA offset for direct mappings and
|
|
* an iommu_table for remapped DMA.
|
|
*/
|
|
dma_addr_t dma_offset;
|
|
|
|
#ifdef CONFIG_PPC64
|
|
struct iommu_table *iommu_table_base;
|
|
#endif
|
|
|
|
#ifdef CONFIG_IOMMU_API
|
|
void *iommu_domain;
|
|
#endif
|
|
#ifdef CONFIG_PPC64
|
|
struct pci_dn *pci_data;
|
|
#endif
|
|
#ifdef CONFIG_EEH
|
|
struct eeh_dev *edev;
|
|
#endif
|
|
#ifdef CONFIG_FAIL_IOMMU
|
|
int fail_iommu;
|
|
#endif
|
|
#ifdef CONFIG_CXL_BASE
|
|
struct cxl_context *cxl_ctx;
|
|
#endif
|
|
};
|
|
|
|
struct pdev_archdata {
|
|
u64 dma_mask;
|
|
};
|
|
|
|
#endif /* _ASM_POWERPC_DEVICE_H */
|