diff mbox series

[v5,04/16] memory: mtk-smi: Add device-link between smi-larb and smi-common

Message ID 20210410091128.31823-5-yong.wu@mediatek.com
State Accepted
Commit 6ce2c05b21189eb17b3aa26720cc5841acf9dce8
Headers show
Series Clean up "mediatek,larb" | expand

Commit Message

Yong Wu (吴勇) April 10, 2021, 9:11 a.m. UTC
Normally, If the smi-larb HW need work, we should enable the smi-common
HW power and clock firstly.
This patch adds device-link between the smi-larb dev and the smi-common
dev. then If pm_runtime_get_sync(smi-larb-dev), the pm_runtime_get_sync
(smi-common-dev) will be called automatically.

Also, Add DL_FLAG_STATELESS to avoid the smi-common clocks be gated when
probe.

CC: Matthias Brugger <matthias.bgg@gmail.com>
Suggested-by: Tomasz Figa <tfiga@chromium.org>
Signed-off-by: Yong Wu <yong.wu@mediatek.com>
---
 drivers/memory/mtk-smi.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

Comments

Krzysztof Kozlowski April 10, 2021, 12:40 p.m. UTC | #1
On 10/04/2021 11:11, Yong Wu wrote:
> Normally, If the smi-larb HW need work, we should enable the smi-common
> HW power and clock firstly.
> This patch adds device-link between the smi-larb dev and the smi-common
> dev. then If pm_runtime_get_sync(smi-larb-dev), the pm_runtime_get_sync
> (smi-common-dev) will be called automatically.
> 
> Also, Add DL_FLAG_STATELESS to avoid the smi-common clocks be gated when
> probe.
> 
> CC: Matthias Brugger <matthias.bgg@gmail.com>
> Suggested-by: Tomasz Figa <tfiga@chromium.org>
> Signed-off-by: Yong Wu <yong.wu@mediatek.com>
> ---
>  drivers/memory/mtk-smi.c | 19 ++++++++++---------
>  1 file changed, 10 insertions(+), 9 deletions(-)

I understood this is a dependency for other patches, so:
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

If I am wrong and I can take it via memory tree, let me know.

Best regards,
Krzysztof
Yong Wu (吴勇) April 13, 2021, 6:04 a.m. UTC | #2
On Sat, 2021-04-10 at 14:40 +0200, Krzysztof Kozlowski wrote:
> On 10/04/2021 11:11, Yong Wu wrote:

> > Normally, If the smi-larb HW need work, we should enable the smi-common

> > HW power and clock firstly.

> > This patch adds device-link between the smi-larb dev and the smi-common

> > dev. then If pm_runtime_get_sync(smi-larb-dev), the pm_runtime_get_sync

> > (smi-common-dev) will be called automatically.

> > 

> > Also, Add DL_FLAG_STATELESS to avoid the smi-common clocks be gated when

> > probe.

> > 

> > CC: Matthias Brugger <matthias.bgg@gmail.com>

> > Suggested-by: Tomasz Figa <tfiga@chromium.org>

> > Signed-off-by: Yong Wu <yong.wu@mediatek.com>

> > ---

> >  drivers/memory/mtk-smi.c | 19 ++++++++++---------

> >  1 file changed, 10 insertions(+), 9 deletions(-)

> 

> I understood this is a dependency for other patches, so:

> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

> 

> If I am wrong and I can take it via memory tree, let me know.


Hi Krzysztof,

Thanks very much for your quickly review.

I think it is ok if it go through memory tree. In the original patch, we
pm_runtime_get(smi-common-dev) in the smi-larb's pm resume callback.
This patch only use device-link do this. thus, this patch have no
function change. it only adjusts the SMI internal code flow.

In addition, [14/16] expects your Acked-by. and that one should be
merged with the others.

About the others patches, I'm not sure which tree they should go
through. they cross several trees, dt-binding/iommu/media/drm/dts.

Not sure if Matthias could have time to review and give some suggestion.

> 

> Best regards,

> Krzysztof

> 

> _______________________________________________

> Linux-mediatek mailing list

> Linux-mediatek@lists.infradead.org

> http://lists.infradead.org/mailman/listinfo/linux-mediatek
Krzysztof Kozlowski April 13, 2021, 2:58 p.m. UTC | #3
On 13/04/2021 08:04, Yong Wu wrote:
> On Sat, 2021-04-10 at 14:40 +0200, Krzysztof Kozlowski wrote:

>> On 10/04/2021 11:11, Yong Wu wrote:

>>> Normally, If the smi-larb HW need work, we should enable the smi-common

>>> HW power and clock firstly.

>>> This patch adds device-link between the smi-larb dev and the smi-common

>>> dev. then If pm_runtime_get_sync(smi-larb-dev), the pm_runtime_get_sync

>>> (smi-common-dev) will be called automatically.

>>>

>>> Also, Add DL_FLAG_STATELESS to avoid the smi-common clocks be gated when

>>> probe.

>>>

>>> CC: Matthias Brugger <matthias.bgg@gmail.com>

>>> Suggested-by: Tomasz Figa <tfiga@chromium.org>

>>> Signed-off-by: Yong Wu <yong.wu@mediatek.com>

>>> ---

>>>  drivers/memory/mtk-smi.c | 19 ++++++++++---------

>>>  1 file changed, 10 insertions(+), 9 deletions(-)

>>

>> I understood this is a dependency for other patches, so:

>> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

>>

>> If I am wrong and I can take it via memory tree, let me know.

> 

> Hi Krzysztof,

> 

> Thanks very much for your quickly review.

> 

> I think it is ok if it go through memory tree. In the original patch, we

> pm_runtime_get(smi-common-dev) in the smi-larb's pm resume callback.

> This patch only use device-link do this. thus, this patch have no

> function change. it only adjusts the SMI internal code flow.


Hm, okay, I took it then for v5.13.

> 

> In addition, [14/16] expects your Acked-by. and that one should be

> merged with the others.


Thanks for reminder.

Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/drivers/memory/mtk-smi.c b/drivers/memory/mtk-smi.c
index b396253fcf4b..c5fb51f73b34 100644
--- a/drivers/memory/mtk-smi.c
+++ b/drivers/memory/mtk-smi.c
@@ -319,6 +319,7 @@  static int mtk_smi_larb_probe(struct platform_device *pdev)
 	struct device *dev = &pdev->dev;
 	struct device_node *smi_node;
 	struct platform_device *smi_pdev;
+	struct device_link *link;
 
 	larb = devm_kzalloc(dev, sizeof(*larb), GFP_KERNEL);
 	if (!larb)
@@ -358,6 +359,12 @@  static int mtk_smi_larb_probe(struct platform_device *pdev)
 		if (!platform_get_drvdata(smi_pdev))
 			return -EPROBE_DEFER;
 		larb->smi_common_dev = &smi_pdev->dev;
+		link = device_link_add(dev, larb->smi_common_dev,
+				       DL_FLAG_PM_RUNTIME | DL_FLAG_STATELESS);
+		if (!link) {
+			dev_err(dev, "Unable to link smi-common dev\n");
+			return -ENODEV;
+		}
 	} else {
 		dev_err(dev, "Failed to get the smi_common device\n");
 		return -EINVAL;
@@ -370,6 +377,9 @@  static int mtk_smi_larb_probe(struct platform_device *pdev)
 
 static int mtk_smi_larb_remove(struct platform_device *pdev)
 {
+	struct mtk_smi_larb *larb = platform_get_drvdata(pdev);
+
+	device_link_remove(&pdev->dev, larb->smi_common_dev);
 	pm_runtime_disable(&pdev->dev);
 	component_del(&pdev->dev, &mtk_smi_larb_component_ops);
 	return 0;
@@ -381,17 +391,9 @@  static int __maybe_unused mtk_smi_larb_resume(struct device *dev)
 	const struct mtk_smi_larb_gen *larb_gen = larb->larb_gen;
 	int ret;
 
-	/* Power on smi-common. */
-	ret = pm_runtime_resume_and_get(larb->smi_common_dev);
-	if (ret < 0) {
-		dev_err(dev, "Failed to pm get for smi-common(%d).\n", ret);
-		return ret;
-	}
-
 	ret = mtk_smi_clk_enable(&larb->smi);
 	if (ret < 0) {
 		dev_err(dev, "Failed to enable clock(%d).\n", ret);
-		pm_runtime_put_sync(larb->smi_common_dev);
 		return ret;
 	}
 
@@ -406,7 +408,6 @@  static int __maybe_unused mtk_smi_larb_suspend(struct device *dev)
 	struct mtk_smi_larb *larb = dev_get_drvdata(dev);
 
 	mtk_smi_clk_disable(&larb->smi);
-	pm_runtime_put_sync(larb->smi_common_dev);
 	return 0;
 }