All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yong Wu <yong.wu@mediatek.com>
To: Joerg Roedel <joro@8bytes.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Rob Herring <robh+dt@kernel.org>, Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>
Cc: Krzysztof Kozlowski <krzk@kernel.org>,
	Evan Green <evgreen@chromium.org>, Tomasz Figa <tfiga@google.com>,
	<linux-mediatek@lists.infradead.org>,
	<srv_heupstream@mediatek.com>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<iommu@lists.linux-foundation.org>, <yong.wu@mediatek.com>,
	<youlin.pei@mediatek.com>,
	Nicolas Boichat <drinkcat@chromium.org>, <anan.sun@mediatek.com>,
	<chao.hao@mediatek.com>, Greg Kroah-Hartman <gregkh@google.com>,
	<kernel-team@android.com>
Subject: [PATCH v4 13/24] iommu/mediatek: Add device link for smi-common and m4u
Date: Wed, 11 Nov 2020 20:38:27 +0800	[thread overview]
Message-ID: <20201111123838.15682-14-yong.wu@mediatek.com> (raw)
In-Reply-To: <20201111123838.15682-1-yong.wu@mediatek.com>

In the lastest SoC, M4U has its special power domain. thus, If the engine
begin to work, it should help enable the power for M4U firstly.
Currently if the engine work, it always enable the power/clocks for
smi-larbs/smi-common. This patch adds device_link for smi-common and M4U.
then, if smi-common power is enabled, the M4U power also is powered on
automatically.

Normally M4U connect with several smi-larbs and their smi-common always
are the same, In this patch it get smi-common dev from the first smi-larb
device(i==0), then add the device_link only while m4u has power-domain.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 36 +++++++++++++++++++++++++++++++++---
 drivers/iommu/mtk_iommu.h |  1 +
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index cfdf5ce696fd..4ce7e0883e4d 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -20,6 +20,7 @@
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -705,7 +706,7 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		return larb_nr;
 
 	for (i = 0; i < larb_nr; i++) {
-		struct device_node *larbnode;
+		struct device_node *larbnode, *smicomm_node;
 		struct platform_device *plarbdev;
 		u32 id;
 
@@ -731,6 +732,26 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 
 		component_match_add_release(dev, &match, release_of,
 					    compare_of, larbnode);
+		if (!i) {
+			smicomm_node = of_parse_phandle(larbnode, "mediatek,smi", 0);
+			if (!smicomm_node)
+				return -EINVAL;
+
+			plarbdev = of_find_device_by_node(smicomm_node);
+			of_node_put(smicomm_node);
+			data->smicomm_dev = &plarbdev->dev;
+		}
+	}
+
+	if (dev->pm_domain) {
+		struct device_link *link;
+
+		link = device_link_add(data->smicomm_dev, dev,
+				       DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME);
+		if (!link) {
+			dev_err(dev, "Unable link %s.\n", dev_name(data->smicomm_dev));
+			return -EINVAL;
+		}
 	}
 
 	platform_set_drvdata(pdev, data);
@@ -738,14 +759,14 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 	ret = iommu_device_sysfs_add(&data->iommu, dev, NULL,
 				     "mtk-iommu.%pa", &ioaddr);
 	if (ret)
-		return ret;
+		goto out_link_remove;
 
 	iommu_device_set_ops(&data->iommu, &mtk_iommu_ops);
 	iommu_device_set_fwnode(&data->iommu, &pdev->dev.of_node->fwnode);
 
 	ret = iommu_device_register(&data->iommu);
 	if (ret)
-		return ret;
+		goto out_sysfs_remove;
 
 	spin_lock_init(&data->tlb_lock);
 	list_add_tail(&data->list, &m4ulist);
@@ -754,6 +775,13 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, &mtk_iommu_ops);
 
 	return component_master_add_with_match(dev, &mtk_iommu_com_ops, match);
