[PATCH 07/12] of/device: Add input id to of_dma_configure()
Rob Herring
robh+dt at kernel.org
Thu May 21 23:02:20 UTC 2020
On Thu, May 21, 2020 at 7:00 AM Lorenzo Pieralisi
<lorenzo.pieralisi at arm.com> wrote:
>
> Devices sitting on proprietary busses have a device ID space that
> is owned by the respective bus and related firmware bindings. In order
> to let the generic OF layer handle the input translations to
> an IOMMU id, for such busses the current of_dma_configure() interface
> should be extended in order to allow the bus layer to provide the
> device input id parameter - that is retrieved/assigned in bus
> specific code and firmware.
>
> Augment of_dma_configure() to add an optional input_id parameter,
> leaving current functionality unchanged.
>
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi at arm.com>
> Cc: Rob Herring <robh+dt at kernel.org>
> Cc: Robin Murphy <robin.murphy at arm.com>
> Cc: Joerg Roedel <joro at 8bytes.org>
> Cc: Laurentiu Tudor <laurentiu.tudor at nxp.com>
> ---
> drivers/bus/fsl-mc/fsl-mc-bus.c | 4 ++-
> drivers/iommu/of_iommu.c | 53 +++++++++++++++++++++------------
> drivers/of/device.c | 8 +++--
> include/linux/of_device.h | 16 ++++++++--
> include/linux/of_iommu.h | 6 ++--
> 5 files changed, 60 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/bus/fsl-mc/fsl-mc-bus.c b/drivers/bus/fsl-mc/fsl-mc-bus.c
> index 40526da5c6a6..8ead3f0238f2 100644
> --- a/drivers/bus/fsl-mc/fsl-mc-bus.c
> +++ b/drivers/bus/fsl-mc/fsl-mc-bus.c
> @@ -118,11 +118,13 @@ static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
> static int fsl_mc_dma_configure(struct device *dev)
> {
> struct device *dma_dev = dev;
> + struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
> + u32 input_id = mc_dev->icid;
>
> while (dev_is_fsl_mc(dma_dev))
> dma_dev = dma_dev->parent;
>
> - return of_dma_configure(dev, dma_dev->of_node, 0);
> + return of_dma_configure_id(dev, dma_dev->of_node, 0, &input_id);
> }
>
> static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
> diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
> index ad96b87137d6..4516d5bf6cc9 100644
> --- a/drivers/iommu/of_iommu.c
> +++ b/drivers/iommu/of_iommu.c
> @@ -139,25 +139,53 @@ static int of_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data)
> return err;
> }
>
> -static int of_fsl_mc_iommu_init(struct fsl_mc_device *mc_dev,
> - struct device_node *master_np)
> +static int of_iommu_configure_dev_id(struct device_node *master_np,
> + struct device *dev,
> + const u32 *id)
Should have read this patch before #6. I guess you could still make
of_pci_iommu_init() call
of_iommu_configure_dev_id.
Rob
More information about the iommu
mailing list