All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jagan Teki <jagan@amarulasolutions.com>
To: Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Robert Foss <robert.foss@linaro.org>,
	Sam Ravnborg <sam@ravnborg.org>
Cc: linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com,
	linux-arm-kernel@lists.infradead.org,
	dri-devel@lists.freedesktop.org,
	Jagan Teki <jagan@amarulasolutions.com>
Subject: [PATCH v5 1/7] drm: sun4i: dsi: Drop DRM bind race with bridge attach
Date: Mon, 22 Nov 2021 12:22:17 +0530	[thread overview]
Message-ID: <20211122065223.88059-2-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20211122065223.88059-1-jagan@amarulasolutions.com>

Existing host driver will keep looking for DRM pointer in
sun6i_dsi_attach and defers even if the particular DSI device
is found for the first time. Meanwhile it triggers the bind
callback and gets the DRM pointer and then continues the
sun6i_dsi_attach.

This makes a deadlock situation if sun6i_dsi_attach is trying
to find the bridge.

If interface bridge is trying to call host attach, then host
sun6i_dsi_attach is trying to find bridge and defers the
interface bridge even if it found the bridge as bind callback
does not complete at the movement. So, this sun6i_dsi_attach
defers interface bridge and triggers the bind callback and
tries to attach the bridge with a bridge pointer which is not
available at the moment.

Eventually these callbacks are triggered recursively, as
sun6i_dsi_attach defers interface bridge and bind callback
defers sun6i_dsi_attach due to invalid bridge ponter.

This patch prevents this situation by probing all DSI devices
on the pipeline first and then triggers the bind callback by
dropping exing DRM binding logic.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v5:
- new patch

 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +---------
 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h |  1 -
 2 files changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
index 527c7b2474da..4bdcce8f1d84 100644
--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
@@ -967,14 +967,10 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host,
 
 	if (IS_ERR(panel))
 		return PTR_ERR(panel);
-	if (!dsi->drm || !dsi->drm->registered)
-		return -EPROBE_DEFER;
 
 	dsi->panel = panel;
 	dsi->device = device;
 
-	drm_kms_helper_hotplug_event(dsi->drm);
-
 	dev_info(host->dev, "Attached device %s\n", device->name);
 
 	return 0;
@@ -988,8 +984,6 @@ static int sun6i_dsi_detach(struct mipi_dsi_host *host,
 	dsi->panel = NULL;
 	dsi->device = NULL;
 
-	drm_kms_helper_hotplug_event(dsi->drm);
-
 	return 0;
 }
 