+
+out_sysfs_remove:
+	iommu_device_sysfs_remove(&data->iommu);
+out_link_remove:
+	if (dev->pm_domain)
+		device_link_remove(data->smicomm_dev, dev);
+	return ret;
 }
 
 static int mtk_iommu_remove(struct platform_device *pdev)
@@ -767,6 +795,8 @@ static int mtk_iommu_remove(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, NULL);
 
 	clk_disable_unprepare(data->bclk);
+	if (pdev->dev.pm_domain)
+		device_link_remove(data->smicomm_dev, &pdev->dev);
 	devm_free_irq(&pdev->dev, data->irq, data);
 	component_master_del(&pdev->dev, &mtk_iommu_com_ops);
 	return 0;
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index d0c93652bdbe..5e03a029c4dc 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -68,6 +68,7 @@ struct mtk_iommu_data {
 
 	struct iommu_device		iommu;
 	const struct mtk_iommu_plat_data *plat_data;
+	struct device			*smicomm_dev;
 
 	struct dma_iommu_mapping	*mapping; /* For mtk_iommu_v1.c */
 
-- 
2.18.0


WARNING: multiple messages have this Message-ID (diff)
From: Yong Wu <yong.wu@mediatek.com>
To: Joerg Roedel <joro@8bytes.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	 Rob Herring <robh+dt@kernel.org>, Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>
Cc: youlin.pei@mediatek.com, devicetree@vger.kernel.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	srv_heupstream@mediatek.com, chao.hao@mediatek.com,
	kernel-team@android.com, linux-kernel@vger.kernel.org,
	Evan Green <evgreen@chromium.org>, Tomasz Figa <tfiga@google.com>,
	iommu@lists.linux-foundation.org,
	linux-mediatek@lists.infradead.org,
	Krzysztof Kozlowski <krzk@kernel.org>,
	anan.sun@mediatek.com, Greg Kroah-Hartman <gregkh@google.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 13/24] iommu/mediatek: Add device link for smi-common and m4u
Date: Wed, 11 Nov 2020 20:38:27 +0800	[thread overview]
Message-ID: <20201111123838.15682-14-yong.wu@mediatek.com> (raw)
In-Reply-To: <20201111123838.15682-1-yong.wu@mediatek.com>

In the lastest SoC, M4U has its special power domain. thus, If the engine
begin to work, it should help enable the power for M4U firstly.
Currently if the engine work, it always enable the power/clocks for
smi-larbs/smi-common. This patch adds device_link for smi-common and M4U.
then, if smi-common power is enabled, the M4U power also is powered on
automatically.

Normally M4U connect with several smi-larbs and their smi-common always
are the same, In this patch it get smi-common dev from the first smi-larb
device(i==0), then add the device_link only while m4u has power-domain.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 36 +++++++++++++++++++++++++++++++++---
 drivers/iommu/mtk_iommu.h |  1 +
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index cfdf5ce696fd..4ce7e0883e4d 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -20,6 +20,7 @@
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -705,7 +706,7 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		return larb_nr;
 
 	for (i = 0; i < larb_nr; i++) {
-		struct device_node *larbnode;
+		struct device_node *larbnode, *smicomm_node;
 		struct platform_device *plarbdev;
 		u32 id;
 
@@ -731,6 +732,26 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 
 		component_match_add_release(dev, &match, release_of,
 					    compare_of, larbnode);
+		if (!i) {
+			smicomm_node = of_parse_phandle(larbnode, "mediatek,smi", 0);
+			if (!smicomm_node)
+				return -EINVAL;
+
+			plarbdev = of_find_device_by_node(smicomm_node);
+			of_node_put(smicomm_node);
+			data->smicomm_dev = &plarbdev->dev;
+		}
+	}
+
+	if (dev->pm_domain) {
+		struct device_link *link;
+
+		link = device_link_add(data->smicomm_dev, dev,
+				       DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME);
+		if (!link) {
+			dev_err(dev, "Unable link %s.\n", dev_name(data->smicomm_dev));
+			return -EINVAL;
+		}
 	}
 
 	platform_set_drvdata(pdev, data);
