|
Patrik Jakobsson |
610600 |
From 2b57f726611e294dc4297dd48eb8c98ef1938e82 Mon Sep 17 00:00:00 2001
|
|
Patrik Jakobsson |
610600 |
From: Johan Hovold <johan+linaro@kernel.org>
|
|
Patrik Jakobsson |
610600 |
Date: Tue, 13 Sep 2022 10:53:16 +0200
|
|
Patrik Jakobsson |
610600 |
Subject: drm/msm/dp: fix aux-bus EP lifetime
|
|
Patrik Jakobsson |
610600 |
Git-commit: 2b57f726611e294dc4297dd48eb8c98ef1938e82
|
|
Patrik Jakobsson |
610600 |
Patch-mainline: v6.1-rc3
|
|
Patrik Jakobsson |
610600 |
References: git-fixes
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
Device-managed resources allocated post component bind must be tied to
|
|
Patrik Jakobsson |
610600 |
the lifetime of the aggregate DRM device or they will not necessarily be
|
|
Patrik Jakobsson |
610600 |
released when binding of the aggregate device is deferred.
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
This can lead resource leaks or failure to bind the aggregate device
|
|
Patrik Jakobsson |
610600 |
when binding is later retried and a second attempt to allocate the
|
|
Patrik Jakobsson |
610600 |
resources is made.
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
For the DP aux-bus, an attempt to populate the bus a second time will
|
|
Patrik Jakobsson |
610600 |
simply fail ("DP AUX EP device already populated").
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
Fix this by tying the lifetime of the EP device to the DRM device rather
|
|
Patrik Jakobsson |
610600 |
than DP controller platform device.
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
Fixes: c3bf8e21b38a ("drm/msm/dp: Add eDP support via aux_bus")
|
|
Patrik Jakobsson |
610600 |
Cc: stable@vger.kernel.org # 5.19
|
|
Patrik Jakobsson |
610600 |
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
|
|
Patrik Jakobsson |
610600 |
Reviewed-by: Douglas Anderson <dianders@chromium.org>
|
|
Patrik Jakobsson |
610600 |
Tested-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
|
|
Patrik Jakobsson |
610600 |
Reviewed-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
|
|
Patrik Jakobsson |
610600 |
Patchwork: https://patchwork.freedesktop.org/patch/502672/
|
|
Patrik Jakobsson |
610600 |
Link: https://lore.kernel.org/r/20220913085320.8577-7-johan+linaro@kernel.org
|
|
Patrik Jakobsson |
610600 |
Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
|
|
Patrik Jakobsson |
610600 |
Acked-by: Patrik Jakobsson <pjakobsson@suse.de>
|
|
Patrik Jakobsson |
610600 |
---
|
|
Patrik Jakobsson |
610600 |
drivers/gpu/drm/msm/dp/dp_display.c | 13 ++++++++++++-
|
|
Patrik Jakobsson |
610600 |
1 file changed, 12 insertions(+), 1 deletion(-)
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
|
|
Patrik Jakobsson |
610600 |
index 352cc09f2069..42de690132cf 100644
|
|
Patrik Jakobsson |
610600 |
--- a/drivers/gpu/drm/msm/dp/dp_display.c
|
|
Patrik Jakobsson |
610600 |
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
|
|
Patrik Jakobsson |
610600 |
@@ -1528,6 +1528,11 @@ void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor)
|
|
Patrik Jakobsson |
610600 |
}
|
|
Patrik Jakobsson |
610600 |
}
|
|
Patrik Jakobsson |
610600 |
|
|
Patrik Jakobsson |
610600 |
+static void of_dp_aux_depopulate_bus_void(void *data)
|
|
Patrik Jakobsson |
610600 |
+{
|
|
Patrik Jakobsson |
610600 |
+ of_dp_aux_depopulate_bus(data);
|
|
Patrik Jakobsson |
610600 |
+}
|
|
Patrik Jakobsson |
610600 |
+
|
|
Patrik Jakobsson |
610600 |
static int dp_display_get_next_bridge(struct msm_dp *dp)
|
|
Patrik Jakobsson |
610600 |
{
|
|
Patrik Jakobsson |
610600 |
int rc;
|
|
Patrik Jakobsson |
610600 |
@@ -1552,10 +1557,16 @@ static int dp_display_get_next_bridge(struct msm_dp *dp)
|
|
Patrik Jakobsson |
610600 |
* panel driver is probed asynchronously but is the best we
|
|
Patrik Jakobsson |
610600 |
* can do without a bigger driver reorganization.
|
|
Patrik Jakobsson |
610600 |
*/
|
|
Patrik Jakobsson |
610600 |
- rc = devm_of_dp_aux_populate_ep_devices(dp_priv->aux);
|
|
Patrik Jakobsson |
610600 |
+ rc = of_dp_aux_populate_bus(dp_priv->aux, NULL);
|
|
Patrik Jakobsson |
610600 |
of_node_put(aux_bus);
|
|
Patrik Jakobsson |
610600 |
if (rc)
|
|
Patrik Jakobsson |
610600 |
goto error;
|
|
Patrik Jakobsson |
610600 |
+
|
|
Patrik Jakobsson |
610600 |
+ rc = devm_add_action_or_reset(dp->drm_dev->dev,
|
|
Patrik Jakobsson |
610600 |
+ of_dp_aux_depopulate_bus_void,
|
|
Patrik Jakobsson |
610600 |
+ dp_priv->aux);
|
|
Patrik Jakobsson |
610600 |
+ if (rc)
|
|
Patrik Jakobsson |
610600 |
+ goto error;
|
|
Patrik Jakobsson |
610600 |
} else if (dp->is_edp) {
|
|
Patrik Jakobsson |
610600 |
DRM_ERROR("eDP aux_bus not found\n");
|
|
Patrik Jakobsson |
610600 |
return -ENODEV;
|
|
Patrik Jakobsson |
610600 |
--
|
|
Patrik Jakobsson |
610600 |
2.39.0
|
|
Patrik Jakobsson |
610600 |
|