Patrik Jakobsson 17d7b7
From 16194958f888d63839042d1190f7001e5ddec47b Mon Sep 17 00:00:00 2001
Patrik Jakobsson 17d7b7
From: Johan Hovold <johan+linaro@kernel.org>
Patrik Jakobsson 17d7b7
Date: Tue, 13 Sep 2022 10:53:17 +0200
Patrik Jakobsson 17d7b7
Subject: drm/msm/dp: fix bridge lifetime
Patrik Jakobsson 17d7b7
Git-commit: 16194958f888d63839042d1190f7001e5ddec47b
Patrik Jakobsson 17d7b7
Patch-mainline: v6.1-rc3
Patrik Jakobsson 17d7b7
References: git-fixes
Patrik Jakobsson 17d7b7
Patrik Jakobsson 17d7b7
Device-managed resources allocated post component bind must be tied to
Patrik Jakobsson 17d7b7
the lifetime of the aggregate DRM device or they will not necessarily be
Patrik Jakobsson 17d7b7
released when binding of the aggregate device is deferred.
Patrik Jakobsson 17d7b7
Patrik Jakobsson 17d7b7
This can lead resource leaks or failure to bind the aggregate device
Patrik Jakobsson 17d7b7
when binding is later retried and a second attempt to allocate the
Patrik Jakobsson 17d7b7
resources is made.
Patrik Jakobsson 17d7b7
Patrik Jakobsson 17d7b7
For the DP bridges, previously allocated bridges will leak on probe
Patrik Jakobsson 17d7b7
deferral.
Patrik Jakobsson 17d7b7
Patrik Jakobsson 17d7b7
Fix this by amending the DP parser interface and tying the lifetime of
Patrik Jakobsson 17d7b7
the bridge device to the DRM device rather than DP platform device.
Patrik Jakobsson 17d7b7
Patrik Jakobsson 17d7b7
Fixes: c3bf8e21b38a ("drm/msm/dp: Add eDP support via aux_bus")
Patrik Jakobsson 17d7b7
Cc: stable@vger.kernel.org      # 5.19
Patrik Jakobsson 17d7b7
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patrik Jakobsson 17d7b7
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Patrik Jakobsson 17d7b7
Tested-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
Patrik Jakobsson 17d7b7
Reviewed-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
Patrik Jakobsson 17d7b7
Patchwork: https://patchwork.freedesktop.org/patch/502667/
Patrik Jakobsson 17d7b7
Link: https://lore.kernel.org/r/20220913085320.8577-8-johan+linaro@kernel.org
Patrik Jakobsson 17d7b7
Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patrik Jakobsson 17d7b7
Acked-by: Patrik Jakobsson <pjakobsson@suse.de>
Patrik Jakobsson 17d7b7
---
Patrik Jakobsson 17d7b7
 drivers/gpu/drm/msm/dp/dp_display.c | 2 +-
Patrik Jakobsson 17d7b7
 drivers/gpu/drm/msm/dp/dp_parser.c  | 6 +++---
Patrik Jakobsson 17d7b7
 drivers/gpu/drm/msm/dp/dp_parser.h  | 5 +++--
Patrik Jakobsson 17d7b7
 3 files changed, 7 insertions(+), 6 deletions(-)
Patrik Jakobsson 17d7b7
Patrik Jakobsson 17d7b7
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
Patrik Jakobsson 17d7b7
index 42de690132cf..a49f6dbbe888 100644
Patrik Jakobsson 17d7b7
--- a/drivers/gpu/drm/msm/dp/dp_display.c
Patrik Jakobsson 17d7b7
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
Patrik Jakobsson 17d7b7
@@ -1579,7 +1579,7 @@ static int dp_display_get_next_bridge(struct msm_dp *dp)
Patrik Jakobsson 17d7b7
 	 * For DisplayPort interfaces external bridges are optional, so
Patrik Jakobsson 17d7b7
 	 * silently ignore an error if one is not present (-ENODEV).
Patrik Jakobsson 17d7b7
 	 */
Patrik Jakobsson 17d7b7
-	rc = dp_parser_find_next_bridge(dp_priv->parser);
Patrik Jakobsson 17d7b7
+	rc = devm_dp_parser_find_next_bridge(dp->drm_dev->dev, dp_priv->parser);
Patrik Jakobsson 17d7b7
 	if (!dp->is_edp && rc == -ENODEV)