@@ -738,14 +759,14 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 	ret = iommu_device_sysfs_add(&data->iommu, dev, NULL,
 				     "mtk-iommu.%pa", &ioaddr);
 	if (ret)
-		return ret;
+		goto out_link_remove;
 
 	iommu_device_set_ops(&data->iommu, &mtk_iommu_ops);
 	iommu_device_set_fwnode(&data->iommu, &pdev->dev.of_node->fwnode);
 
 	ret = iommu_device_register(&data->iommu);
 	if (ret)
-		return ret;
+		goto out_sysfs_remove;
 
 	spin_lock_init(&data->tlb_lock);
 	list_add_tail(&data->list, &m4ulist);
@@ -754,6 +775,13 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, &mtk_iommu_ops);
 
 	return component_master_add_with_match(dev, &mtk_iommu_com_ops, match);
+
+out_sysfs_remove:
+	iommu_device_sysfs_remove(&data->iommu);
+out_link_remove:
+	if (dev->pm_domain)
+		device_link_remove(data->smicomm_dev, dev);
+	return ret;
 }
 
 static int mtk_iommu_remove(struct platform_device *pdev)
@@ -767,6 +795,8 @@ static int mtk_iommu_remove(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, NULL);
 
 	clk_disable_unprepare(data->bclk);
+	if (pdev->dev.pm_domain)
+		device_link_remove(data->smicomm_dev, &pdev->dev);
 	devm_free_irq(&pdev->dev, data->irq, data);
 	component_master_del(&pdev->dev, &mtk_iommu_com_ops);
 	return 0;
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index d0c93652bdbe..5e03a029c4dc 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -68,6 +68,7 @@ struct mtk_iommu_data {
 
 	struct iommu_device		iommu;
 	const struct mtk_iommu_plat_data *plat_data;
+	struct device			*smicomm_dev;
 
 	struct dma_iommu_mapping	*mapping; /* For mtk_iommu_v1.c */
 
-- 
2.18.0

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

WARNING: multiple messages have this Message-ID (diff)
From: Yong Wu <yong.wu@mediatek.com>
To: Joerg Roedel <joro@8bytes.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	 Rob Herring <robh+dt@kernel.org>, Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>
Cc: youlin.pei@mediatek.com, devicetree@vger.kernel.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	srv_heupstream@mediatek.com, chao.hao@mediatek.com,
	kernel-team@android.com, linux-kernel@vger.kernel.org,
	Evan Green <evgreen@chromium.org>,
	yong.wu@mediatek.com, Tomasz Figa <tfiga@google.com>,
	iommu@lists.linux-foundation.org,
	linux-mediatek@lists.infradead.org,
	Krzysztof Kozlowski <krzk@kernel.org>,
	anan.sun@mediatek.com, Greg Kroah-Hartman <gregkh@google.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 13/24] iommu/mediatek: Add device link for smi-common and m4u
Date: Wed, 11 Nov 2020 20:38:27 +0800	[thread overview]
Message-ID: <20201111123838.15682-14-yong.wu@mediatek.com> (raw)
In-Reply-To: <20201111123838.15682-1-yong.wu@mediatek.com>

In the lastest SoC, M4U has its special power domain. thus, If the engine
begin to work, it should help enable the power for M4U firstly.
Currently if the engine work, it always enable the power/clocks for
smi-larbs/smi-common. This patch adds device_link for smi-common and M4U.
then, if smi-common power is enabled, the M4U power also is powered on
automatically.

Normally M4U connect with several smi-larbs and their smi-common always
are the same, In this patch it get smi-common dev from the first smi-larb
device(i==0), then add the device_link only while m4u has power-domain.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 36 +++++++++++++++++++++++++++++++++---
 drivers/iommu/mtk_iommu.h |  1 +
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index cfdf5ce696fd..4ce7e0883e4d 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -20,6 +20,7 @@
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -705,7 +706,7 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		return larb_nr;
 
 	for (i = 0; i < larb_nr; i++) {
-		struct device_node *larbnode;
+		struct device_node *larbnode, *smicomm_node;
 		struct platform_device *plarbdev;
 		u32 id;
 
@@ -731,6 +732,26 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 
 		component_match_add_release(dev, &match, release_of,
 					    compare_of, larbnode);
+		if (!i) {
+			smicomm_node = of_parse_phandle(larbnode, "mediatek,smi", 0);
+			if (!smicomm_node)
+				return -EINVAL;
+
+			plarbdev = of_find_device_by_node(smicomm_node);
+			of_node_put(smicomm_node);
+			data->smicomm_dev = &plarbdev->dev;
+		}
+	}
+
+	if (dev->pm_domain) {
+		struct device_link *link;
+
+		link = device_link_add(data->smicomm_dev, dev,
+				       DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME);
+		if (!link) {
+			dev_err(dev, "Unable link %s.\n", dev_name(data->smicomm_dev));
+			return -EINVAL;
+		}
 	}
 
 	platform_set_drvdata(pdev, data);
@@ -738,14 +759,14 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 	ret = iommu_device_sysfs_add(&data->iommu, dev, NULL,
 				     "mtk-iommu.%pa", &ioaddr);
 	if (ret)
-		return ret;
+		goto out_link_remove;
 
 	iommu_device_set_ops(&data->iommu, &mtk_iommu_ops);
 	iommu_device_set_fwnode(&data->iommu, &pdev->dev.of_node->fwnode);
 
 	ret = iommu_device_register(&data->iommu);
 	if (ret)
-		return ret;
+		goto out_sysfs_remove;
 
 	spin_lock_init(&data->tlb_lock);
 	list_add_tail(&data->list, &m4ulist);
@@ -754,6 +775,13 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, &mtk_iommu_ops);
 
 	return component_master_add_with_match(dev, &mtk_iommu_com_ops, match);
+
+out_sysfs_remove:
+	iommu_device_sysfs_remove(&data->iommu);
+out_link_remove:
+	if (dev->pm_domain)
+		device_link_remove(data->smicomm_dev, dev);
+	return ret;
 }
 
 static int mtk_iommu_remove(struct platform_device *pdev)
@@ -767,6 +795,8 @@ static int mtk_iommu_remove(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, NULL);
 
 	clk_disable_unprepare(data->bclk);
+	if (pdev->dev.pm_domain)
+		device_link_remove(data->smicomm_dev, &pdev->dev);
 	devm_free_irq(&pdev->dev, data->irq, data);
 	component_master_del(&pdev->dev, &mtk_iommu_com_ops);
 	return 0;
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index d0c93652bdbe..5e03a029c4dc 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -68,6 +68,7 @@ struct mtk_iommu_data {
 
 	struct iommu_device		iommu;
 	const struct mtk_iommu_plat_data *plat_data;
+	struct device			*smicomm_dev;
 
 	struct dma_iommu_mapping	*mapping; /* For mtk_iommu_v1.c */
 
-- 
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Yong Wu <yong.wu@mediatek.com>
To: Joerg Roedel <joro@8bytes.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	 Rob Herring <robh+dt@kernel.org>, Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>
Cc: youlin.pei@mediatek.com, devicetree@vger.kernel.org,
	Nicolas Boichat <drinkcat@chromium.org>,
	srv_heupstream@mediatek.com, chao.hao@mediatek.com,
	kernel-team@android.com, linux-kernel@vger.kernel.org,
	Evan Green <evgreen@chromium.org>,
	yong.wu@mediatek.com, Tomasz Figa <tfiga@google.com>,
	iommu@lists.linux-foundation.org,
	linux-mediatek@lists.infradead.org,
	Krzysztof Kozlowski <krzk@kernel.org>,
	anan.sun@mediatek.com, Greg Kroah-Hartman <gregkh@google.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 13/24] iommu/mediatek: Add device link for smi-common and m4u
Date: Wed, 11 Nov 2020 20:38:27 +0800	[thread overview]
Message-ID: <20201111123838.15682-14-yong.wu@mediatek.com> (raw)
In-Reply-To: <20201111123838.15682-1-yong.wu@mediatek.com>

