ARM: 9417/1: dma-mapping: Pass device to arm_iommu_create_mapping()
All users of ARM IOMMU mappings create them for a particular device, so change the interface to accept the device rather than forcing a vague indirection through a bus type. This prepares for making a similar change to iommu_domain_alloc() itself. Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Vasant Hegde <vasant.hegde@amd.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Signed-off-by: Jason Gunthorpe <jgg@ziepe.ca> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
f7f8b433ac
commit
9e8354b399
@ -24,7 +24,7 @@ struct dma_iommu_mapping {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct dma_iommu_mapping *
|
struct dma_iommu_mapping *
|
||||||
arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size);
|
arm_iommu_create_mapping(struct device *dev, dma_addr_t base, u64 size);
|
||||||
|
|
||||||
void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
|
void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
|
||||||
|
|
||||||
|
@ -1532,7 +1532,7 @@ static const struct dma_map_ops iommu_ops = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* arm_iommu_create_mapping
|
* arm_iommu_create_mapping
|
||||||
* @bus: pointer to the bus holding the client device (for IOMMU calls)
|
* @dev: pointer to the client device (for IOMMU calls)
|
||||||
* @base: start address of the valid IO address space
|
* @base: start address of the valid IO address space
|
||||||
* @size: maximum size of the valid IO address space
|
* @size: maximum size of the valid IO address space
|
||||||
*
|
*
|
||||||
@ -1544,7 +1544,7 @@ static const struct dma_map_ops iommu_ops = {
|
|||||||
* arm_iommu_attach_device function.
|
* arm_iommu_attach_device function.
|
||||||
*/
|
*/
|
||||||
struct dma_iommu_mapping *
|
struct dma_iommu_mapping *
|
||||||
arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size)
|
arm_iommu_create_mapping(struct device *dev, dma_addr_t base, u64 size)
|
||||||
{
|
{
|
||||||
unsigned int bits = size >> PAGE_SHIFT;
|
unsigned int bits = size >> PAGE_SHIFT;
|
||||||
unsigned int bitmap_size = BITS_TO_LONGS(bits) * sizeof(long);
|
unsigned int bitmap_size = BITS_TO_LONGS(bits) * sizeof(long);
|
||||||
@ -1585,7 +1585,7 @@ arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size)
|
|||||||
|
|
||||||
spin_lock_init(&mapping->lock);
|
spin_lock_init(&mapping->lock);
|
||||||
|
|
||||||
mapping->domain = iommu_domain_alloc(bus);
|
mapping->domain = iommu_domain_alloc(dev->bus);
|
||||||
if (!mapping->domain)
|
if (!mapping->domain)
|
||||||
goto err4;
|
goto err4;
|
||||||
|
|
||||||
@ -1718,7 +1718,7 @@ static void arm_setup_iommu_dma_ops(struct device *dev)
|
|||||||
dma_base = dma_range_map_min(dev->dma_range_map);
|
dma_base = dma_range_map_min(dev->dma_range_map);
|
||||||
size = dma_range_map_max(dev->dma_range_map) - dma_base;
|
size = dma_range_map_max(dev->dma_range_map) - dma_base;
|
||||||
}
|
}
|
||||||
mapping = arm_iommu_create_mapping(dev->bus, dma_base, size);
|
mapping = arm_iommu_create_mapping(dev, dma_base, size);
|
||||||
if (IS_ERR(mapping)) {
|
if (IS_ERR(mapping)) {
|
||||||
pr_warn("Failed to create %llu-byte IOMMU mapping for device %s\n",
|
pr_warn("Failed to create %llu-byte IOMMU mapping for device %s\n",
|
||||||
size, dev_name(dev));
|
size, dev_name(dev));
|
||||||
|
@ -110,7 +110,7 @@ int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
|
|||||||
void *mapping = NULL;
|
void *mapping = NULL;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
|
if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
|
||||||
mapping = arm_iommu_create_mapping(&platform_bus_type,
|
mapping = arm_iommu_create_mapping(dev,
|
||||||
EXYNOS_DEV_ADDR_START, EXYNOS_DEV_ADDR_SIZE);
|
EXYNOS_DEV_ADDR_START, EXYNOS_DEV_ADDR_SIZE);
|
||||||
else if (IS_ENABLED(CONFIG_IOMMU_DMA))
|
else if (IS_ENABLED(CONFIG_IOMMU_DMA))
|
||||||
mapping = iommu_get_domain_for_dev(priv->dma_dev);
|
mapping = iommu_get_domain_for_dev(priv->dma_dev);
|
||||||
|
@ -804,8 +804,7 @@ static int ipmmu_init_arm_mapping(struct device *dev)
|
|||||||
if (!mmu->mapping) {
|
if (!mmu->mapping) {
|
||||||
struct dma_iommu_mapping *mapping;
|
struct dma_iommu_mapping *mapping;
|
||||||
|
|
||||||
mapping = arm_iommu_create_mapping(&platform_bus_type,
|
mapping = arm_iommu_create_mapping(dev, SZ_1G, SZ_2G);
|
||||||
SZ_1G, SZ_2G);
|
|
||||||
if (IS_ERR(mapping)) {
|
if (IS_ERR(mapping)) {
|
||||||
dev_err(mmu->dev, "failed to create ARM IOMMU mapping\n");
|
dev_err(mmu->dev, "failed to create ARM IOMMU mapping\n");
|
||||||
ret = PTR_ERR(mapping);
|
ret = PTR_ERR(mapping);
|
||||||
|
@ -433,8 +433,7 @@ static int mtk_iommu_v1_create_mapping(struct device *dev,
|
|||||||
mtk_mapping = data->mapping;
|
mtk_mapping = data->mapping;
|
||||||
if (!mtk_mapping) {
|
if (!mtk_mapping) {
|
||||||
/* MTK iommu support 4GB iova address space. */
|
/* MTK iommu support 4GB iova address space. */
|
||||||
mtk_mapping = arm_iommu_create_mapping(&platform_bus_type,
|
mtk_mapping = arm_iommu_create_mapping(dev, 0, 1ULL << 32);
|
||||||
0, 1ULL << 32);
|
|
||||||
if (IS_ERR(mtk_mapping))
|
if (IS_ERR(mtk_mapping))
|
||||||
return PTR_ERR(mtk_mapping);
|
return PTR_ERR(mtk_mapping);
|
||||||
|
|
||||||
|
@ -1965,7 +1965,7 @@ static int isp_attach_iommu(struct isp_device *isp)
|
|||||||
* Create the ARM mapping, used by the ARM DMA mapping core to allocate
|
* Create the ARM mapping, used by the ARM DMA mapping core to allocate
|
||||||
* VAs. This will allocate a corresponding IOMMU domain.
|
* VAs. This will allocate a corresponding IOMMU domain.
|
||||||
*/
|
*/
|
||||||
mapping = arm_iommu_create_mapping(&platform_bus_type, SZ_1G, SZ_2G);
|
mapping = arm_iommu_create_mapping(isp->dev, SZ_1G, SZ_2G);
|
||||||
if (IS_ERR(mapping)) {
|
if (IS_ERR(mapping)) {
|
||||||
dev_err(isp->dev, "failed to create ARM IOMMU mapping\n");
|
dev_err(isp->dev, "failed to create ARM IOMMU mapping\n");
|
||||||
return PTR_ERR(mapping);
|
return PTR_ERR(mapping);
|
||||||
|
Loading…
Reference in New Issue
Block a user