Patrik Jakobsson 17d7b7
 		return 0;
Patrik Jakobsson 17d7b7
 
Patrik Jakobsson 17d7b7
diff --git a/drivers/gpu/drm/msm/dp/dp_parser.c b/drivers/gpu/drm/msm/dp/dp_parser.c
Patrik Jakobsson 17d7b7
index dd732215d55b..dcbe893d66d7 100644
Patrik Jakobsson 17d7b7
--- a/drivers/gpu/drm/msm/dp/dp_parser.c
Patrik Jakobsson 17d7b7
+++ b/drivers/gpu/drm/msm/dp/dp_parser.c
Patrik Jakobsson 17d7b7
@@ -240,12 +240,12 @@ static int dp_parser_clock(struct dp_parser *parser)
Patrik Jakobsson 17d7b7
 	return 0;
Patrik Jakobsson 17d7b7
 }
Patrik Jakobsson 17d7b7
 
Patrik Jakobsson 17d7b7
-int dp_parser_find_next_bridge(struct dp_parser *parser)
Patrik Jakobsson 17d7b7
+int devm_dp_parser_find_next_bridge(struct device *dev, struct dp_parser *parser)
Patrik Jakobsson 17d7b7
 {
Patrik Jakobsson 17d7b7
-	struct device *dev = &parser->pdev->dev;
Patrik Jakobsson 17d7b7
+	struct platform_device *pdev = parser->pdev;
Patrik Jakobsson 17d7b7
 	struct drm_bridge *bridge;
Patrik Jakobsson 17d7b7
 
Patrik Jakobsson 17d7b7
-	bridge = devm_drm_of_get_bridge(dev, dev->of_node, 1, 0);
Patrik Jakobsson 17d7b7
+	bridge = devm_drm_of_get_bridge(dev, pdev->dev.of_node, 1, 0);
Patrik Jakobsson 17d7b7
 	if (IS_ERR(bridge))
Patrik Jakobsson 17d7b7
 		return PTR_ERR(bridge);
Patrik Jakobsson 17d7b7
 
Patrik Jakobsson 17d7b7
diff --git a/drivers/gpu/drm/msm/dp/dp_parser.h b/drivers/gpu/drm/msm/dp/dp_parser.h
Patrik Jakobsson 17d7b7
index 866c1a82bf1a..d30ab773db46 100644
Patrik Jakobsson 17d7b7
--- a/drivers/gpu/drm/msm/dp/dp_parser.h
Patrik Jakobsson 17d7b7
+++ b/drivers/gpu/drm/msm/dp/dp_parser.h
Patrik Jakobsson 17d7b7
@@ -138,8 +138,9 @@ struct dp_parser {
Patrik Jakobsson 17d7b7
 struct dp_parser *dp_parser_get(struct platform_device *pdev);
Patrik Jakobsson 17d7b7
 
Patrik Jakobsson 17d7b7
 /**
Patrik Jakobsson 17d7b7
- * dp_parser_find_next_bridge() - find an additional bridge to DP
Patrik Jakobsson 17d7b7
+ * devm_dp_parser_find_next_bridge() - find an additional bridge to DP
Patrik Jakobsson 17d7b7
  *
Patrik Jakobsson 17d7b7
+ * @dev: device to tie bridge lifetime to
Patrik Jakobsson 17d7b7
  * @parser: dp_parser data from client
Patrik Jakobsson 17d7b7
  *
Patrik Jakobsson 17d7b7
  * This function is used to find any additional bridge attached to
Patrik Jakobsson 17d7b7
@@ -147,6 +148,6 @@ struct dp_parser *dp_parser_get(struct platform_device *pdev);
Patrik Jakobsson 17d7b7
  *
Patrik Jakobsson 17d7b7
  * Return: 0 if able to get the bridge, otherwise negative errno for failure.
Patrik Jakobsson 17d7b7
  */
Patrik Jakobsson 17d7b7
-int dp_parser_find_next_bridge(struct dp_parser *parser);
Patrik Jakobsson 17d7b7
+int devm_dp_parser_find_next_bridge(struct device *dev, struct dp_parser *parser);
Patrik Jakobsson 17d7b7
 
Patrik Jakobsson 17d7b7
 #endif
Patrik Jakobsson 17d7b7
-- 
Patrik Jakobsson 17d7b7
2.39.0
Patrik Jakobsson 17d7b7