In the lastest SoC, M4U has its special power domain. thus, If the engine
begin to work, it should help enable the power for M4U firstly.
Currently if the engine work, it always enable the power/clocks for
smi-larbs/smi-common. This patch adds device_link for smi-common and M4U.
then, if smi-common power is enabled, the M4U power also is powered on
automatically.

Normally M4U connect with several smi-larbs and their smi-common always
are the same, In this patch it get smi-common dev from the first smi-larb
device(i==0), then add the device_link only while m4u has power-domain.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
---
 drivers/iommu/mtk_iommu.c | 36 +++++++++++++++++++++++++++++++++---
 drivers/iommu/mtk_iommu.h |  1 +
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index cfdf5ce696fd..4ce7e0883e4d 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -20,6 +20,7 @@
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
@@ -705,7 +706,7 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		return larb_nr;
 
 	for (i = 0; i < larb_nr; i++) {
-		struct device_node *larbnode;
+		struct device_node *larbnode, *smicomm_node;
 		struct platform_device *plarbdev;
 		u32 id;
 
@@ -731,6 +732,26 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 
 		component_match_add_release(dev, &match, release_of,
 					    compare_of, larbnode);
+		if (!i) {
+			smicomm_node = of_parse_phandle(larbnode, "mediatek,smi", 0);
+			if (!smicomm_node)
+				return -EINVAL;
+
+			plarbdev = of_find_device_by_node(smicomm_node);
+			of_node_put(smicomm_node);
+			data->smicomm_dev = &plarbdev->dev;
+		}
+	}
+
+	if (dev->pm_domain) {
+		struct device_link *link;
+
+		link = device_link_add(data->smicomm_dev, dev,
+				       DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME);
+		if (!link) {
+			dev_err(dev, "Unable link %s.\n", dev_name(data->smicomm_dev));
+			return -EINVAL;
+		}
 	}
 
 	platform_set_drvdata(pdev, data);
@@ -738,14 +759,14 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 	ret = iommu_device_sysfs_add(&data->iommu, dev, NULL,
 				     "mtk-iommu.%pa", &ioaddr);
 	if (ret)
-		return ret;
+		goto out_link_remove;
 
 	iommu_device_set_ops(&data->iommu, &mtk_iommu_ops);
 	iommu_device_set_fwnode(&data->iommu, &pdev->dev.of_node->fwnode);
 
 	ret = iommu_device_register(&data->iommu);
 	if (ret)
-		return ret;
+		goto out_sysfs_remove;
 
 	spin_lock_init(&data->tlb_lock);
 	list_add_tail(&data->list, &m4ulist);
@@ -754,6 +775,13 @@ static int mtk_iommu_probe(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, &mtk_iommu_ops);
 
 	return component_master_add_with_match(dev, &mtk_iommu_com_ops, match);
+
+out_sysfs_remove:
+	iommu_device_sysfs_remove(&data->iommu);
+out_link_remove:
+	if (dev->pm_domain)
+		device_link_remove(data->smicomm_dev, dev);
+	return ret;
 }
 
 static int mtk_iommu_remove(struct platform_device *pdev)
@@ -767,6 +795,8 @@ static int mtk_iommu_remove(struct platform_device *pdev)
 		bus_set_iommu(&platform_bus_type, NULL);
 
 	clk_disable_unprepare(data->bclk);
+	if (pdev->dev.pm_domain)
+		device_link_remove(data->smicomm_dev, &pdev->dev);
 	devm_free_irq(&pdev->dev, data->irq, data);
 	component_master_del(&pdev->dev, &mtk_iommu_com_ops);
 	return 0;
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index d0c93652bdbe..5e03a029c4dc 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -68,6 +68,7 @@ struct mtk_iommu_data {
 
 	struct iommu_device		iommu;
 	const struct mtk_iommu_plat_data *plat_data;
+	struct device			*smicomm_dev;
 
 	struct dma_iommu_mapping	*mapping; /* For mtk_iommu_v1.c */
 
-- 
2.18.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2020-11-11 12:41 UTC|newest]

