[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/7] xen/arm: SMMU: Introduce a helper to add DT device to SMMU
In current code, we only have the iommu_add_device to add PCI device to IOMMU. But for ARM SMMU, we don't have a separate helper to add platform device with device tree to SMMU. This work was included in the iommu_assign_dt_device. But sometimes, we just want to add device to SMMU to do some preparation for further use. In this case, we can't call iommu_assign_dt_device. In previous patch, we have implement the add_device callback for SMMU, so we can separate this work from assign_device now. Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx> --- xen/drivers/passthrough/device_tree.c | 20 ++++++++++++++++++++ xen/include/xen/iommu.h | 1 + 2 files changed, 21 insertions(+) diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c index 99ed49e..a8f403a 100644 --- a/xen/drivers/passthrough/device_tree.c +++ b/xen/drivers/passthrough/device_tree.c @@ -24,6 +24,26 @@ static spinlock_t dtdevs_lock = SPIN_LOCK_UNLOCKED; +int iommu_add_dt_device(struct domain *d, struct dt_device_node *dev) +{ + int rc; + + struct domain_iommu *hd = dom_iommu(d); + + if ( !iommu_enabled || !hd->platform_ops || + !hd->platform_ops->add_device ) + return 0; + + spin_lock(&dtdevs_lock); + + /* The devfn field doesn't matter to DT device. */ + rc = hd->platform_ops->add_device(0, dt_to_dev(dev)); + + spin_unlock(&dtdevs_lock); + + return rc; +} + int iommu_assign_dt_device(struct domain *d, struct dt_device_node *dev) { int rc = -EBUSY; diff --git a/xen/include/xen/iommu.h b/xen/include/xen/iommu.h index 5803e3f..ec03faa 100644 --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -132,6 +132,7 @@ void iommu_read_msi_from_ire(struct msi_desc *msi_desc, struct msi_msg *msg); #ifdef CONFIG_HAS_DEVICE_TREE #include <xen/device_tree.h> +int iommu_add_dt_device(struct domain *d, struct dt_device_node *dev); int iommu_assign_dt_device(struct domain *d, struct dt_device_node *dev); int iommu_deassign_dt_device(struct domain *d, struct dt_device_node *dev); int iommu_dt_domain_init(struct domain *d); -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |