blob: 9031282378906ca73b62d2a35b45c94db59063a6 [file] [log] [blame]
From 0446372bb0ae6cbfdfb21d12103361d64887d2d2 Mon Sep 17 00:00:00 2001
From: Yong Wu <yong.wu@mediatek.com>
Date: Sat, 10 Apr 2021 17:11:14 +0800
Subject: [PATCH] FROMLIST: iommu/mediatek: Add probe_defer for smi-larb
The iommu consumer should use device_link to connect with the
smi-larb(supplier). then the smi-larb should run before the iommu
consumer. Here we delay the iommu driver until the smi driver is
ready, then all the iommu consumer always is after the smi driver.
When there is no this patch, if some consumer drivers run before
smi-larb, the supplier link_status is DL_DEV_NO_DRIVER(0) in the
device_link_add, then device_links_driver_bound will use WARN_ON
to complain that the link_status of supplier is not right.
This is a preparing patch for adding device_link.
Signed-off-by: Yong Wu <yong.wu@mediatek.com>
(am from https://patchwork.kernel.org/project/linux-mediatek/patch/20210410091128.31823-3-yong.wu@mediatek.com/)
BUG=b:126008328
TEST=boot krane
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
Change-Id: Id122fa8aa5ec7df051d2d054ff1895c3b72ce267
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2866749
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
---
drivers/iommu/mtk_iommu.c | 2 +-
drivers/iommu/mtk_iommu_v1.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index e06b8a0e2b56..c8b82a3cdf3f 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -856,7 +856,7 @@ static int mtk_iommu_probe(struct platform_device *pdev)
id = i;
plarbdev = of_find_device_by_node(larbnode);
- if (!plarbdev) {
+ if (!plarbdev || !plarbdev->dev.driver) {
of_node_put(larbnode);
return -EPROBE_DEFER;
}
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index 5915d7b38211..278908716a13 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -595,7 +595,7 @@ static int mtk_iommu_probe(struct platform_device *pdev)
}
plarbdev = of_find_device_by_node(larbnode);
- if (!plarbdev) {
+ if (!plarbdev || !plarbdev->dev.driver) {
of_node_put(larbnode);
return -EPROBE_DEFER;
}
--
2.31.1.607.g51e8a6a459-goog