Thread overview: 196+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-11 12:38 [PATCH v4 00/24] MT8192 IOMMU support Yong Wu
2020-11-11 12:38 ` Yong Wu
2020-11-11 12:38 ` Yong Wu
2020-11-11 12:38 ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 01/24] dt-bindings: iommu: mediatek: Convert IOMMU to DT schema Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-16 17:43   ` Rob Herring
2020-11-16 17:43     ` Rob Herring
2020-11-16 17:43     ` Rob Herring
2020-11-16 17:43     ` Rob Herring
2020-11-11 12:38 ` [PATCH v4 02/24] dt-bindings: memory: mediatek: Add a common larb-port header file Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 21:30   ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 12:38 ` [PATCH v4 03/24] dt-bindings: memory: mediatek: Extend LARB_NR_MAX to 32 Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 21:30   ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 12:38 ` [PATCH v4 04/24] dt-bindings: memory: mediatek: Add domain definition Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 21:30   ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-11 21:30     ` Krzysztof Kozlowski
2020-11-16 17:44   ` Rob Herring
2020-11-16 17:44     ` Rob Herring
2020-11-16 17:44     ` Rob Herring
2020-11-16 17:44     ` Rob Herring
2020-11-11 12:38 ` [PATCH v4 05/24] dt-bindings: mediatek: Add binding for mt8192 IOMMU Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 21:33   ` Krzysztof Kozlowski
2020-11-11 21:33     ` Krzysztof Kozlowski
2020-11-11 21:33     ` Krzysztof Kozlowski
2020-11-11 21:33     ` Krzysztof Kozlowski
2020-11-12  2:41     ` Yong Wu
2020-11-12  2:41       ` Yong Wu
2020-11-12  2:41       ` Yong Wu
2020-11-12  2:41       ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 06/24] iommu/mediatek: Use the common mtk-smi-larb-port.h Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 21:33   ` Krzysztof Kozlowski
2020-11-11 21:33     ` Krzysztof Kozlowski
2020-11-11 21:33     ` Krzysztof Kozlowski
2020-11-11 21:33     ` Krzysztof Kozlowski
2020-11-11 12:38 ` [PATCH v4 07/24] iommu/io-pgtable-arm-v7s: Use ias to check the valid iova in unmap Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 15:41   ` Robin Murphy
2020-11-26 15:41     ` Robin Murphy
2020-11-26 15:41     ` Robin Murphy
2020-11-26 15:41     ` Robin Murphy
2020-11-11 12:38 ` [PATCH v4 08/24] iommu/io-pgtable-arm-v7s: Extend PA34 for MediaTek Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 15:49   ` Robin Murphy
2020-11-26 15:49     ` Robin Murphy
2020-11-26 15:49     ` Robin Murphy
2020-11-26 15:49     ` Robin Murphy
2020-11-11 12:38 ` [PATCH v4 09/24] iommu/io-pgtable-arm-v7s: Clear LVL_SHIFT/BITS macro instead of the formula Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 16:03   ` Robin Murphy
2020-11-26 16:03     ` Robin Murphy
2020-11-26 16:03     ` Robin Murphy
2020-11-26 16:03     ` Robin Murphy
2020-11-27  6:21     ` Yong Wu
2020-11-27  6:21       ` Yong Wu
2020-11-27  6:21       ` Yong Wu
2020-11-27  6:21       ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 10/24] iommu/io-pgtable-arm-v7s: Add cfg as a param in some macros Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 16:09   ` Robin Murphy
2020-11-26 16:09     ` Robin Murphy
2020-11-26 16:09     ` Robin Murphy
2020-11-26 16:09     ` Robin Murphy
2020-11-11 12:38 ` [PATCH v4 11/24] iommu/io-pgtable-arm-v7s: Quad lvl1 pgtable for MediaTek Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 16:15   ` Robin Murphy
2020-11-26 16:15     ` Robin Murphy
2020-11-26 16:15     ` Robin Murphy
2020-11-26 16:15     ` Robin Murphy
2020-11-11 12:38 ` [PATCH v4 12/24] iommu/mediatek: Move hw_init into attach_device Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 16:43   ` Robin Murphy
2020-11-26 16:43     ` Robin Murphy
2020-11-26 16:43     ` Robin Murphy
2020-11-26 16:43     ` Robin Murphy
2020-11-27  6:23     ` Yong Wu
2020-11-27  6:23       ` Yong Wu
2020-11-27  6:23       ` Yong Wu
2020-11-27  6:23       ` Yong Wu
2020-11-11 12:38 ` Yong Wu [this message]
2020-11-11 12:38   ` [PATCH v4 13/24] iommu/mediatek: Add device link for smi-common and m4u Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-12  1:10   ` Nicolas Boichat
2020-11-12  1:10     ` Nicolas Boichat
2020-11-12  1:10     ` Nicolas Boichat
2020-11-12  1:10     ` Nicolas Boichat
2020-11-12  2:42     ` Yong Wu
2020-11-12  2:42       ` Yong Wu
2020-11-12  2:42       ` Yong Wu
2020-11-12  2:42       ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 14/24] iommu/mediatek: Add pm runtime callback Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 15/24] iommu/mediatek: Add power-domain operation Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 16/24] iommu/mediatek: Add iova reserved function Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 17/24] iommu/mediatek: Add single domain Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-26 17:11   ` Robin Murphy
2020-11-26 17:11     ` Robin Murphy
2020-11-26 17:11     ` Robin Murphy
2020-11-26 17:11     ` Robin Murphy
2020-11-27  6:21     ` Yong Wu
2020-11-27  6:21       ` Yong Wu
2020-11-27  6:21       ` Yong Wu
2020-11-27  6:21       ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 18/24] iommu/mediatek: Support master use iova over 32bit Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 21:34   ` Krzysztof Kozlowski
2020-11-11 21:34     ` Krzysztof Kozlowski
2020-11-11 21:34     ` Krzysztof Kozlowski
2020-11-11 21:34     ` Krzysztof Kozlowski
2020-11-11 12:38 ` [PATCH v4 19/24] iommu/mediatek: Support up to 34bit iova in tlb flush Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 20/24] iommu/mediatek: Support report iova 34bit translation fault in ISR Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-18  2:19   ` kernel test robot
2020-11-18  2:19     ` kernel test robot
2020-11-18  4:32   ` kernel test robot
2020-11-18  4:32     ` kernel test robot
2020-11-11 12:38 ` [PATCH v4 21/24] iommu/mediatek: Add support for multi domain Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 22/24] iommu/mediatek: Adjust the structure Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 23/24] iommu/mediatek: Add mt8192 support Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38 ` [PATCH v4 24/24] MAINTAINERS: Add entry for MediaTek IOMMU Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 12:38   ` Yong Wu
2020-11-11 16:52   ` Chun-Kuang Hu
2020-11-11 16:52     ` Chun-Kuang Hu
2020-11-11 16:52     ` Chun-Kuang Hu
2020-11-11 16:52     ` Chun-Kuang Hu
2020-11-25 12:23 ` [PATCH v4 00/24] MT8192 IOMMU support Will Deacon
2020-11-25 12:23   ` Will Deacon
2020-11-25 12:23   ` Will Deacon
2020-11-25 12:23   ` Will Deacon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201111123838.15682-14-yong.wu@mediatek.com \
    --to=yong.wu@mediatek.com \
    --cc=anan.sun@mediatek.com \
    --cc=chao.hao@mediatek.com \
    --cc=devicetree@vger.kernel.org \
    --cc=drinkcat@chromium.org \
    --cc=evgreen@chromium.org \
    --cc=gregkh@google.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.org \
    --cc=kernel-team@android.com \
    --cc=krzk@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=srv_heupstream@mediatek.com \
    --cc=tfiga@google.com \
    --cc=will@kernel.org \
    --cc=youlin.pei@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.