Thread (23 messages) 23 messages, 5 authors, 2015-11-25

[PATCH v5 5/6] iommu/mediatek: Add mt8173 IOMMU driver

From: joro@8bytes.org (Joerg Roedel)
Date: 2015-10-14 12:53:14
Also in: linux-devicetree, linux-iommu, linux-mediatek, lkml

On Fri, Oct 09, 2015 at 10:23:07AM +0800, Yong Wu wrote:
+	/*
+	 * There is a domain for each a iommu device in normal case.
+	 * But MTK only has one iommu domain called the m4u domain which all
+	 * the multimedia HW share. Here we reserve one as the m4u domain and
+	 * free the others.
+	 *
+	 * And the attach_device that from __iommu_setup_dma_ops
+	 * will be called earlier than probe.
+	 */
Okay, with this being the case, you need to put all devices behind one
IOMMU into the same iommu-group, because the IOMMU can't really isolate
the devices from each other.
+static int mtk_iommu_add_device(struct device *dev)
+{
+	struct iommu_group *group;
+	struct mtk_iommu_client_priv *priv;
+	struct mtk_iommu_domain *m4udom;
+	struct iommu_domain *domain;
+	int ret;
+
+	if (!dev->archdata.iommu) /* Not a iommu client device */
+		return -ENODEV;
+
+	group = iommu_group_get(dev);
+	if (!group) {
+		group = iommu_group_alloc();
+		if (IS_ERR(group)) {
+			dev_err(dev, "Failed to allocate IOMMU group\n");
+			return PTR_ERR(group);
+		}
+	}
+
+	ret = iommu_group_add_device(group, dev);
+	if (ret) {
+		dev_err(dev, "Failed to add IOMMU group\n");
+		goto err_group_put;
+	}
+
+	domain = iommu_get_domain_for_dev(dev);
+	if (!domain) {
+		/*
+		 * Get the m4u iommu domain from the m4u device.
+		 * Attach all the client devices into the m4u domain.
+		 */
+		priv = dev->archdata.iommu;
+		m4udom = dev_get_drvdata(priv->m4udev);
+		ret = iommu_attach_group(&m4udom->domain, group);
+		if (ret)
+			dev_err(dev, "Failed to attach IOMMU group\n");
+	}
+
+err_group_put:
+	iommu_group_put(group);
+	return ret;
+}
Here it looks like you are allocating one group for each device. As I
said, all devices need to be in one group.



	Joerg
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help