dma-mapping: introduce DMA range map, supplanting dma_pfn_offset
authorJim Quinlan <james.quinlan@broadcom.com>
Thu, 17 Sep 2020 16:43:40 +0000 (18:43 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 17 Sep 2020 16:43:56 +0000 (18:43 +0200)
commite0d072782c734d27f5af062c62266f2598f68542
treef259e9eaab55ae8ffedaea07a19e8f147dcceb9a
parent6eb0233ec2d0df288fe8515d5b0b2b15562e05bb
dma-mapping: introduce DMA range map, supplanting dma_pfn_offset

The new field 'dma_range_map' in struct device is used to facilitate the
use of single or multiple offsets between mapping regions of cpu addrs and
dma addrs.  It subsumes the role of "dev->dma_pfn_offset" which was only
capable of holding a single uniform offset and had no region bounds
checking.

The function of_dma_get_range() has been modified so that it takes a single
argument -- the device node -- and returns a map, NULL, or an error code.
The map is an array that holds the information regarding the DMA regions.
Each range entry contains the address offset, the cpu_start address, the
dma_start address, and the size of the region.

of_dma_configure() is the typical manner to set range offsets but there are
a number of ad hoc assignments to "dev->dma_pfn_offset" in the kernel
driver code.  These cases now invoke the function
dma_direct_set_offset(dev, cpu_addr, dma_addr, size).

Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com>
[hch: various interface cleanups]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Tested-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Tested-by: Nathan Chancellor <natechancellor@gmail.com>
22 files changed:
arch/arm/include/asm/dma-direct.h
arch/arm/mach-keystone/keystone.c
arch/arm/mach-omap1/include/mach/memory.h
arch/sh/drivers/pci/pcie-sh7786.c
arch/x86/pci/sta2x11-fixup.c
drivers/acpi/arm64/iort.c
drivers/base/core.c
drivers/gpu/drm/sun4i/sun4i_backend.c
drivers/iommu/io-pgtable-arm.c
drivers/media/platform/sunxi/sun4i-csi/sun4i_csi.c
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
drivers/of/address.c
drivers/of/device.c
drivers/of/of_private.h
drivers/of/unittest.c
drivers/remoteproc/remoteproc_core.c
drivers/staging/media/sunxi/cedrus/cedrus_hw.c
include/linux/device.h
include/linux/dma-direct.h
include/linux/dma-mapping.h
kernel/dma/coherent.c
kernel/dma/direct.c