@@ -1077,8 +1071,6 @@ static int sun6i_dsi_bind(struct device *dev, struct device *master,
 
 	drm_connector_attach_encoder(&dsi->connector, &dsi->encoder);
 
-	dsi->drm = drm;
-
 	return 0;
 
 err_cleanup_connector:
@@ -1091,7 +1083,7 @@ static void sun6i_dsi_unbind(struct device *dev, struct device *master,
 {
 	struct sun6i_dsi *dsi = dev_get_drvdata(dev);
 
-	dsi->drm = NULL;
+	drm_encoder_cleanup(&dsi->encoder);
 }
 
 static const struct component_ops sun6i_dsi_ops = {
diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h
index c863900ae3b4..61e88ea6044d 100644
--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h
+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h
@@ -29,7 +29,6 @@ struct sun6i_dsi {
 
 	struct device		*dev;
 	struct mipi_dsi_device	*device;
-	struct drm_device	*drm;
 	struct drm_panel	*panel;
 };
 
-- 
2.25.1


WARNING: multiple messages have this Message-ID (diff)
From: Jagan Teki <jagan@amarulasolutions.com>
To: Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Robert Foss <robert.foss@linaro.org>,
	Sam Ravnborg <sam@ravnborg.org>
Cc: dri-devel@lists.freedesktop.org,
	linux-arm-kernel@lists.infradead.org,
	linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com,
	Jagan Teki <jagan@amarulasolutions.com>
Subject: [PATCH v5 1/7] drm: sun4i: dsi: Drop DRM bind race with bridge attach
Date: Mon, 22 Nov 2021 12:22:17 +0530	[thread overview]
Message-ID: <20211122065223.88059-2-jagan@amarulasolutions.com> (raw)
In-Reply-To: <20211122065223.88059-1-jagan@amarulasolutions.com>

Existing host driver will keep looking for DRM pointer in
sun6i_dsi_attach and defers even if the particular DSI device
is found for the first time. Meanwhile it triggers the bind
callback and gets the DRM pointer and then continues the
sun6i_dsi_attach.

This makes a deadlock situation if sun6i_dsi_attach is trying
to find the bridge.

If interface bridge is trying to call host attach, then host
sun6i_dsi_attach is trying to find bridge and defers the
interface bridge even if it found the bridge as bind callback
does not complete at the movement. So, this sun6i_dsi_attach
defers interface bridge and triggers the bind callback and
tries to attach the bridge with a bridge pointer which is not
available at the moment.

Eventually these callbacks are triggered recursively, as
sun6i_dsi_attach defers interface bridge and bind callback
defers sun6i_dsi_attach due to invalid bridge ponter.

This patch prevents this situation by probing all DSI devices
on the pipeline first and then triggers the bind callback by
dropping exing DRM binding logic.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v5:
- new patch

 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +---------
 drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h |  1 -
 2 files changed, 1 insertion(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
index 527c7b2474da..4bdcce8f1d84 100644
--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c
@@ -967,14 +967,10 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host,
 
 	if (IS_ERR(panel))
 		return PTR_ERR(panel);
-	if (!dsi->drm || !dsi->drm->registered)
-		return -EPROBE_DEFER;
 
 	dsi->panel = panel;
 	dsi->device = device;
 
-	drm_kms_helper_hotplug_event(dsi->drm);
-
 	dev_info(host->dev, "Attached device %s\n", device->name);
 
 	return 0;
@@ -988,8 +984,6 @@ static int sun6i_dsi_detach(struct mipi_dsi_host *host,
 	dsi->panel = NULL;
 	dsi->device = NULL;
 
-	drm_kms_helper_hotplug_event(dsi->drm);
-
 	return 0;
 }
 
@@ -1077,8 +1071,6 @@ static int sun6i_dsi_bind(struct device *dev, struct device *master,
 
 	drm_connector_attach_encoder(&dsi->connector, &dsi->encoder);
 
-	dsi->drm = drm;
-
 	return 0;
 
 err_cleanup_connector:
@@ -1091,7 +1083,7 @@ static void sun6i_dsi_unbind(struct device *dev, struct device *master,
 {
 	struct sun6i_dsi *dsi = dev_get_drvdata(dev);
 
-	dsi->drm = NULL;
+	drm_encoder_cleanup(&dsi->encoder);
 }
 
 static const struct component_ops sun6i_dsi_ops = {
diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h
index c863900ae3b4..61e88ea6044d 100644
--- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h
+++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h
@@ -29,7 +29,6 @@ struct sun6i_dsi {
 
 	struct device		*dev;
 	struct mipi_dsi_device	*device;
-	struct drm_device	*drm;
 	struct drm_panel	*panel;
 };
 
-- 
2.25.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-11-22  6:53 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-22  6:52 [PATCH v5 0/7] drm: sun4i: dsi: Convert drm bridge Jagan Teki
2021-11-22  6:52 ` Jagan Teki
2021-11-22  6:52 ` Jagan Teki [this message]
2021-11-22  6:52   ` [PATCH v5 1/7] drm: sun4i: dsi: Drop DRM bind race with bridge attach Jagan Teki
2021-11-22  6:52 ` [PATCH v5 2/7] drm: sun4i: dsi: Add component only once DSI device attached Jagan Teki
2021-11-22  6:52   ` Jagan Teki
2021-11-22  6:52 ` [PATCH v5 3/7] drm: sun4i: dsi: Convert to bridge driver Jagan Teki
2021-11-22  6:52   ` Jagan Teki
2021-11-22 10:07   ` Maxime Ripard
2021-11-22 10:07     ` Maxime Ripard
2021-11-22 12:45     ` Laurent Pinchart
2021-11-22 12:45       ` Laurent Pinchart
2021-11-22 13:48     ` Jagan Teki
2021-11-22 13:48       ` Jagan Teki
2021-11-22 14:04       ` Maxime Ripard
2021-11-22 14:04         ` Maxime Ripard
2021-11-22 14:19         ` Jagan Teki
2021-11-22 14:19           ` Jagan Teki
2021-11-22 15:04           ` Maxime Ripard
2021-11-22 15:04             ` Maxime Ripard
2021-11-25 16:17             ` Jagan Teki
2021-11-25 16:17               ` Jagan Teki
2021-11-23 18:32           ` Jagan Teki
2021-11-23 18:32             ` Jagan Teki
2021-11-25 14:15             ` Maxime Ripard
2021-11-25 14:15               ` Maxime Ripard
2021-11-25 14:25               ` Jagan Teki
2021-11-25 14:25                 ` Jagan Teki
2021-11-25 16:10                 ` Maxime Ripard
2021-11-25 16:10                   ` Maxime Ripard
2021-11-25 16:14                   ` Jagan Teki
2021-11-25 16:14                     ` Jagan Teki
2021-11-26 16:04                     ` Maxime Ripard
2021-11-26 16:04                       ` Maxime Ripard
2021-11-30  7:39                       ` Jagan Teki
2021-11-30  7:39                         ` Jagan Teki
2021-12-05 17:39                         ` Michael Nazzareno Trimarchi
2021-12-05 17:39                           ` Michael Nazzareno Trimarchi
2021-11-22 12:52   ` Neil Armstrong
2021-11-22 12:52     ` Neil Armstrong
2021-11-22 13:16     ` Jagan Teki
2021-11-22 13:16       ` Jagan Teki
2021-11-22 15:35       ` Neil Armstrong
2021-11-22 15:35         ` Neil Armstrong
2021-11-22 17:19         ` Dave Stevenson
2021-11-22 17:19           ` Dave Stevenson
2021-11-23  8:19           ` Neil Armstrong
2021-11-23  8:19             ` Neil Armstrong
2021-11-22  6:52 ` [PATCH v5 4/7] drm: sun4i: dsi: Add mode_set function Jagan Teki
2021-11-22  6:52   ` Jagan Teki
2021-11-22 10:07   ` Maxime Ripard
2021-11-22 10:07     ` Maxime Ripard
2021-11-22 13:05     ` Jagan Teki
2021-11-22 13:05       ` Jagan Teki
2021-11-22 13:28       ` Maxime Ripard
2021-11-22 13:28         ` Maxime Ripard
2021-11-22 13:51         ` Jagan Teki
2021-11-22 13:51           ` Jagan Teki
2021-11-22 14:09           ` Maxime Ripard
2021-11-22 14:09             ` Maxime Ripard
2021-11-22 14:31             ` Jagan Teki
2021-11-22 14:31               ` Jagan Teki
2021-11-22 15:06               ` Maxime Ripard
2021-11-22 15:06                 ` Maxime Ripard
2021-11-22 15:17                 ` Jagan Teki
2021-11-22 15:17                   ` Jagan Teki
2021-11-22  6:52 ` [DO NOT MERGE] [PATCH v5 5/7] ARM: dts: sun8i: bananapi-m2m: Enable S070WV20-CT16 Panel Jagan Teki
2021-11-22  6:52   ` Jagan Teki
2021-11-22  6:52 ` [DO NOT MERGE] [PATCH v5 6/7] ARM: dts: sun8i: bananapi-m2m: Enable ICN6211 DSI Bridge Jagan Teki
2021-11-22  6:52   ` Jagan Teki
2021-11-22  6:52 ` [DO NOT MERGE] [PATCH v5 7/7] ARM: dts: sun8i: Enable DLPC3433 Bridge (I2C) Jagan Teki
2021-11-22  6:52   ` Jagan Teki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211122065223.88059-2-jagan@amarulasolutions.com \
    --to=jagan@amarulasolutions.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-amarula@amarulasolutions.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=mripard@kernel.org \
    --cc=narmstrong@baylibre.com \
    --cc=robert.foss@linaro.org \
    --cc=sam@ravnborg.org \
    --cc=wens@csie.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.