|
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 |
|