All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
@ 2021-12-12 18:14 ` Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 1/7] drm: exynos: dsi: Check panel for panel helpers Jagan Teki
                     ` (7 more replies)
  0 siblings, 8 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Updated series about drm bridge conversion of exynos dsi.

Patch 1: panel checker

Patch 2: panel_bridge API

Patch 3: Bridge conversion

Patch 4: pree_enable, post_disable

Patch 5: Atomic functions

Patch 6: atomic_set

Patch 7: DSI init in enable

[1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/

Any inputs?
Jagan.

Jagan Teki (7):
  drm: exynos: dsi: Check panel for panel helpers
  drm: exynos: dsi: Use drm panel_bridge API
  drm: exynos: dsi: Convert to bridge driver
  drm: exynos: dsi: Separate pre_enable, post_disable code
  drm: exynos: dsi: Switch to atomic funcs
  drm: exynos: dsi: Get the mode from bridge
  drm: exynos: dsi: Move DSI init in bridge enable

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 240 ++++++++----------------
 1 file changed, 75 insertions(+), 165 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH v3 1/7] drm: exynos: dsi: Check panel for panel helpers
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API Jagan Teki
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Trigger the panel operation helpers only if host found the panel.

Add check.

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

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 8d137857818c..0bb44e476633 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1439,7 +1439,8 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
 
 	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
 
-	drm_panel_disable(dsi->panel);
+	if (dsi->panel)
+		drm_panel_disable(dsi->panel);
 
 	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
 		if (iter->funcs->disable)
@@ -1447,7 +1448,8 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
 	}
 
 	exynos_dsi_set_display_enable(dsi, false);
-	drm_panel_unprepare(dsi->panel);
+	if (dsi->panel)
+		drm_panel_unprepare(dsi->panel);
 
 	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
 		if (iter->funcs->post_disable)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 1/7] drm: exynos: dsi: Check panel for panel helpers Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-13  9:08     ` Andrzej Hajda
  2021-12-12 18:14   ` [PATCH v3 3/7] drm: exynos: dsi: Convert to bridge driver Jagan Teki
                     ` (5 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Replace the manual panel handling code by a drm panel_bridge via
devm_drm_of_get_bridge().

Adding panel_bridge handling,

- Drops drm_connector and related operations as drm_bridge_attach
  creates connector during attachment.

- Drops panel pointer and iterate the bridge, so-that it can operate
  the normal bridge and panel_bridge in constitutive callbacks.

This simplifies the driver and allows all components in the display
pipeline to be treated as bridges.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v3:
- fix port number
- add print for attached device
Changes for v2:
- new patch

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 165 ++++--------------------
 1 file changed, 26 insertions(+), 139 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 0bb44e476633..d1039628b6f2 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -221,6 +221,11 @@ enum exynos_dsi_transfer_type {
 	EXYNOS_DSI_RX,
 };
 
+enum {
+	DSI_PORT_IN,
+	DSI_PORT_OUT
+};
+
 struct exynos_dsi_transfer {
 	struct list_head list;
 	struct completion completed;
@@ -254,8 +259,6 @@ struct exynos_dsi_driver_data {
 struct exynos_dsi {
 	struct drm_encoder encoder;
 	struct mipi_dsi_host dsi_host;
-	struct drm_connector connector;
-	struct drm_panel *panel;
 	struct list_head bridge_chain;
 	struct drm_bridge *out_bridge;
 	struct device *dev;
@@ -285,7 +288,6 @@ struct exynos_dsi {
 };
 
 #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
-#define connector_to_dsi(c) container_of(c, struct exynos_dsi, connector)
 
 static inline struct exynos_dsi *encoder_to_dsi(struct drm_encoder *e)
 {
@@ -1391,42 +1393,21 @@ static void exynos_dsi_enable(struct drm_encoder *encoder)
 
 	dsi->state |= DSIM_STATE_ENABLED;
 
-	if (dsi->panel) {
-		ret = drm_panel_prepare(dsi->panel);
-		if (ret < 0)
-			goto err_put_sync;
-	} else {
-		list_for_each_entry_reverse(iter, &dsi->bridge_chain,
-					    chain_node) {
-			if (iter->funcs->pre_enable)
-				iter->funcs->pre_enable(iter);
-		}
+	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
+		if (iter->funcs->pre_enable)
+			iter->funcs->pre_enable(iter);
 	}
 
 	exynos_dsi_set_display_mode(dsi);
 	exynos_dsi_set_display_enable(dsi, true);
 
-	if (dsi->panel) {
-		ret = drm_panel_enable(dsi->panel);
-		if (ret < 0)
-			goto err_display_disable;
-	} else {
-		list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
-			if (iter->funcs->enable)
-				iter->funcs->enable(iter);
-		}
+	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
+		if (iter->funcs->enable)
+			iter->funcs->enable(iter);
 	}
 
 	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
 	return;
-
-err_display_disable:
-	exynos_dsi_set_display_enable(dsi, false);
-	drm_panel_unprepare(dsi->panel);
-
-err_put_sync:
-	dsi->state &= ~DSIM_STATE_ENABLED;
-	pm_runtime_put(dsi->dev);
 }
 
 static void exynos_dsi_disable(struct drm_encoder *encoder)
@@ -1439,17 +1420,12 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
 
 	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
 
-	if (dsi->panel)
-		drm_panel_disable(dsi->panel);
-
 	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
 		if (iter->funcs->disable)
 			iter->funcs->disable(iter);
 	}
 
 	exynos_dsi_set_display_enable(dsi, false);
-	if (dsi->panel)
-		drm_panel_unprepare(dsi->panel);
 
 	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
 		if (iter->funcs->post_disable)
@@ -1460,70 +1436,6 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
 	pm_runtime_put_sync(dsi->dev);
 }
 
-static enum drm_connector_status
-exynos_dsi_detect(struct drm_connector *connector, bool force)
-{
-	return connector->status;
-}
-
-static void exynos_dsi_connector_destroy(struct drm_connector *connector)
-{
-	drm_connector_unregister(connector);
-	drm_connector_cleanup(connector);
-	connector->dev = NULL;
-}
-
-static const struct drm_connector_funcs exynos_dsi_connector_funcs = {
-	.detect = exynos_dsi_detect,
-	.fill_modes = drm_helper_probe_single_connector_modes,
-	.destroy = exynos_dsi_connector_destroy,
-	.reset = drm_atomic_helper_connector_reset,
-	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
-	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
-};
-
-static int exynos_dsi_get_modes(struct drm_connector *connector)
-{
-	struct exynos_dsi *dsi = connector_to_dsi(connector);
-
-	if (dsi->panel)
-		return drm_panel_get_modes(dsi->panel, connector);
-
-	return 0;
-}
-
-static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
-	.get_modes = exynos_dsi_get_modes,
-};
-
-static int exynos_dsi_create_connector(struct drm_encoder *encoder)
-{
-	struct exynos_dsi *dsi = encoder_to_dsi(encoder);
-	struct drm_connector *connector = &dsi->connector;
-	struct drm_device *drm = encoder->dev;
-	int ret;
-
-	connector->polled = DRM_CONNECTOR_POLL_HPD;
-
-	ret = drm_connector_init(drm, connector, &exynos_dsi_connector_funcs,
-				 DRM_MODE_CONNECTOR_DSI);
-	if (ret) {
-		DRM_DEV_ERROR(dsi->dev,
-			      "Failed to initialize connector with drm\n");
-		return ret;
-	}
-
-	connector->status = connector_status_disconnected;
-	drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs);
-	drm_connector_attach_encoder(connector, encoder);
-	if (!drm->registered)
-		return 0;
-
-	connector->funcs->reset(connector);
-	drm_connector_register(connector);
-	return 0;
-}
-
 static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
 	.enable = exynos_dsi_enable,
 	.disable = exynos_dsi_disable,
@@ -1537,31 +1449,20 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
 	struct exynos_dsi *dsi = host_to_dsi(host);
 	struct drm_encoder *encoder = &dsi->encoder;
 	struct drm_device *drm = encoder->dev;
-	struct drm_bridge *out_bridge;
-
-	out_bridge  = of_drm_find_bridge(device->dev.of_node);
-	if (out_bridge) {
-		drm_bridge_attach(encoder, out_bridge, NULL, 0);
-		dsi->out_bridge = out_bridge;
-		list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
-	} else {
-		int ret = exynos_dsi_create_connector(encoder);
-
-		if (ret) {
-			DRM_DEV_ERROR(dsi->dev,
-				      "failed to create connector ret = %d\n",
-				      ret);
-			drm_encoder_cleanup(encoder);
-			return ret;
-		}
+	int ret;
 
-		dsi->panel = of_drm_find_panel(device->dev.of_node);
-		if (IS_ERR(dsi->panel))
-			dsi->panel = NULL;
-		else
-			dsi->connector.status = connector_status_connected;
+	dsi->out_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, DSI_PORT_OUT, 0);
+	if (IS_ERR(dsi->out_bridge)) {
+		ret = PTR_ERR(dsi->out_bridge);
+		DRM_DEV_ERROR(dsi->dev, "failed to find the bridge: %d\n", ret);
+		return ret;
 	}
 
+	DRM_DEV_INFO(dsi->dev, "Attached %s device\n", device->name);
+
+	drm_bridge_attach(encoder, dsi->out_bridge, NULL, 0);
+	list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
+
 	/*
 	 * This is a temporary solution and should be made by more generic way.
 	 *
@@ -1569,7 +1470,7 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
 	 * TE interrupt handler.
 	 */
 	if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) {
-		int ret = exynos_dsi_register_te_irq(dsi, &device->dev);
+		ret = exynos_dsi_register_te_irq(dsi, &device->dev);
 		if (ret)
 			return ret;
 	}
@@ -1596,18 +1497,9 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host,
 	struct exynos_dsi *dsi = host_to_dsi(host);
 	struct drm_device *drm = dsi->encoder.dev;
 
-	if (dsi->panel) {
-		mutex_lock(&drm->mode_config.mutex);
-		exynos_dsi_disable(&dsi->encoder);
-		dsi->panel = NULL;
-		dsi->connector.status = connector_status_disconnected;
-		mutex_unlock(&drm->mode_config.mutex);
-	} else {
-		if (dsi->out_bridge->funcs->detach)
-			dsi->out_bridge->funcs->detach(dsi->out_bridge);
-		dsi->out_bridge = NULL;
-		INIT_LIST_HEAD(&dsi->bridge_chain);
-	}
+	if (dsi->out_bridge->funcs->detach)
+		dsi->out_bridge->funcs->detach(dsi->out_bridge);
+	INIT_LIST_HEAD(&dsi->bridge_chain);
 
 	if (drm->mode_config.poll_enabled)
 		drm_kms_helper_hotplug_event(drm);
@@ -1663,11 +1555,6 @@ static int exynos_dsi_of_read_u32(const struct device_node *np,
 	return ret;
 }
 
-enum {
-	DSI_PORT_IN,
-	DSI_PORT_OUT
-};
-
 static int exynos_dsi_parse_dt(struct exynos_dsi *dsi)
 {
 	struct device *dev = dsi->dev;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v3 3/7] drm: exynos: dsi: Convert to bridge driver
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 1/7] drm: exynos: dsi: Check panel for panel helpers Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-13  9:34     ` Andrzej Hajda
  2021-12-12 18:14   ` [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code Jagan Teki
                     ` (4 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Convert the encoders to bridge drivers in order to standardize on
a single API with built-in dumb encoder support for compatibility
with existing component drivers.

Driver bridge conversion will help to reuse the same bridge on
different platforms as exynos dsi driver can be used as a Samsung
DSIM and use it for i.MX8MM platform.

Bridge conversion,

- Drops drm_encoder_helper_funcs, bridge_chain.

- Adds drm_bridge_funcs and register a drm bridge.

Convert it.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v3:
- move bridge add in host_attach
- move bridge remove in host_detach
- use flags, bridge in drm_bridge_attach in attch 
Changes for v2:
- drop bridge_chain

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 82 +++++++++++++------------
 1 file changed, 43 insertions(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index d1039628b6f2..1450187c1edc 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -259,7 +259,7 @@ struct exynos_dsi_driver_data {
 struct exynos_dsi {
 	struct drm_encoder encoder;
 	struct mipi_dsi_host dsi_host;
-	struct list_head bridge_chain;
+	struct drm_bridge bridge;
 	struct drm_bridge *out_bridge;
 	struct device *dev;
 
@@ -289,9 +289,9 @@ struct exynos_dsi {
 
 #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
 
-static inline struct exynos_dsi *encoder_to_dsi(struct drm_encoder *e)
+static inline struct exynos_dsi *bridge_to_dsi(struct drm_bridge *b)
 {
-	return container_of(e, struct exynos_dsi, encoder);
+	return container_of(b, struct exynos_dsi, bridge);
 }
 
 enum reg_idx {
@@ -882,9 +882,10 @@ static int exynos_dsi_init_link(struct exynos_dsi *dsi)
 	return 0;
 }
 
-static void exynos_dsi_set_display_mode(struct exynos_dsi *dsi)
+static void exynos_dsi_set_display_mode(struct drm_bridge *bridge)
 {
-	struct drm_display_mode *m = &dsi->encoder.crtc->state->adjusted_mode;
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
+	struct drm_display_mode *m = &bridge->encoder->crtc->state->adjusted_mode;
 	unsigned int num_bits_resol = dsi->driver_data->num_bits_resol;
 	u32 reg;
 
@@ -1376,10 +1377,10 @@ static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi)
 	}
 }
 
-static void exynos_dsi_enable(struct drm_encoder *encoder)
+static void exynos_dsi_enable(struct drm_bridge *bridge)
 {
-	struct exynos_dsi *dsi = encoder_to_dsi(encoder);
-	struct drm_bridge *iter;
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
+	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
 	int ret;
 
 	if (dsi->state & DSIM_STATE_ENABLED)
@@ -1393,52 +1394,53 @@ static void exynos_dsi_enable(struct drm_encoder *encoder)
 
 	dsi->state |= DSIM_STATE_ENABLED;
 
-	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
-		if (iter->funcs->pre_enable)
-			iter->funcs->pre_enable(iter);
-	}
+	if (dsi->out_bridge)
+		funcs->pre_enable(dsi->out_bridge);
 
-	exynos_dsi_set_display_mode(dsi);
+	exynos_dsi_set_display_mode(bridge);
 	exynos_dsi_set_display_enable(dsi, true);
 
-	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
-		if (iter->funcs->enable)
-			iter->funcs->enable(iter);
-	}
+	if (dsi->out_bridge)
+		funcs->enable(dsi->out_bridge);
 
 	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
 	return;
 }
 
-static void exynos_dsi_disable(struct drm_encoder *encoder)
+static void exynos_dsi_disable(struct drm_bridge *bridge)
 {
-	struct exynos_dsi *dsi = encoder_to_dsi(encoder);
-	struct drm_bridge *iter;
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
+	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
 
 	if (!(dsi->state & DSIM_STATE_ENABLED))
 		return;
 
 	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
 
-	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
-		if (iter->funcs->disable)
-			iter->funcs->disable(iter);
-	}
+	if (dsi->out_bridge)
+		funcs->disable(dsi->out_bridge);
 
 	exynos_dsi_set_display_enable(dsi, false);
 
-	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
-		if (iter->funcs->post_disable)
-			iter->funcs->post_disable(iter);
-	}
+	if (dsi->out_bridge)
+		funcs->post_disable(dsi->out_bridge);
 
 	dsi->state &= ~DSIM_STATE_ENABLED;
 	pm_runtime_put_sync(dsi->dev);
 }
 
-static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
-	.enable = exynos_dsi_enable,
-	.disable = exynos_dsi_disable,
+static int exynos_dsi_attach(struct drm_bridge *bridge,
+			     enum drm_bridge_attach_flags flags)
+{
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
+
+	return drm_bridge_attach(bridge->encoder, dsi->out_bridge, bridge, flags);
+}
+
+static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
+	.enable				= exynos_dsi_enable,
+	.disable			= exynos_dsi_disable,
+	.attach				= exynos_dsi_attach,
 };
 
 MODULE_DEVICE_TABLE(of, exynos_dsi_of_match);
@@ -1460,8 +1462,9 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
 
 	DRM_DEV_INFO(dsi->dev, "Attached %s device\n", device->name);
 
-	drm_bridge_attach(encoder, dsi->out_bridge, NULL, 0);
-	list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
+	drm_bridge_add(&dsi->bridge);
+
+	drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
 
 	/*
 	 * This is a temporary solution and should be made by more generic way.
@@ -1499,13 +1502,14 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host,
 
 	if (dsi->out_bridge->funcs->detach)
 		dsi->out_bridge->funcs->detach(dsi->out_bridge);
-	INIT_LIST_HEAD(&dsi->bridge_chain);
 
 	if (drm->mode_config.poll_enabled)
 		drm_kms_helper_hotplug_event(drm);
 
 	exynos_dsi_unregister_te_irq(dsi);
 
+	drm_bridge_remove(&dsi->bridge);
+
 	return 0;
 }
 
@@ -1591,8 +1595,6 @@ static int exynos_dsi_bind(struct device *dev, struct device *master,
 
 	drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
 
-	drm_encoder_helper_add(encoder, &exynos_dsi_encoder_helper_funcs);
-
 	ret = exynos_drm_set_possible_crtcs(encoder, EXYNOS_DISPLAY_TYPE_LCD);
 	if (ret < 0)
 		return ret;
@@ -1612,9 +1614,8 @@ static void exynos_dsi_unbind(struct device *dev, struct device *master,
 				void *data)
 {
 	struct exynos_dsi *dsi = dev_get_drvdata(dev);
-	struct drm_encoder *encoder = &dsi->encoder;
 
-	exynos_dsi_disable(encoder);
+	exynos_dsi_disable(&dsi->bridge);
 
 	mipi_dsi_host_unregister(&dsi->dsi_host);
 }
@@ -1640,7 +1641,6 @@ static int exynos_dsi_probe(struct platform_device *pdev)
 	init_completion(&dsi->completed);
 	spin_lock_init(&dsi->transfer_lock);
 	INIT_LIST_HEAD(&dsi->transfer_list);
-	INIT_LIST_HEAD(&dsi->bridge_chain);
 
 	dsi->dsi_host.ops = &exynos_dsi_ops;
 	dsi->dsi_host.dev = dev;
@@ -1708,6 +1708,10 @@ static int exynos_dsi_probe(struct platform_device *pdev)
 
 	pm_runtime_enable(dev);
 
+	dsi->bridge.funcs = &exynos_dsi_bridge_funcs;
+	dsi->bridge.of_node = dev->of_node;
+	dsi->bridge.type = DRM_MODE_CONNECTOR_DSI;
+
 	ret = component_add(dev, &exynos_dsi_component_ops);
 	if (ret)
 		goto err_disable_runtime;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
                     ` (2 preceding siblings ...)
  2021-12-12 18:14   ` [PATCH v3 3/7] drm: exynos: dsi: Convert to bridge driver Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-13  9:57     ` Andrzej Hajda
  2021-12-12 18:14   ` [PATCH v3 5/7] drm: exynos: dsi: Switch to atomic funcs Jagan Teki
                     ` (3 subsequent siblings)
  7 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Existing driver is calling manual bridge pre_enable, enable,
disable and post_disable helpers with their enable and
disable functions.

Separate the enable code with pre_enable and enable helpers
like enable the DSI in pre_enable and set the display in enable.

Separate the disable code with disable and post_disable helpers
like disable the DSI in disable and reset the display in
post_disable.

This way the bridge functions are compatible with respective
downstream bridge and panel_bridge drivers.

Example of enable bridge function calls with panel_bridge is,

[ 2.079030] panel_bridge_pre_enable: start
[ 2.079043] panel_bridge_pre_enable: end!
[ 2.079045] exynos_dsi_atomic_pre_enable: start
[ 2.079723] exynos_dsi_atomic_pre_enable: end!
[ 2.079728] exynos_dsi_atomic_enable: start
[ 2.102500] exynos_dsi_atomic_enable: end
[ 2.146505] panel_bridge_enable: start
[ 2.148547] panel_bridge_enable: enable

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

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 1450187c1edc..07083a545948 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1377,10 +1377,9 @@ static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi)
 	}
 }
 
-static void exynos_dsi_enable(struct drm_bridge *bridge)
+static void exynos_dsi_pre_enable(struct drm_bridge *bridge)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
-	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
 	int ret;
 
 	if (dsi->state & DSIM_STATE_ENABLED)
@@ -1393,38 +1392,36 @@ static void exynos_dsi_enable(struct drm_bridge *bridge)
 	}
 
 	dsi->state |= DSIM_STATE_ENABLED;
+}
 
-	if (dsi->out_bridge)
-		funcs->pre_enable(dsi->out_bridge);
+static void exynos_dsi_enable(struct drm_bridge *bridge)
+{
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 
 	exynos_dsi_set_display_mode(bridge);
 	exynos_dsi_set_display_enable(dsi, true);
 
-	if (dsi->out_bridge)
-		funcs->enable(dsi->out_bridge);
-
 	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
+
 	return;
 }
 
 static void exynos_dsi_disable(struct drm_bridge *bridge)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
-	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
 
 	if (!(dsi->state & DSIM_STATE_ENABLED))
 		return;
 
 	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
+}
 
-	if (dsi->out_bridge)
-		funcs->disable(dsi->out_bridge);
+static void exynos_dsi_post_disable(struct drm_bridge *bridge)
+{
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 
 	exynos_dsi_set_display_enable(dsi, false);
 
-	if (dsi->out_bridge)
-		funcs->post_disable(dsi->out_bridge);
-
 	dsi->state &= ~DSIM_STATE_ENABLED;
 	pm_runtime_put_sync(dsi->dev);
 }
@@ -1438,8 +1435,10 @@ static int exynos_dsi_attach(struct drm_bridge *bridge,
 }
 
 static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
+	.pre_enable			= exynos_dsi_pre_enable,
 	.enable				= exynos_dsi_enable,
 	.disable			= exynos_dsi_disable,
+	.post_disable			= exynos_dsi_post_disable,
 	.attach				= exynos_dsi_attach,
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v3 5/7] drm: exynos: dsi: Switch to atomic funcs
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
                     ` (3 preceding siblings ...)
  2021-12-12 18:14   ` [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 6/7] drm: exynos: dsi: Get the mode from bridge Jagan Teki
                     ` (2 subsequent siblings)
  7 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

The new support drm bridges are moving towards atomic functions.

Replace atomic version of functions to continue the transition
to the atomic API.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v3:
- none

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index 07083a545948..feb36a5dc646 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1377,7 +1377,8 @@ static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi)
 	}
 }
 
-static void exynos_dsi_pre_enable(struct drm_bridge *bridge)
+static void exynos_dsi_atomic_pre_enable(struct drm_bridge *bridge,
+					 struct drm_bridge_state *old_bridge_state)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 	int ret;
@@ -1394,7 +1395,8 @@ static void exynos_dsi_pre_enable(struct drm_bridge *bridge)
 	dsi->state |= DSIM_STATE_ENABLED;
 }
 
-static void exynos_dsi_enable(struct drm_bridge *bridge)
+static void exynos_dsi_atomic_enable(struct drm_bridge *bridge,
+				    struct drm_bridge_state *old_bridge_state)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 
@@ -1406,7 +1408,8 @@ static void exynos_dsi_enable(struct drm_bridge *bridge)
 	return;
 }
 
-static void exynos_dsi_disable(struct drm_bridge *bridge)
+static void exynos_dsi_atomic_disable(struct drm_bridge *bridge,
+				      struct drm_bridge_state *old_bridge_state)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 
@@ -1416,7 +1419,8 @@ static void exynos_dsi_disable(struct drm_bridge *bridge)
 	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
 }
 
-static void exynos_dsi_post_disable(struct drm_bridge *bridge)
+static void exynos_dsi_atomic_post_disable(struct drm_bridge *bridge,
+					   struct drm_bridge_state *old_bridge_state)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 
@@ -1435,10 +1439,13 @@ static int exynos_dsi_attach(struct drm_bridge *bridge,
 }
 
 static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
-	.pre_enable			= exynos_dsi_pre_enable,
-	.enable				= exynos_dsi_enable,
-	.disable			= exynos_dsi_disable,
-	.post_disable			= exynos_dsi_post_disable,
+	.atomic_duplicate_state		= drm_atomic_helper_bridge_duplicate_state,
+	.atomic_destroy_state		= drm_atomic_helper_bridge_destroy_state,
+	.atomic_reset			= drm_atomic_helper_bridge_reset,
+	.atomic_pre_enable		= exynos_dsi_atomic_pre_enable,
+	.atomic_enable			= exynos_dsi_atomic_enable,
+	.atomic_disable			= exynos_dsi_atomic_disable,
+	.atomic_post_disable		= exynos_dsi_atomic_post_disable,
 	.attach				= exynos_dsi_attach,
 };
 
@@ -1614,7 +1621,7 @@ static void exynos_dsi_unbind(struct device *dev, struct device *master,
 {
 	struct exynos_dsi *dsi = dev_get_drvdata(dev);
 
-	exynos_dsi_disable(&dsi->bridge);
+	exynos_dsi_atomic_disable(&dsi->bridge, NULL);
 
 	mipi_dsi_host_unregister(&dsi->dsi_host);
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v3 6/7] drm: exynos: dsi: Get the mode from bridge
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
                     ` (4 preceding siblings ...)
  2021-12-12 18:14   ` [PATCH v3 5/7] drm: exynos: dsi: Switch to atomic funcs Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-12 18:14   ` [PATCH v3 7/7] drm: exynos: dsi: Move DSI init in bridge enable Jagan Teki
  2021-12-13 12:04   ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Marek Szyprowski
  7 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Now the exynos dsi driver is fully aware of bridge handling,
so get the display mode from bridge, mode_set API instead of
legacy encoder crtc.

This makes bridge usage more efficient instead of relying on
encoder stack.

Add mode_set in drm_bridge_funcs.

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

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index feb36a5dc646..a2eb82bbb30f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -278,6 +278,7 @@ struct exynos_dsi {
 	u32 format;
 
 	int state;
+	struct drm_display_mode mode;
 	struct drm_property *brightness;
 	struct completion completed;
 
@@ -882,10 +883,9 @@ static int exynos_dsi_init_link(struct exynos_dsi *dsi)
 	return 0;
 }
 
-static void exynos_dsi_set_display_mode(struct drm_bridge *bridge)
+static void exynos_dsi_set_display_mode(struct exynos_dsi *dsi)
 {
-	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
-	struct drm_display_mode *m = &bridge->encoder->crtc->state->adjusted_mode;
+	struct drm_display_mode *m = &dsi->mode;
 	unsigned int num_bits_resol = dsi->driver_data->num_bits_resol;
 	u32 reg;
 
@@ -1400,7 +1400,7 @@ static void exynos_dsi_atomic_enable(struct drm_bridge *bridge,
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
 
-	exynos_dsi_set_display_mode(bridge);
+	exynos_dsi_set_display_mode(dsi);
 	exynos_dsi_set_display_enable(dsi, true);
 
 	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
@@ -1430,6 +1430,15 @@ static void exynos_dsi_atomic_post_disable(struct drm_bridge *bridge,
 	pm_runtime_put_sync(dsi->dev);
 }
 
+static void exynos_dsi_mode_set(struct drm_bridge *bridge,
+				const struct drm_display_mode *mode,
+				const struct drm_display_mode *adjusted_mode)
+{
+	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
+
+	drm_mode_copy(&dsi->mode, adjusted_mode);
+}
+
 static int exynos_dsi_attach(struct drm_bridge *bridge,
 			     enum drm_bridge_attach_flags flags)
 {
@@ -1446,6 +1455,7 @@ static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
 	.atomic_enable			= exynos_dsi_atomic_enable,
 	.atomic_disable			= exynos_dsi_atomic_disable,
 	.atomic_post_disable		= exynos_dsi_atomic_post_disable,
+	.mode_set			= exynos_dsi_mode_set,
 	.attach				= exynos_dsi_attach,
 };
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH v3 7/7] drm: exynos: dsi: Move DSI init in bridge enable
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
                     ` (5 preceding siblings ...)
  2021-12-12 18:14   ` [PATCH v3 6/7] drm: exynos: dsi: Get the mode from bridge Jagan Teki
@ 2021-12-12 18:14   ` Jagan Teki
  2021-12-13 12:04   ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Marek Szyprowski
  7 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-12 18:14 UTC (permalink / raw)
  To: Marek Szyprowski, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, Jagan Teki, dri-devel

Host transfer in DSI master will invoke only when the DSI commands
sent from DSI devices like DSI Panel or DSI bridges and this host
transfer wouldn't invoke I2C based DSI bridge drivers.

Handling DSI host initialization in transfer calls might miss the
controller setup for I2C configured DSI bridges.

So, move the DSI initialization from transfer to bridge enable as
the bridge enable API as it is common across all classes of DSI
device drivers.

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

 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index a2eb82bbb30f..29d4eaaff5e8 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1399,6 +1399,14 @@ static void exynos_dsi_atomic_enable(struct drm_bridge *bridge,
 				    struct drm_bridge_state *old_bridge_state)
 {
 	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
+	int ret;
+
+	if (!(dsi->state & DSIM_STATE_INITIALIZED)) {
+		ret = exynos_dsi_init(dsi);
+		if (ret)
+			return;
+		dsi->state |= DSIM_STATE_INITIALIZED;
+	}
 
 	exynos_dsi_set_display_mode(dsi);
 	exynos_dsi_set_display_enable(dsi, true);
@@ -1539,13 +1547,6 @@ static ssize_t exynos_dsi_host_transfer(struct mipi_dsi_host *host,
 	if (!(dsi->state & DSIM_STATE_ENABLED))
 		return -EINVAL;
 
-	if (!(dsi->state & DSIM_STATE_INITIALIZED)) {
-		ret = exynos_dsi_init(dsi);
-		if (ret)
-			return ret;
-		dsi->state |= DSIM_STATE_INITIALIZED;
-	}
-
 	ret = mipi_dsi_create_packet(&xfer.packet, msg);
 	if (ret < 0)
 		return ret;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API
  2021-12-12 18:14   ` [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API Jagan Teki
@ 2021-12-13  9:08     ` Andrzej Hajda
  2021-12-13  9:14       ` Jagan Teki
  0 siblings, 1 reply; 23+ messages in thread
From: Andrzej Hajda @ 2021-12-13  9:08 UTC (permalink / raw)
  To: Jagan Teki, Marek Szyprowski, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, dri-devel


On 12.12.2021 19:14, Jagan Teki wrote:
> Replace the manual panel handling code by a drm panel_bridge via
> devm_drm_of_get_bridge().
>
> Adding panel_bridge handling,
>
> - Drops drm_connector and related operations as drm_bridge_attach
>    creates connector during attachment.
>
> - Drops panel pointer and iterate the bridge, so-that it can operate
>    the normal bridge and panel_bridge in constitutive callbacks.
>
> This simplifies the driver and allows all components in the display
> pipeline to be treated as bridges.
>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v3:
> - fix port number
> - add print for attached device
> Changes for v2:
> - new patch
>
>   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 165 ++++--------------------
>   1 file changed, 26 insertions(+), 139 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> index 0bb44e476633..d1039628b6f2 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> @@ -221,6 +221,11 @@ enum exynos_dsi_transfer_type {
>   	EXYNOS_DSI_RX,
>   };
>   
> +enum {
> +	DSI_PORT_IN,
> +	DSI_PORT_OUT
> +};
> +
>   struct exynos_dsi_transfer {
>   	struct list_head list;
>   	struct completion completed;
> @@ -254,8 +259,6 @@ struct exynos_dsi_driver_data {
>   struct exynos_dsi {
>   	struct drm_encoder encoder;
>   	struct mipi_dsi_host dsi_host;
> -	struct drm_connector connector;
> -	struct drm_panel *panel;
>   	struct list_head bridge_chain;
>   	struct drm_bridge *out_bridge;
>   	struct device *dev;
> @@ -285,7 +288,6 @@ struct exynos_dsi {
>   };
>   
>   #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
> -#define connector_to_dsi(c) container_of(c, struct exynos_dsi, connector)
>   
>   static inline struct exynos_dsi *encoder_to_dsi(struct drm_encoder *e)
>   {
> @@ -1391,42 +1393,21 @@ static void exynos_dsi_enable(struct drm_encoder *encoder)
>   
>   	dsi->state |= DSIM_STATE_ENABLED;
>   
> -	if (dsi->panel) {
> -		ret = drm_panel_prepare(dsi->panel);
> -		if (ret < 0)
> -			goto err_put_sync;
> -	} else {
> -		list_for_each_entry_reverse(iter, &dsi->bridge_chain,
> -					    chain_node) {
> -			if (iter->funcs->pre_enable)
> -				iter->funcs->pre_enable(iter);
> -		}
> +	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
> +		if (iter->funcs->pre_enable)
> +			iter->funcs->pre_enable(iter);
>   	}
>   
>   	exynos_dsi_set_display_mode(dsi);
>   	exynos_dsi_set_display_enable(dsi, true);
>   
> -	if (dsi->panel) {
> -		ret = drm_panel_enable(dsi->panel);
> -		if (ret < 0)
> -			goto err_display_disable;
> -	} else {
> -		list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> -			if (iter->funcs->enable)
> -				iter->funcs->enable(iter);
> -		}
> +	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> +		if (iter->funcs->enable)
> +			iter->funcs->enable(iter);
>   	}
>   
>   	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
>   	return;
> -
> -err_display_disable:
> -	exynos_dsi_set_display_enable(dsi, false);
> -	drm_panel_unprepare(dsi->panel);
> -
> -err_put_sync:
> -	dsi->state &= ~DSIM_STATE_ENABLED;
> -	pm_runtime_put(dsi->dev);
>   }
>   
>   static void exynos_dsi_disable(struct drm_encoder *encoder)
> @@ -1439,17 +1420,12 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
>   
>   	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
>   
> -	if (dsi->panel)
> -		drm_panel_disable(dsi->panel);
> -
>   	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
>   		if (iter->funcs->disable)
>   			iter->funcs->disable(iter);
>   	}
>   
>   	exynos_dsi_set_display_enable(dsi, false);
> -	if (dsi->panel)
> -		drm_panel_unprepare(dsi->panel);
>   
>   	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
>   		if (iter->funcs->post_disable)
> @@ -1460,70 +1436,6 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
>   	pm_runtime_put_sync(dsi->dev);
>   }
>   
> -static enum drm_connector_status
> -exynos_dsi_detect(struct drm_connector *connector, bool force)
> -{
> -	return connector->status;
> -}
> -
> -static void exynos_dsi_connector_destroy(struct drm_connector *connector)
> -{
> -	drm_connector_unregister(connector);
> -	drm_connector_cleanup(connector);
> -	connector->dev = NULL;
> -}
> -
> -static const struct drm_connector_funcs exynos_dsi_connector_funcs = {
> -	.detect = exynos_dsi_detect,
> -	.fill_modes = drm_helper_probe_single_connector_modes,
> -	.destroy = exynos_dsi_connector_destroy,
> -	.reset = drm_atomic_helper_connector_reset,
> -	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> -	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> -};
> -
> -static int exynos_dsi_get_modes(struct drm_connector *connector)
> -{
> -	struct exynos_dsi *dsi = connector_to_dsi(connector);
> -
> -	if (dsi->panel)
> -		return drm_panel_get_modes(dsi->panel, connector);
> -
> -	return 0;
> -}
> -
> -static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
> -	.get_modes = exynos_dsi_get_modes,
> -};
> -
> -static int exynos_dsi_create_connector(struct drm_encoder *encoder)
> -{
> -	struct exynos_dsi *dsi = encoder_to_dsi(encoder);
> -	struct drm_connector *connector = &dsi->connector;
> -	struct drm_device *drm = encoder->dev;
> -	int ret;
> -
> -	connector->polled = DRM_CONNECTOR_POLL_HPD;
> -
> -	ret = drm_connector_init(drm, connector, &exynos_dsi_connector_funcs,
> -				 DRM_MODE_CONNECTOR_DSI);
> -	if (ret) {
> -		DRM_DEV_ERROR(dsi->dev,
> -			      "Failed to initialize connector with drm\n");
> -		return ret;
> -	}
> -
> -	connector->status = connector_status_disconnected;
> -	drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs);
> -	drm_connector_attach_encoder(connector, encoder);
> -	if (!drm->registered)
> -		return 0;
> -
> -	connector->funcs->reset(connector);
> -	drm_connector_register(connector);
> -	return 0;
> -}
> -
>   static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
>   	.enable = exynos_dsi_enable,
>   	.disable = exynos_dsi_disable,
> @@ -1537,31 +1449,20 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
>   	struct exynos_dsi *dsi = host_to_dsi(host);
>   	struct drm_encoder *encoder = &dsi->encoder;
>   	struct drm_device *drm = encoder->dev;
> -	struct drm_bridge *out_bridge;
> -
> -	out_bridge  = of_drm_find_bridge(device->dev.of_node);
> -	if (out_bridge) {
> -		drm_bridge_attach(encoder, out_bridge, NULL, 0);
> -		dsi->out_bridge = out_bridge;
> -		list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
> -	} else {
> -		int ret = exynos_dsi_create_connector(encoder);
> -
> -		if (ret) {
> -			DRM_DEV_ERROR(dsi->dev,
> -				      "failed to create connector ret = %d\n",
> -				      ret);
> -			drm_encoder_cleanup(encoder);
> -			return ret;
> -		}
> +	int ret;
>   
> -		dsi->panel = of_drm_find_panel(device->dev.of_node);
> -		if (IS_ERR(dsi->panel))
> -			dsi->panel = NULL;
> -		else
> -			dsi->connector.status = connector_status_connected;
> +	dsi->out_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, DSI_PORT_OUT, 0);
> +	if (IS_ERR(dsi->out_bridge)) {
> +		ret = PTR_ERR(dsi->out_bridge);
> +		DRM_DEV_ERROR(dsi->dev, "failed to find the bridge: %d\n", ret);
> +		return ret;
>   	}
>   
> +	DRM_DEV_INFO(dsi->dev, "Attached %s device\n", device->name);
> +
> +	drm_bridge_attach(encoder, dsi->out_bridge, NULL, 0);
> +	list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
> +
>   	/*
>   	 * This is a temporary solution and should be made by more generic way.
>   	 *
> @@ -1569,7 +1470,7 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
>   	 * TE interrupt handler.
>   	 */
>   	if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) {
> -		int ret = exynos_dsi_register_te_irq(dsi, &device->dev);
> +		ret = exynos_dsi_register_te_irq(dsi, &device->dev);
>   		if (ret)
>   			return ret;
>   	}
> @@ -1596,18 +1497,9 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host,
>   	struct exynos_dsi *dsi = host_to_dsi(host);
>   	struct drm_device *drm = dsi->encoder.dev;
>   
> -	if (dsi->panel) {
> -		mutex_lock(&drm->mode_config.mutex);
> -		exynos_dsi_disable(&dsi->encoder);
> -		dsi->panel = NULL;
> -		dsi->connector.status = connector_status_disconnected;
> -		mutex_unlock(&drm->mode_config.mutex);
> -	} else {
> -		if (dsi->out_bridge->funcs->detach)
> -			dsi->out_bridge->funcs->detach(dsi->out_bridge);
> -		dsi->out_bridge = NULL;
> -		INIT_LIST_HEAD(&dsi->bridge_chain);
> -	}
> +	if (dsi->out_bridge->funcs->detach)
> +		dsi->out_bridge->funcs->detach(dsi->out_bridge);
> +	INIT_LIST_HEAD(&dsi->bridge_chain);


This is fishy. Currently the only bridge used with exynos_dsi (tc358764) 
on detach callback unregisters/puts the connector it has created.

With this code panel_bridge on detach will call drm_connector_cleanup, 
which will WARN about unregistered connector - ie it assumes detach 
should be called at least AFTER unregistration of exynos_drm device (???).

Since panel/bridge unbind in general case is not handled properly maybe 
it is not an issue :)


Regards

Andrzej


>   
>   	if (drm->mode_config.poll_enabled)
>   		drm_kms_helper_hotplug_event(drm);
> @@ -1663,11 +1555,6 @@ static int exynos_dsi_of_read_u32(const struct device_node *np,
>   	return ret;
>   }
>   
> -enum {
> -	DSI_PORT_IN,
> -	DSI_PORT_OUT
> -};
> -
>   static int exynos_dsi_parse_dt(struct exynos_dsi *dsi)
>   {
>   	struct device *dev = dsi->dev;

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API
  2021-12-13  9:08     ` Andrzej Hajda
@ 2021-12-13  9:14       ` Jagan Teki
  0 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-13  9:14 UTC (permalink / raw)
  To: Andrzej Hajda
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Michael Nazzareno Trimarchi, Sam Ravnborg,
	Marek Szyprowski

Hi Andrzej,

On Mon, Dec 13, 2021 at 2:39 PM Andrzej Hajda <andrzej.hajda@intel.com> wrote:
>
>
> On 12.12.2021 19:14, Jagan Teki wrote:
> > Replace the manual panel handling code by a drm panel_bridge via
> > devm_drm_of_get_bridge().
> >
> > Adding panel_bridge handling,
> >
> > - Drops drm_connector and related operations as drm_bridge_attach
> >    creates connector during attachment.
> >
> > - Drops panel pointer and iterate the bridge, so-that it can operate
> >    the normal bridge and panel_bridge in constitutive callbacks.
> >
> > This simplifies the driver and allows all components in the display
> > pipeline to be treated as bridges.
> >
> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> > ---
> > Changes for v3:
> > - fix port number
> > - add print for attached device
> > Changes for v2:
> > - new patch
> >
> >   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 165 ++++--------------------
> >   1 file changed, 26 insertions(+), 139 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > index 0bb44e476633..d1039628b6f2 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > @@ -221,6 +221,11 @@ enum exynos_dsi_transfer_type {
> >       EXYNOS_DSI_RX,
> >   };
> >
> > +enum {
> > +     DSI_PORT_IN,
> > +     DSI_PORT_OUT
> > +};
> > +
> >   struct exynos_dsi_transfer {
> >       struct list_head list;
> >       struct completion completed;
> > @@ -254,8 +259,6 @@ struct exynos_dsi_driver_data {
> >   struct exynos_dsi {
> >       struct drm_encoder encoder;
> >       struct mipi_dsi_host dsi_host;
> > -     struct drm_connector connector;
> > -     struct drm_panel *panel;
> >       struct list_head bridge_chain;
> >       struct drm_bridge *out_bridge;
> >       struct device *dev;
> > @@ -285,7 +288,6 @@ struct exynos_dsi {
> >   };
> >
> >   #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
> > -#define connector_to_dsi(c) container_of(c, struct exynos_dsi, connector)
> >
> >   static inline struct exynos_dsi *encoder_to_dsi(struct drm_encoder *e)
> >   {
> > @@ -1391,42 +1393,21 @@ static void exynos_dsi_enable(struct drm_encoder *encoder)
> >
> >       dsi->state |= DSIM_STATE_ENABLED;
> >
> > -     if (dsi->panel) {
> > -             ret = drm_panel_prepare(dsi->panel);
> > -             if (ret < 0)
> > -                     goto err_put_sync;
> > -     } else {
> > -             list_for_each_entry_reverse(iter, &dsi->bridge_chain,
> > -                                         chain_node) {
> > -                     if (iter->funcs->pre_enable)
> > -                             iter->funcs->pre_enable(iter);
> > -             }
> > +     list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
> > +             if (iter->funcs->pre_enable)
> > +                     iter->funcs->pre_enable(iter);
> >       }
> >
> >       exynos_dsi_set_display_mode(dsi);
> >       exynos_dsi_set_display_enable(dsi, true);
> >
> > -     if (dsi->panel) {
> > -             ret = drm_panel_enable(dsi->panel);
> > -             if (ret < 0)
> > -                     goto err_display_disable;
> > -     } else {
> > -             list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> > -                     if (iter->funcs->enable)
> > -                             iter->funcs->enable(iter);
> > -             }
> > +     list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> > +             if (iter->funcs->enable)
> > +                     iter->funcs->enable(iter);
> >       }
> >
> >       dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
> >       return;
> > -
> > -err_display_disable:
> > -     exynos_dsi_set_display_enable(dsi, false);
> > -     drm_panel_unprepare(dsi->panel);
> > -
> > -err_put_sync:
> > -     dsi->state &= ~DSIM_STATE_ENABLED;
> > -     pm_runtime_put(dsi->dev);
> >   }
> >
> >   static void exynos_dsi_disable(struct drm_encoder *encoder)
> > @@ -1439,17 +1420,12 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
> >
> >       dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
> >
> > -     if (dsi->panel)
> > -             drm_panel_disable(dsi->panel);
> > -
> >       list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
> >               if (iter->funcs->disable)
> >                       iter->funcs->disable(iter);
> >       }
> >
> >       exynos_dsi_set_display_enable(dsi, false);
> > -     if (dsi->panel)
> > -             drm_panel_unprepare(dsi->panel);
> >
> >       list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> >               if (iter->funcs->post_disable)
> > @@ -1460,70 +1436,6 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
> >       pm_runtime_put_sync(dsi->dev);
> >   }
> >
> > -static enum drm_connector_status
> > -exynos_dsi_detect(struct drm_connector *connector, bool force)
> > -{
> > -     return connector->status;
> > -}
> > -
> > -static void exynos_dsi_connector_destroy(struct drm_connector *connector)
> > -{
> > -     drm_connector_unregister(connector);
> > -     drm_connector_cleanup(connector);
> > -     connector->dev = NULL;
> > -}
> > -
> > -static const struct drm_connector_funcs exynos_dsi_connector_funcs = {
> > -     .detect = exynos_dsi_detect,
> > -     .fill_modes = drm_helper_probe_single_connector_modes,
> > -     .destroy = exynos_dsi_connector_destroy,
> > -     .reset = drm_atomic_helper_connector_reset,
> > -     .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
> > -     .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
> > -};
> > -
> > -static int exynos_dsi_get_modes(struct drm_connector *connector)
> > -{
> > -     struct exynos_dsi *dsi = connector_to_dsi(connector);
> > -
> > -     if (dsi->panel)
> > -             return drm_panel_get_modes(dsi->panel, connector);
> > -
> > -     return 0;
> > -}
> > -
> > -static const struct drm_connector_helper_funcs exynos_dsi_connector_helper_funcs = {
> > -     .get_modes = exynos_dsi_get_modes,
> > -};
> > -
> > -static int exynos_dsi_create_connector(struct drm_encoder *encoder)
> > -{
> > -     struct exynos_dsi *dsi = encoder_to_dsi(encoder);
> > -     struct drm_connector *connector = &dsi->connector;
> > -     struct drm_device *drm = encoder->dev;
> > -     int ret;
> > -
> > -     connector->polled = DRM_CONNECTOR_POLL_HPD;
> > -
> > -     ret = drm_connector_init(drm, connector, &exynos_dsi_connector_funcs,
> > -                              DRM_MODE_CONNECTOR_DSI);
> > -     if (ret) {
> > -             DRM_DEV_ERROR(dsi->dev,
> > -                           "Failed to initialize connector with drm\n");
> > -             return ret;
> > -     }
> > -
> > -     connector->status = connector_status_disconnected;
> > -     drm_connector_helper_add(connector, &exynos_dsi_connector_helper_funcs);
> > -     drm_connector_attach_encoder(connector, encoder);
> > -     if (!drm->registered)
> > -             return 0;
> > -
> > -     connector->funcs->reset(connector);
> > -     drm_connector_register(connector);
> > -     return 0;
> > -}
> > -
> >   static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
> >       .enable = exynos_dsi_enable,
> >       .disable = exynos_dsi_disable,
> > @@ -1537,31 +1449,20 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
> >       struct exynos_dsi *dsi = host_to_dsi(host);
> >       struct drm_encoder *encoder = &dsi->encoder;
> >       struct drm_device *drm = encoder->dev;
> > -     struct drm_bridge *out_bridge;
> > -
> > -     out_bridge  = of_drm_find_bridge(device->dev.of_node);
> > -     if (out_bridge) {
> > -             drm_bridge_attach(encoder, out_bridge, NULL, 0);
> > -             dsi->out_bridge = out_bridge;
> > -             list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
> > -     } else {
> > -             int ret = exynos_dsi_create_connector(encoder);
> > -
> > -             if (ret) {
> > -                     DRM_DEV_ERROR(dsi->dev,
> > -                                   "failed to create connector ret = %d\n",
> > -                                   ret);
> > -                     drm_encoder_cleanup(encoder);
> > -                     return ret;
> > -             }
> > +     int ret;
> >
> > -             dsi->panel = of_drm_find_panel(device->dev.of_node);
> > -             if (IS_ERR(dsi->panel))
> > -                     dsi->panel = NULL;
> > -             else
> > -                     dsi->connector.status = connector_status_connected;
> > +     dsi->out_bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, DSI_PORT_OUT, 0);
> > +     if (IS_ERR(dsi->out_bridge)) {
> > +             ret = PTR_ERR(dsi->out_bridge);
> > +             DRM_DEV_ERROR(dsi->dev, "failed to find the bridge: %d\n", ret);
> > +             return ret;
> >       }
> >
> > +     DRM_DEV_INFO(dsi->dev, "Attached %s device\n", device->name);
> > +
> > +     drm_bridge_attach(encoder, dsi->out_bridge, NULL, 0);
> > +     list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
> > +
> >       /*
> >        * This is a temporary solution and should be made by more generic way.
> >        *
> > @@ -1569,7 +1470,7 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
> >        * TE interrupt handler.
> >        */
> >       if (!(device->mode_flags & MIPI_DSI_MODE_VIDEO)) {
> > -             int ret = exynos_dsi_register_te_irq(dsi, &device->dev);
> > +             ret = exynos_dsi_register_te_irq(dsi, &device->dev);
> >               if (ret)
> >                       return ret;
> >       }
> > @@ -1596,18 +1497,9 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host,
> >       struct exynos_dsi *dsi = host_to_dsi(host);
> >       struct drm_device *drm = dsi->encoder.dev;
> >
> > -     if (dsi->panel) {
> > -             mutex_lock(&drm->mode_config.mutex);
> > -             exynos_dsi_disable(&dsi->encoder);
> > -             dsi->panel = NULL;
> > -             dsi->connector.status = connector_status_disconnected;
> > -             mutex_unlock(&drm->mode_config.mutex);
> > -     } else {
> > -             if (dsi->out_bridge->funcs->detach)
> > -                     dsi->out_bridge->funcs->detach(dsi->out_bridge);
> > -             dsi->out_bridge = NULL;
> > -             INIT_LIST_HEAD(&dsi->bridge_chain);
> > -     }
> > +     if (dsi->out_bridge->funcs->detach)
> > +             dsi->out_bridge->funcs->detach(dsi->out_bridge);
> > +     INIT_LIST_HEAD(&dsi->bridge_chain);
>
>
> This is fishy. Currently the only bridge used with exynos_dsi (tc358764)
> on detach callback unregisters/puts the connector it has created.

I have a patch to drop the existing connector and add panel_bridge for
tc358764. I believe this solve the connector stuff.

>
> With this code panel_bridge on detach will call drm_connector_cleanup,
> which will WARN about unregistered connector - ie it assumes detach
> should be called at least AFTER unregistration of exynos_drm device (???).

Same will sort out if downstream bridge has panel_bridge conversation i think.

>
> Since panel/bridge unbind in general case is not handled properly maybe
> it is not an issue :)

i.e what I belive.

Jagan.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 3/7] drm: exynos: dsi: Convert to bridge driver
  2021-12-12 18:14   ` [PATCH v3 3/7] drm: exynos: dsi: Convert to bridge driver Jagan Teki
@ 2021-12-13  9:34     ` Andrzej Hajda
  0 siblings, 0 replies; 23+ messages in thread
From: Andrzej Hajda @ 2021-12-13  9:34 UTC (permalink / raw)
  To: Jagan Teki, Marek Szyprowski, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, dri-devel


On 12.12.2021 19:14, Jagan Teki wrote:
> Convert the encoders to bridge drivers in order to standardize on
> a single API with built-in dumb encoder support for compatibility
> with existing component drivers.
>
> Driver bridge conversion will help to reuse the same bridge on
> different platforms as exynos dsi driver can be used as a Samsung
> DSIM and use it for i.MX8MM platform.
>
> Bridge conversion,
>
> - Drops drm_encoder_helper_funcs,
> bridge_chain.


I wonder how it will behave on setup with two bridges after exynos_dsi.


>
> - Adds drm_bridge_funcs and register a drm bridge.
>
> Convert it.
>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v3:
> - move bridge add in host_attach
> - move bridge remove in host_detach
> - use flags, bridge in drm_bridge_attach in attch
> Changes for v2:
> - drop bridge_chain
>
>   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 82 +++++++++++++------------
>   1 file changed, 43 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> index d1039628b6f2..1450187c1edc 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> @@ -259,7 +259,7 @@ struct exynos_dsi_driver_data {
>   struct exynos_dsi {
>   	struct drm_encoder encoder;
>   	struct mipi_dsi_host dsi_host;
> -	struct list_head bridge_chain;
> +	struct drm_bridge bridge;
>   	struct drm_bridge *out_bridge;
>   	struct device *dev;
>   
> @@ -289,9 +289,9 @@ struct exynos_dsi {
>   
>   #define host_to_dsi(host) container_of(host, struct exynos_dsi, dsi_host)
>   
> -static inline struct exynos_dsi *encoder_to_dsi(struct drm_encoder *e)
> +static inline struct exynos_dsi *bridge_to_dsi(struct drm_bridge *b)
>   {
> -	return container_of(e, struct exynos_dsi, encoder);
> +	return container_of(b, struct exynos_dsi, bridge);
>   }
>   
>   enum reg_idx {
> @@ -882,9 +882,10 @@ static int exynos_dsi_init_link(struct exynos_dsi *dsi)
>   	return 0;
>   }
>   
> -static void exynos_dsi_set_display_mode(struct exynos_dsi *dsi)
> +static void exynos_dsi_set_display_mode(struct drm_bridge *bridge)
>   {
> -	struct drm_display_mode *m = &dsi->encoder.crtc->state->adjusted_mode;
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> +	struct drm_display_mode *m = &bridge->encoder->crtc->state->adjusted_mode;
>   	unsigned int num_bits_resol = dsi->driver_data->num_bits_resol;
>   	u32 reg;
>   
> @@ -1376,10 +1377,10 @@ static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi)
>   	}
>   }
>   
> -static void exynos_dsi_enable(struct drm_encoder *encoder)
> +static void exynos_dsi_enable(struct drm_bridge *bridge)
>   {
> -	struct exynos_dsi *dsi = encoder_to_dsi(encoder);
> -	struct drm_bridge *iter;
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> +	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;


It will blow up in case there is no dsi->out_bridge, the same case in 
code below.

Beside this the conversion looks quite well, I hope tests will pass well :)


Regards

Andrzej



>   	int ret;
>   
>   	if (dsi->state & DSIM_STATE_ENABLED)
> @@ -1393,52 +1394,53 @@ static void exynos_dsi_enable(struct drm_encoder *encoder)
>   
>   	dsi->state |= DSIM_STATE_ENABLED;
>   
> -	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
> -		if (iter->funcs->pre_enable)
> -			iter->funcs->pre_enable(iter);
> -	}
> +	if (dsi->out_bridge)
> +		funcs->pre_enable(dsi->out_bridge);
>   
> -	exynos_dsi_set_display_mode(dsi);
> +	exynos_dsi_set_display_mode(bridge);
>   	exynos_dsi_set_display_enable(dsi, true);
>   
> -	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> -		if (iter->funcs->enable)
> -			iter->funcs->enable(iter);
> -	}
> +	if (dsi->out_bridge)
> +		funcs->enable(dsi->out_bridge);
>   
>   	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
>   	return;
>   }
>   
> -static void exynos_dsi_disable(struct drm_encoder *encoder)
> +static void exynos_dsi_disable(struct drm_bridge *bridge)
>   {
> -	struct exynos_dsi *dsi = encoder_to_dsi(encoder);
> -	struct drm_bridge *iter;
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> +	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
>   
>   	if (!(dsi->state & DSIM_STATE_ENABLED))
>   		return;
>   
>   	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
>   
> -	list_for_each_entry_reverse(iter, &dsi->bridge_chain, chain_node) {
> -		if (iter->funcs->disable)
> -			iter->funcs->disable(iter);
> -	}
> +	if (dsi->out_bridge)
> +		funcs->disable(dsi->out_bridge);
>   
>   	exynos_dsi_set_display_enable(dsi, false);
>   
> -	list_for_each_entry(iter, &dsi->bridge_chain, chain_node) {
> -		if (iter->funcs->post_disable)
> -			iter->funcs->post_disable(iter);
> -	}
> +	if (dsi->out_bridge)
> +		funcs->post_disable(dsi->out_bridge);
>   
>   	dsi->state &= ~DSIM_STATE_ENABLED;
>   	pm_runtime_put_sync(dsi->dev);
>   }
>   
> -static const struct drm_encoder_helper_funcs exynos_dsi_encoder_helper_funcs = {
> -	.enable = exynos_dsi_enable,
> -	.disable = exynos_dsi_disable,
> +static int exynos_dsi_attach(struct drm_bridge *bridge,
> +			     enum drm_bridge_attach_flags flags)
> +{
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> +
> +	return drm_bridge_attach(bridge->encoder, dsi->out_bridge, bridge, flags);
> +}
> +
> +static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
> +	.enable				= exynos_dsi_enable,
> +	.disable			= exynos_dsi_disable,
> +	.attach				= exynos_dsi_attach,
>   };
>   
>   MODULE_DEVICE_TABLE(of, exynos_dsi_of_match);
> @@ -1460,8 +1462,9 @@ static int exynos_dsi_host_attach(struct mipi_dsi_host *host,
>   
>   	DRM_DEV_INFO(dsi->dev, "Attached %s device\n", device->name);
>   
> -	drm_bridge_attach(encoder, dsi->out_bridge, NULL, 0);
> -	list_splice_init(&encoder->bridge_chain, &dsi->bridge_chain);
> +	drm_bridge_add(&dsi->bridge);
> +
> +	drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
>   
>   	/*
>   	 * This is a temporary solution and should be made by more generic way.
> @@ -1499,13 +1502,14 @@ static int exynos_dsi_host_detach(struct mipi_dsi_host *host,
>   
>   	if (dsi->out_bridge->funcs->detach)
>   		dsi->out_bridge->funcs->detach(dsi->out_bridge);
> -	INIT_LIST_HEAD(&dsi->bridge_chain);
>   
>   	if (drm->mode_config.poll_enabled)
>   		drm_kms_helper_hotplug_event(drm);
>   
>   	exynos_dsi_unregister_te_irq(dsi);
>   
> +	drm_bridge_remove(&dsi->bridge);
> +
>   	return 0;
>   }
>   
> @@ -1591,8 +1595,6 @@ static int exynos_dsi_bind(struct device *dev, struct device *master,
>   
>   	drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_TMDS);
>   
> -	drm_encoder_helper_add(encoder, &exynos_dsi_encoder_helper_funcs);
> -
>   	ret = exynos_drm_set_possible_crtcs(encoder, EXYNOS_DISPLAY_TYPE_LCD);
>   	if (ret < 0)
>   		return ret;
> @@ -1612,9 +1614,8 @@ static void exynos_dsi_unbind(struct device *dev, struct device *master,
>   				void *data)
>   {
>   	struct exynos_dsi *dsi = dev_get_drvdata(dev);
> -	struct drm_encoder *encoder = &dsi->encoder;
>   
> -	exynos_dsi_disable(encoder);
> +	exynos_dsi_disable(&dsi->bridge);
>   
>   	mipi_dsi_host_unregister(&dsi->dsi_host);
>   }
> @@ -1640,7 +1641,6 @@ static int exynos_dsi_probe(struct platform_device *pdev)
>   	init_completion(&dsi->completed);
>   	spin_lock_init(&dsi->transfer_lock);
>   	INIT_LIST_HEAD(&dsi->transfer_list);
> -	INIT_LIST_HEAD(&dsi->bridge_chain);
>   
>   	dsi->dsi_host.ops = &exynos_dsi_ops;
>   	dsi->dsi_host.dev = dev;
> @@ -1708,6 +1708,10 @@ static int exynos_dsi_probe(struct platform_device *pdev)
>   
>   	pm_runtime_enable(dev);
>   
> +	dsi->bridge.funcs = &exynos_dsi_bridge_funcs;
> +	dsi->bridge.of_node = dev->of_node;
> +	dsi->bridge.type = DRM_MODE_CONNECTOR_DSI;
> +
>   	ret = component_add(dev, &exynos_dsi_component_ops);
>   	if (ret)
>   		goto err_disable_runtime;

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code
  2021-12-12 18:14   ` [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code Jagan Teki
@ 2021-12-13  9:57     ` Andrzej Hajda
  2021-12-14 19:01       ` Jagan Teki
  0 siblings, 1 reply; 23+ messages in thread
From: Andrzej Hajda @ 2021-12-13  9:57 UTC (permalink / raw)
  To: Jagan Teki, Marek Szyprowski, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, dri-devel


On 12.12.2021 19:14, Jagan Teki wrote:
> Existing driver is calling manual bridge pre_enable, enable,
> disable and post_disable helpers with their enable and
> disable functions.
>
> Separate the enable code with pre_enable and enable helpers
> like enable the DSI in pre_enable and set the display in enable.
>
> Separate the disable code with disable and post_disable helpers
> like disable the DSI in disable and reset the display in
> post_disable.
>
> This way the bridge functions are compatible with respective
> downstream bridge and panel_bridge drivers.
>
> Example of enable bridge function calls with panel_bridge is,
>
> [ 2.079030] panel_bridge_pre_enable: start
> [ 2.079043] panel_bridge_pre_enable: end!
> [ 2.079045] exynos_dsi_atomic_pre_enable: start
> [ 2.079723] exynos_dsi_atomic_pre_enable: end!
> [ 2.079728] exynos_dsi_atomic_enable: start
> [ 2.102500] exynos_dsi_atomic_enable: end
> [ 2.146505] panel_bridge_enable: start
> [ 2.148547] panel_bridge_enable: enable
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v3:
> - new patch
>
>   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 25 ++++++++++++-------------
>   1 file changed, 12 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> index 1450187c1edc..07083a545948 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> @@ -1377,10 +1377,9 @@ static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi)
>   	}
>   }
>   
> -static void exynos_dsi_enable(struct drm_bridge *bridge)
> +static void exynos_dsi_pre_enable(struct drm_bridge *bridge)
>   {
>   	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> -	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
>   	int ret;
>   
>   	if (dsi->state & DSIM_STATE_ENABLED)
> @@ -1393,38 +1392,36 @@ static void exynos_dsi_enable(struct drm_bridge *bridge)
>   	}
>   
>   	dsi->state |= DSIM_STATE_ENABLED;
> +}
>   
> -	if (dsi->out_bridge)
> -		funcs->pre_enable(dsi->out_bridge);
> +static void exynos_dsi_enable(struct drm_bridge *bridge)
> +{
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
>   
>   	exynos_dsi_set_display_mode(bridge);
>   	exynos_dsi_set_display_enable(dsi, true);
>   
> -	if (dsi->out_bridge)
> -		funcs->enable(dsi->out_bridge);
> -


Ok, apparently I haven't catch that in previous patch you have left out 
bridge attached to encoder->bridge_chain, before the previous patch out 
bridge was detached from bridge_chain, which assured exynos_dsi has full 
control about callbacks.

Does it mean that after prev patch all bridge calls were called twice, I 
think it is incorrect.


Regards

Andrzej



>   	dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
> +
>   	return;
>   }
>   
>   static void exynos_dsi_disable(struct drm_bridge *bridge)
>   {
>   	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> -	const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
>   
>   	if (!(dsi->state & DSIM_STATE_ENABLED))
>   		return;
>   
>   	dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
> +}
>   
> -	if (dsi->out_bridge)
> -		funcs->disable(dsi->out_bridge);
> +static void exynos_dsi_post_disable(struct drm_bridge *bridge)
> +{
> +	struct exynos_dsi *dsi = bridge_to_dsi(bridge);
>   
>   	exynos_dsi_set_display_enable(dsi, false);
>   
> -	if (dsi->out_bridge)
> -		funcs->post_disable(dsi->out_bridge);
> -
>   	dsi->state &= ~DSIM_STATE_ENABLED;
>   	pm_runtime_put_sync(dsi->dev);
>   }
> @@ -1438,8 +1435,10 @@ static int exynos_dsi_attach(struct drm_bridge *bridge,
>   }
>   
>   static const struct drm_bridge_funcs exynos_dsi_bridge_funcs = {
> +	.pre_enable			= exynos_dsi_pre_enable,
>   	.enable				= exynos_dsi_enable,
>   	.disable			= exynos_dsi_disable,
> +	.post_disable			= exynos_dsi_post_disable,
>   	.attach				= exynos_dsi_attach,
>   };
>   

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
                     ` (6 preceding siblings ...)
  2021-12-12 18:14   ` [PATCH v3 7/7] drm: exynos: dsi: Move DSI init in bridge enable Jagan Teki
@ 2021-12-13 12:04   ` Marek Szyprowski
  2021-12-13 12:08     ` Jagan Teki
  7 siblings, 1 reply; 23+ messages in thread
From: Marek Szyprowski @ 2021-12-13 12:04 UTC (permalink / raw)
  To: Jagan Teki, Andrzej Hajda, Neil Armstrong, Robert Foss,
	Laurent Pinchart, Sam Ravnborg, Michael Nazzareno Trimarchi,
	Inki Dae
  Cc: linux-amarula, dri-devel

Dear Jagan,

On 12.12.2021 19:14, Jagan Teki wrote:
> Updated series about drm bridge conversion of exynos dsi.
>
> Patch 1: panel checker
>
> Patch 2: panel_bridge API
>
> Patch 3: Bridge conversion
>
> Patch 4: pree_enable, post_disable
>
> Patch 5: Atomic functions
>
> Patch 6: atomic_set
>
> Patch 7: DSI init in enable
>
> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
>
> Any inputs?

I've checked this patchset on Exynos based Trats2 board (the one with 
simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI 
panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm: 
exynos: dsi: Use drm panel_bridge API"):

# dmesg | grep drm
[    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA 
mapping operations
[    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops 
fimd_component_ops)
[    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops 
exynos_dsi_component_ops)
[    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
[    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on 
minor 0
[    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach] 
*ERROR* failed to find the bridge: -19
[    2.653553] [drm] Initialized lima 1.1.0 20191231 for 13000000.gpu on 
minor 1

# ./modetest -c -Mexynos
Connectors:
id      encoder status          name            size (mm) modes   encoders

Applying the whole patchset doesn't fix anything.


> Jagan.
>
> Jagan Teki (7):
>    drm: exynos: dsi: Check panel for panel helpers
>    drm: exynos: dsi: Use drm panel_bridge API
>    drm: exynos: dsi: Convert to bridge driver
>    drm: exynos: dsi: Separate pre_enable, post_disable code
>    drm: exynos: dsi: Switch to atomic funcs
>    drm: exynos: dsi: Get the mode from bridge
>    drm: exynos: dsi: Move DSI init in bridge enable
>
>   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 240 ++++++++----------------
>   1 file changed, 75 insertions(+), 165 deletions(-)
>
Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 12:04   ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Marek Szyprowski
@ 2021-12-13 12:08     ` Jagan Teki
  2021-12-13 12:12       ` Marek Szyprowski
  0 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-13 12:08 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Marek,

On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>
> Dear Jagan,
>
> On 12.12.2021 19:14, Jagan Teki wrote:
> > Updated series about drm bridge conversion of exynos dsi.
> >
> > Patch 1: panel checker
> >
> > Patch 2: panel_bridge API
> >
> > Patch 3: Bridge conversion
> >
> > Patch 4: pree_enable, post_disable
> >
> > Patch 5: Atomic functions
> >
> > Patch 6: atomic_set
> >
> > Patch 7: DSI init in enable
> >
> > [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
> >
> > Any inputs?
>
> I've checked this patchset on Exynos based Trats2 board (the one with
> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
> exynos: dsi: Use drm panel_bridge API"):
>
> # dmesg | grep drm
> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
> mapping operations
> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> fimd_component_ops)
> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> exynos_dsi_component_ops)
> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> minor 0
> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
> *ERROR* failed to find the bridge: -19

Look like you have missed to apply the Child lookup patch. is it so?

Let me send it, I will CC you as well. And I will also send tc358764
panel_bridge conversion.

Thanks,
Jagan.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 12:08     ` Jagan Teki
@ 2021-12-13 12:12       ` Marek Szyprowski
  2021-12-13 12:31         ` Jagan Teki
  0 siblings, 1 reply; 23+ messages in thread
From: Marek Szyprowski @ 2021-12-13 12:12 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Jagan,

On 13.12.2021 13:08, Jagan Teki wrote:
> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
>> On 12.12.2021 19:14, Jagan Teki wrote:
>>> Updated series about drm bridge conversion of exynos dsi.
>>>
>>> Patch 1: panel checker
>>>
>>> Patch 2: panel_bridge API
>>>
>>> Patch 3: Bridge conversion
>>>
>>> Patch 4: pree_enable, post_disable
>>>
>>> Patch 5: Atomic functions
>>>
>>> Patch 6: atomic_set
>>>
>>> Patch 7: DSI init in enable
>>>
>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
>>>
>>> Any inputs?
>> I've checked this patchset on Exynos based Trats2 board (the one with
>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
>> exynos: dsi: Use drm panel_bridge API"):
>>
>> # dmesg | grep drm
>> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
>> mapping operations
>> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
>> fimd_component_ops)
>> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
>> exynos_dsi_component_ops)
>> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
>> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
>> minor 0
>> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
>> *ERROR* failed to find the bridge: -19
> Look like you have missed to apply the Child lookup patch. is it so?
>
> Let me send it, I will CC you as well. And I will also send tc358764
> panel_bridge conversion.

The above log is from Trats2 board, which uses only the s6e8aa0 DSI 
panel. I've also checked the Arndale board, which has tc358764 bridge 
and it also doesn't work. Which patches I have to apply for the tests?

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 12:12       ` Marek Szyprowski
@ 2021-12-13 12:31         ` Jagan Teki
  2021-12-13 13:21           ` Marek Szyprowski
  0 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-13 12:31 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Marek,

On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>
> Hi Jagan,
>
> On 13.12.2021 13:08, Jagan Teki wrote:
> > On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
> > <m.szyprowski@samsung.com> wrote:
> >> On 12.12.2021 19:14, Jagan Teki wrote:
> >>> Updated series about drm bridge conversion of exynos dsi.
> >>>
> >>> Patch 1: panel checker
> >>>
> >>> Patch 2: panel_bridge API
> >>>
> >>> Patch 3: Bridge conversion
> >>>
> >>> Patch 4: pree_enable, post_disable
> >>>
> >>> Patch 5: Atomic functions
> >>>
> >>> Patch 6: atomic_set
> >>>
> >>> Patch 7: DSI init in enable
> >>>
> >>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
> >>>
> >>> Any inputs?
> >> I've checked this patchset on Exynos based Trats2 board (the one with
> >> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
> >> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
> >> exynos: dsi: Use drm panel_bridge API"):
> >>
> >> # dmesg | grep drm
> >> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
> >> mapping operations
> >> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> >> fimd_component_ops)
> >> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> >> exynos_dsi_component_ops)
> >> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> >> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> >> minor 0
> >> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
> >> *ERROR* failed to find the bridge: -19
> > Look like you have missed to apply the Child lookup patch. is it so?
> >
> > Let me send it, I will CC you as well. And I will also send tc358764
> > panel_bridge conversion.
>
> The above log is from Trats2 board, which uses only the s6e8aa0 DSI
> panel. I've also checked the Arndale board, which has tc358764 bridge
> and it also doesn't work. Which patches I have to apply for the tests?

[PATCH v2] drm: of: Lookup if child node has panel or bridge
[PATCH] drm: bridge: tc358764: Use drm panel_bridge API

Thanks,
Jagan.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 12:31         ` Jagan Teki
@ 2021-12-13 13:21           ` Marek Szyprowski
  2021-12-13 13:56             ` Jagan Teki
  0 siblings, 1 reply; 23+ messages in thread
From: Marek Szyprowski @ 2021-12-13 13:21 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Jagan,

On 13.12.2021 13:31, Jagan Teki wrote:
> On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
>> On 13.12.2021 13:08, Jagan Teki wrote:
>>> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
>>> <m.szyprowski@samsung.com> wrote:
>>>> On 12.12.2021 19:14, Jagan Teki wrote:
>>>>> Updated series about drm bridge conversion of exynos dsi.
>>>>>
>>>>> Patch 1: panel checker
>>>>>
>>>>> Patch 2: panel_bridge API
>>>>>
>>>>> Patch 3: Bridge conversion
>>>>>
>>>>> Patch 4: pree_enable, post_disable
>>>>>
>>>>> Patch 5: Atomic functions
>>>>>
>>>>> Patch 6: atomic_set
>>>>>
>>>>> Patch 7: DSI init in enable
>>>>>
>>>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
>>>>>
>>>>> Any inputs?
>>>> I've checked this patchset on Exynos based Trats2 board (the one with
>>>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
>>>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
>>>> exynos: dsi: Use drm panel_bridge API"):
>>>>
>>>> # dmesg | grep drm
>>>> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
>>>> mapping operations
>>>> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
>>>> fimd_component_ops)
>>>> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
>>>> exynos_dsi_component_ops)
>>>> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
>>>> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
>>>> minor 0
>>>> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
>>>> *ERROR* failed to find the bridge: -19
>>> Look like you have missed to apply the Child lookup patch. is it so?
>>>
>>> Let me send it, I will CC you as well. And I will also send tc358764
>>> panel_bridge conversion.
>> The above log is from Trats2 board, which uses only the s6e8aa0 DSI
>> panel. I've also checked the Arndale board, which has tc358764 bridge
>> and it also doesn't work. Which patches I have to apply for the tests?
> [PATCH v2] drm: of: Lookup if child node has panel or bridge
> [PATCH] drm: bridge: tc358764: Use drm panel_bridge API

Ok, I've applied both. Still no success on Trats:

[    2.451632] exynos4-fb 11c00000.fimd: Adding to iommu group 0
[    2.458137] OF: graph: no port node found in /soc/fimd@11c00000
[    2.476903] [drm] Exynos DRM: using 11c00000.fimd device for DMA 
mapping operations
[    2.483905] exynos-drm exynos-drm: bound 11c00000.fimd (ops 
fimd_component_ops)
[    2.490858] OF: graph: no port node found in /soc/dsi@11c80000
[    2.500283] exynos-drm exynos-drm: bound 11c80000.dsi (ops 
exynos_dsi_component_ops)
[    2.508490] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
[    2.520121] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on 
minor 0
[    2.537231] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach] 
Attached s6e8aa0 device
[    2.566358] ------------[ cut here ]------------
[    2.569894] WARNING: CPU: 1 PID: 29 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    2.586123] Modules linked in:
[    2.586171] CPU: 1 PID: 29 Comm: kworker/1:2 Not tainted 
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    2.586190] Hardware name: Samsung Exynos (Flattened Device Tree)
[    2.586203] Workqueue: events output_poll_execute
[    2.586235] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    2.586267] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    2.586299] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    2.586324] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    2.586346] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    2.586371] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    2.586398] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    2.586421] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    2.586453] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    2.586479] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
[    2.586505] [<c067e98c>] (drm_client_modeset_commit) from 
[<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
[    2.586535] [<c06509c0>] (drm_fb_helper_set_par) from [<c0650aa8>] 
(drm_fb_helper_hotplug_event.part.0+0xa8/0xc0)
[    2.586560] [<c0650aa8>] (drm_fb_helper_hotplug_event.part.0) from 
[<c063ab40>] (output_poll_execute+0xac/0x21c)
[    2.586585] [<c063ab40>] (output_poll_execute) from [<c01470ec>] 
(process_one_work+0x288/0x7a4)
[    2.586611] [<c01470ec>] (process_one_work) from [<c014764c>] 
(worker_thread+0x44/0x534)
[    2.586633] [<c014764c>] (worker_thread) from [<c01500ac>] 
(kthread+0x158/0x190)
[    2.586655] [<c01500ac>] (kthread) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    2.586675] Exception stack(0xc1f6ffb0 to 0xc1f6fff8)
[    2.586690] ffa0:                                     00000000 
00000000 00000000 00000000
[    2.586705] ffc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    2.586720] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    2.586734] irq event stamp: 449
[    2.586749] hardirqs last  enabled at (455): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    2.586780] hardirqs last disabled at (460): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    2.586804] softirqs last  enabled at (430): [<c0101578>] 
__do_softirq+0x348/0x610
[    2.586829] softirqs last disabled at (425): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    2.586902] ---[ end trace e6002ef7c126805b ]---
[    2.587418] ------------[ cut here ]------------
[    2.587452] WARNING: CPU: 1 PID: 1 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    2.587485] Modules linked in:
[    2.587518] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W         
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    2.587535] Hardware name: Samsung Exynos (Flattened Device Tree)
[    2.587548] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    2.587576] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    2.587605] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    2.587628] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    2.587650] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    2.587676] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    2.587700] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    2.587724] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    2.587751] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    2.587778] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
[    2.587804] [<c067e98c>] (drm_client_modeset_commit) from 
[<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
[    2.587831] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>] 
(fbcon_init+0x2c0/0x518)
[    2.587858] [<c05b86d0>] (fbcon_init) from [<c060636c>] 
(visual_init+0xc0/0x108)
[    2.587888] [<c060636c>] (visual_init) from [<c06085e4>] 
(do_bind_con_driver+0x1b8/0x3a4)
[    2.587915] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>] 
(do_take_over_console+0x13c/0x1e8)
[    2.587942] [<c0608b40>] (do_take_over_console) from [<c05b6854>] 
(do_fbcon_takeover+0x78/0xd8)
[    2.587968] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>] 
(register_framebuffer+0x208/0x2e0)
[    2.588001] [<c05b1154>] (register_framebuffer) from [<c064ead0>] 
(__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[    2.588028] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock) 
from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[    2.588053] [<c063a718>] (drm_kms_helper_hotplug_event) from 
[<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[    2.588088] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>] 
(s6e8aa0_probe+0x1b4/0x218)
[    2.588117] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>] 
(really_probe+0xd8/0x484)
[    2.588147] [<c06b7414>] (really_probe) from [<c06b7860>] 
(__driver_probe_device+0xa0/0x204)
[    2.588172] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>] 
(driver_probe_device+0x34/0xc4)
[    2.588197] [<c06b79f8>] (driver_probe_device) from [<c06b819c>] 
(__driver_attach+0xf0/0x1d4)
[    2.588222] [<c06b819c>] (__driver_attach) from [<c06b5164>] 
(bus_for_each_dev+0x70/0xb0)
[    2.588246] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>] 
(bus_add_driver+0x170/0x20c)
[    2.588270] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>] 
(driver_register+0x88/0x118)
[    2.588294] [<c06b8c08>] (driver_register) from [<c01021e8>] 
(do_one_initcall+0x64/0x380)
[    2.588320] [<c01021e8>] (do_one_initcall) from [<c110123c>] 
(kernel_init_freeable+0x1c0/0x224)
[    2.588353] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>] 
(kernel_init+0x18/0x12c)
[    2.588380] [<c0b6ba54>] (kernel_init) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    2.588401] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
[    2.588416] 5fa0:                                     00000000 
00000000 00000000 00000000
[    2.588432] 5fc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    2.588446] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    2.588460] irq event stamp: 175387
[    2.588477] hardirqs last  enabled at (175393): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    2.588506] hardirqs last disabled at (175398): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    2.588531] softirqs last  enabled at (171796): [<c0101578>] 
__do_softirq+0x348/0x610
[    2.588555] softirqs last disabled at (171781): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    2.588581] ---[ end trace e6002ef7c126805c ]---
[    2.588971] ------------[ cut here ]------------
[    2.588989] WARNING: CPU: 1 PID: 1 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    2.589022] Modules linked in:
[    2.589053] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W         
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    2.589072] Hardware name: Samsung Exynos (Flattened Device Tree)
[    2.589085] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    2.589113] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    2.589140] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    2.589165] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    2.589187] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    2.589212] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    2.589237] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    2.589260] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    2.589288] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    2.589314] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
[    2.589342] [<c064fe38>] (drm_fb_helper_pan_display) from 
[<c05b024c>] (fb_pan_display+0x9c/0x114)
[    2.589372] [<c05b024c>] (fb_pan_display) from [<c05bac24>] 
(bit_update_start+0x14/0x30)
[    2.589398] [<c05bac24>] (bit_update_start) from [<c05b9e58>] 
(fbcon_switch+0x2ec/0x454)
[    2.589422] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>] 
(redraw_screen+0xdc/0x230)
[    2.589448] [<c0606fe0>] (redraw_screen) from [<c05b795c>] 
(fbcon_prepare_logo+0x38c/0x450)
[    2.589472] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>] 
(fbcon_init+0x42c/0x518)
[    2.589495] [<c05b883c>] (fbcon_init) from [<c060636c>] 
(visual_init+0xc0/0x108)
[    2.589518] [<c060636c>] (visual_init) from [<c06085e4>] 
(do_bind_con_driver+0x1b8/0x3a4)
[    2.589544] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>] 
(do_take_over_console+0x13c/0x1e8)
[    2.589571] [<c0608b40>] (do_take_over_console) from [<c05b6854>] 
(do_fbcon_takeover+0x78/0xd8)
[    2.589596] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>] 
(register_framebuffer+0x208/0x2e0)
[    2.589622] [<c05b1154>] (register_framebuffer) from [<c064ead0>] 
(__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[    2.589649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock) 
from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[    2.589675] [<c063a718>] (drm_kms_helper_hotplug_event) from 
[<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[    2.589704] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>] 
(s6e8aa0_probe+0x1b4/0x218)
[    2.589731] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>] 
(really_probe+0xd8/0x484)
[    2.589758] [<c06b7414>] (really_probe) from [<c06b7860>] 
(__driver_probe_device+0xa0/0x204)
[    2.589783] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>] 
(driver_probe_device+0x34/0xc4)
[    2.589808] [<c06b79f8>] (driver_probe_device) from [<c06b819c>] 
(__driver_attach+0xf0/0x1d4)
[    2.589832] [<c06b819c>] (__driver_attach) from [<c06b5164>] 
(bus_for_each_dev+0x70/0xb0)
[    2.589856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>] 
(bus_add_driver+0x170/0x20c)
[    2.589879] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>] 
(driver_register+0x88/0x118)
[    2.589904] [<c06b8c08>] (driver_register) from [<c01021e8>] 
(do_one_initcall+0x64/0x380)
[    2.589929] [<c01021e8>] (do_one_initcall) from [<c110123c>] 
(kernel_init_freeable+0x1c0/0x224)
[    2.589956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>] 
(kernel_init+0x18/0x12c)
[    2.589982] [<c0b6ba54>] (kernel_init) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    2.590002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
[    2.590017] 5fa0:                                     00000000 
00000000 00000000 00000000
[    2.590033] 5fc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    2.590047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    2.590061] irq event stamp: 175453
[    2.590079] hardirqs last  enabled at (175459): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    2.590107] hardirqs last disabled at (175464): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    2.590132] softirqs last  enabled at (171796): [<c0101578>] 
__do_softirq+0x348/0x610
[    2.590156] softirqs last disabled at (171781): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    2.590183] ---[ end trace e6002ef7c126805d ]---
[    2.609799] Console: switching to colour frame buffer device 102x91
[    2.610039] ------------[ cut here ]------------
[    2.610057] WARNING: CPU: 1 PID: 1 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    2.610090] Modules linked in:
[    2.610122] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W         
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    2.610140] Hardware name: Samsung Exynos (Flattened Device Tree)
[    2.610153] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    2.610180] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    2.610208] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    2.610231] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    2.610254] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    2.610279] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    2.610305] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    2.610327] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    2.610355] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    2.610382] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
[    2.610410] [<c064fe38>] (drm_fb_helper_pan_display) from 
[<c05b024c>] (fb_pan_display+0x9c/0x114)
[    2.610439] [<c05b024c>] (fb_pan_display) from [<c05bac24>] 
(bit_update_start+0x14/0x30)
[    2.610465] [<c05bac24>] (bit_update_start) from [<c05b9e58>] 
(fbcon_switch+0x2ec/0x454)
[    2.610489] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>] 
(redraw_screen+0xdc/0x230)
[    2.610515] [<c0606fe0>] (redraw_screen) from [<c0608708>] 
(do_bind_con_driver+0x2dc/0x3a4)
[    2.610543] [<c0608708>] (do_bind_con_driver) from [<c0608b40>] 
(do_take_over_console+0x13c/0x1e8)
[    2.610570] [<c0608b40>] (do_take_over_console) from [<c05b6854>] 
(do_fbcon_takeover+0x78/0xd8)
[    2.610595] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>] 
(register_framebuffer+0x208/0x2e0)
[    2.610621] [<c05b1154>] (register_framebuffer) from [<c064ead0>] 
(__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[    2.610649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock) 
from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[    2.610674] [<c063a718>] (drm_kms_helper_hotplug_event) from 
[<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[    2.610703] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>] 
(s6e8aa0_probe+0x1b4/0x218)
[    2.610730] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>] 
(really_probe+0xd8/0x484)
[    2.610756] [<c06b7414>] (really_probe) from [<c06b7860>] 
(__driver_probe_device+0xa0/0x204)
[    2.610782] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>] 
(driver_probe_device+0x34/0xc4)
[    2.610807] [<c06b79f8>] (driver_probe_device) from [<c06b819c>] 
(__driver_attach+0xf0/0x1d4)
[    2.610832] [<c06b819c>] (__driver_attach) from [<c06b5164>] 
(bus_for_each_dev+0x70/0xb0)
[    2.610856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>] 
(bus_add_driver+0x170/0x20c)
[    2.610880] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>] 
(driver_register+0x88/0x118)
[    2.610904] [<c06b8c08>] (driver_register) from [<c01021e8>] 
(do_one_initcall+0x64/0x380)
[    2.610929] [<c01021e8>] (do_one_initcall) from [<c110123c>] 
(kernel_init_freeable+0x1c0/0x224)
[    2.610956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>] 
(kernel_init+0x18/0x12c)
[    2.610982] [<c0b6ba54>] (kernel_init) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    2.611002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
[    2.611017] 5fa0:                                     00000000 
00000000 00000000 00000000
[    2.611033] 5fc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    2.611047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    2.611062] irq event stamp: 175539
[    2.611079] hardirqs last  enabled at (175545): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    2.611108] hardirqs last disabled at (175550): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    2.611134] softirqs last  enabled at (171796): [<c0101578>] 
__do_softirq+0x348/0x610
[    2.611158] softirqs last disabled at (171781): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    2.611185] ---[ end trace e6002ef7c126805e ]---
[    6.173152] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device

After the 2nd patch ("[PATCH v3 2/7] drm: exynos: dsi: Use drm 
panel_bridge API") the display stops working.

Here is the log from Arndale board (which also doesn't work after the 
2nd path):

[    3.739197] OF: graph: no port node found in /soc/hdmi@14530000
[    3.747930] [drm] Exynos DRM: using 14400000.fimd device for DMA 
mapping operations
[    3.754385] exynos-drm exynos-drm: bound 14400000.fimd (ops 
fimd_component_ops)
[    3.762985] exynos-drm exynos-drm: bound 14450000.mixer (ops 
mixer_component_ops)
[    3.769332] OF: graph: no port node found in /soc/dsi@14500000
[    3.779055] exynos-drm exynos-drm: bound 14500000.dsi (ops 
exynos_dsi_component_ops)
[    3.785997] exynos-drm exynos-drm: bound 14530000.hdmi (ops 
hdmi_component_ops)
[    3.795431] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
[    3.801975] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
[    3.811501] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on 
minor 0
[    3.818349] usb 1-3: New USB device found, idVendor=0424, 
idProduct=3503, bcdDevice=a1.a0
[    3.825602] usb 1-3: New USB device strings: Mfr=0, Product=0, 
SerialNumber=0
[    3.833782] panfrost 11800000.gpu: clock rate = 533000000
[    3.835556] hub 1-3:1.0: USB hub found
[    3.842054] hub 1-3:1.0: 3 ports detected
[    3.861628] panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor 
0x0 status 0x1
[    3.868077] panfrost 11800000.gpu: features: 00000000,10206000, 
issues: 00000000,31b4dfff
[    3.876202] panfrost 11800000.gpu: Features: L2:0x07110206 
Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
[    3.887853] panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
[    3.897532] [drm] Initialized panfrost 1.2.0 20180908 for 
11800000.gpu on minor 1
[    3.919339] wm8994 3-001a: WM1811 revision D CUST_ID 00
[    3.933753] wm8994 3-001a: No interrupt specified, no interrupts
[    4.111656] exynos-dsi 14500000.dsi: [drm:exynos_dsi_host_attach] 
Attached tc358764 device
[    4.125346] ------------[ cut here ]------------
[    4.125392] WARNING: CPU: 1 PID: 7 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    4.125412] Modules linked in:
[    4.125428] CPU: 1 PID: 7 Comm: kworker/u4:0 Not tainted 
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    4.125438] Hardware name: Samsung Exynos (Flattened Device Tree)
[    4.125444] Workqueue: events_unbound deferred_probe_work_func
[    4.125461] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    4.125477] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    4.125492] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    4.125505] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    4.125515] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    4.125527] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    4.125538] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    4.125549] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    4.125562] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    4.125575] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
[    4.125588] [<c067e98c>] (drm_client_modeset_commit) from 
[<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
[    4.125603] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>] 
(fbcon_init+0x2c0/0x518)
[    4.125615] [<c05b86d0>] (fbcon_init) from [<c060636c>] 
(visual_init+0xc0/0x108)
[    4.125628] [<c060636c>] (visual_init) from [<c06085e4>] 
(do_bind_con_driver+0x1b8/0x3a4)
[    4.125641] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>] 
(do_take_over_console+0x13c/0x1e8)
[    4.125654] [<c0608b40>] (do_take_over_console) from [<c05b6854>] 
(do_fbcon_takeover+0x78/0xd8)
[    4.125666] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>] 
(register_framebuffer+0x208/0x2e0)
[    4.125682] [<c05b1154>] (register_framebuffer) from [<c064ead0>] 
(__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[    4.125695] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock) 
from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[    4.125708] [<c063a718>] (drm_kms_helper_hotplug_event) from 
[<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[    4.125722] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>] 
(tc358764_probe+0xe8/0x15c)
[    4.125736] [<c069cef8>] (tc358764_probe) from [<c06b7414>] 
(really_probe+0xd8/0x484)
[    4.125747] [<c06b7414>] (really_probe) from [<c06b7860>] 
(__driver_probe_device+0xa0/0x204)
[    4.125759] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>] 
(driver_probe_device+0x34/0xc4)
[    4.125771] [<c06b79f8>] (driver_probe_device) from [<c06b8034>] 
(__device_attach_driver+0xa4/0x11c)
[    4.125784] [<c06b8034>] (__device_attach_driver) from [<c06b5220>] 
(bus_for_each_drv+0x7c/0xc0)
[    4.125796] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>] 
(__device_attach+0xc8/0x1d0)
[    4.125807] [<c06b7cd8>] (__device_attach) from [<c06b6338>] 
(bus_probe_device+0x88/0x90)
[    4.125818] [<c06b6338>] (bus_probe_device) from [<c06b6834>] 
(deferred_probe_work_func+0x98/0xe0)
[    4.125830] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>] 
(process_one_work+0x288/0x7a4)
[    4.125843] [<c01470ec>] (process_one_work) from [<c014764c>] 
(worker_thread+0x44/0x534)
[    4.125853] [<c014764c>] (worker_thread) from [<c01500ac>] 
(kthread+0x158/0x190)
[    4.125863] [<c01500ac>] (kthread) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    4.125872] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
[    4.125879] 1fa0:                                     00000000 
00000000 00000000 00000000
[    4.125886] 1fc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    4.125893] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    4.125900] irq event stamp: 18917
[    4.125908] hardirqs last  enabled at (18923): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    4.125922] hardirqs last disabled at (18928): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    4.125934] softirqs last  enabled at (18882): [<c0101578>] 
__do_softirq+0x348/0x610
[    4.125945] softirqs last disabled at (18877): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    4.125957] ---[ end trace ab5bb577f0c45837 ]---
[    4.126167] ------------[ cut here ]------------
[    4.126175] WARNING: CPU: 1 PID: 7 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    4.126190] Modules linked in:
[    4.126205] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W         
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    4.126213] Hardware name: Samsung Exynos (Flattened Device Tree)
[    4.126219] Workqueue: events_unbound deferred_probe_work_func
[    4.126232] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    4.126245] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    4.126258] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    4.126269] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    4.126279] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    4.126290] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    4.126301] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    4.126310] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    4.126323] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    4.126336] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
[    4.126349] [<c064fe38>] (drm_fb_helper_pan_display) from 
[<c05b024c>] (fb_pan_display+0x9c/0x114)
[    4.126362] [<c05b024c>] (fb_pan_display) from [<c05bac24>] 
(bit_update_start+0x14/0x30)
[    4.126375] [<c05bac24>] (bit_update_start) from [<c05b9e58>] 
(fbcon_switch+0x2ec/0x454)
[    4.126385] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>] 
(redraw_screen+0xdc/0x230)
[    4.126397] [<c0606fe0>] (redraw_screen) from [<c05b795c>] 
(fbcon_prepare_logo+0x38c/0x450)
[    4.126408] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>] 
(fbcon_init+0x42c/0x518)
[    4.126419] [<c05b883c>] (fbcon_init) from [<c060636c>] 
(visual_init+0xc0/0x108)
[    4.126430] [<c060636c>] (visual_init) from [<c06085e4>] 
(do_bind_con_driver+0x1b8/0x3a4)
[    4.126442] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>] 
(do_take_over_console+0x13c/0x1e8)
[    4.126455] [<c0608b40>] (do_take_over_console) from [<c05b6854>] 
(do_fbcon_takeover+0x78/0xd8)
[    4.126466] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>] 
(register_framebuffer+0x208/0x2e0)
[    4.126478] [<c05b1154>] (register_framebuffer) from [<c064ead0>] 
(__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[    4.126491] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock) 
from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[    4.126503] [<c063a718>] (drm_kms_helper_hotplug_event) from 
[<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[    4.126516] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>] 
(tc358764_probe+0xe8/0x15c)
[    4.126528] [<c069cef8>] (tc358764_probe) from [<c06b7414>] 
(really_probe+0xd8/0x484)
[    4.126540] [<c06b7414>] (really_probe) from [<c06b7860>] 
(__driver_probe_device+0xa0/0x204)
[    4.126552] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>] 
(driver_probe_device+0x34/0xc4)
[    4.126564] [<c06b79f8>] (driver_probe_device) from [<c06b8034>] 
(__device_attach_driver+0xa4/0x11c)
[    4.126577] [<c06b8034>] (__device_attach_driver) from [<c06b5220>] 
(bus_for_each_drv+0x7c/0xc0)
[    4.126589] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>] 
(__device_attach+0xc8/0x1d0)
[    4.126600] [<c06b7cd8>] (__device_attach) from [<c06b6338>] 
(bus_probe_device+0x88/0x90)
[    4.126611] [<c06b6338>] (bus_probe_device) from [<c06b6834>] 
(deferred_probe_work_func+0x98/0xe0)
[    4.126623] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>] 
(process_one_work+0x288/0x7a4)
[    4.126634] [<c01470ec>] (process_one_work) from [<c014764c>] 
(worker_thread+0x44/0x534)
[    4.126644] [<c014764c>] (worker_thread) from [<c01500ac>] 
(kthread+0x158/0x190)
[    4.126654] [<c01500ac>] (kthread) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    4.126663] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
[    4.126670] 1fa0:                                     00000000 
00000000 00000000 00000000
[    4.126676] 1fc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    4.126683] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    4.126689] irq event stamp: 19009
[    4.126697] hardirqs last  enabled at (19015): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    4.126709] hardirqs last disabled at (19020): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    4.126721] softirqs last  enabled at (18882): [<c0101578>] 
__do_softirq+0x348/0x610
[    4.126731] softirqs last disabled at (18877): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    4.126743] ---[ end trace ab5bb577f0c45838 ]---
[    4.129425] Console: switching to colour frame buffer device 146x42
[    4.129562] ------------[ cut here ]------------
[    4.129570] WARNING: CPU: 1 PID: 7 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[    4.129585] Modules linked in:
[    4.129599] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W         
5.16.0-rc1-00009-g704b1dbfa4c2 #11058
[    4.129607] Hardware name: Samsung Exynos (Flattened Device Tree)
[    4.129613] Workqueue: events_unbound deferred_probe_work_func
[    4.129626] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[    4.129639] [<c010c618>] (show_stack) from [<c0b657d4>] 
(dump_stack_lvl+0x58/0x70)
[    4.129651] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[    4.129663] [<c01261dc>] (__warn) from [<c0b5f628>] 
(warn_slowpath_fmt+0x5c/0xb4)
[    4.129673] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[    4.129684] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[    4.129695] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[    4.129704] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[    4.129716] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[    4.129729] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
[    4.129742] [<c064fe38>] (drm_fb_helper_pan_display) from 
[<c05b024c>] (fb_pan_display+0x9c/0x114)
[    4.129755] [<c05b024c>] (fb_pan_display) from [<c05bac24>] 
(bit_update_start+0x14/0x30)
[    4.129767] [<c05bac24>] (bit_update_start) from [<c05b9e58>] 
(fbcon_switch+0x2ec/0x454)
[    4.129778] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>] 
(redraw_screen+0xdc/0x230)
[    4.129790] [<c0606fe0>] (redraw_screen) from [<c0608708>] 
(do_bind_con_driver+0x2dc/0x3a4)
[    4.129802] [<c0608708>] (do_bind_con_driver) from [<c0608b40>] 
(do_take_over_console+0x13c/0x1e8)
[    4.129815] [<c0608b40>] (do_take_over_console) from [<c05b6854>] 
(do_fbcon_takeover+0x78/0xd8)
[    4.129827] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>] 
(register_framebuffer+0x208/0x2e0)
[    4.129839] [<c05b1154>] (register_framebuffer) from [<c064ead0>] 
(__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
[    4.129852] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock) 
from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
[    4.129863] [<c063a718>] (drm_kms_helper_hotplug_event) from 
[<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
[    4.129876] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>] 
(tc358764_probe+0xe8/0x15c)
[    4.129888] [<c069cef8>] (tc358764_probe) from [<c06b7414>] 
(really_probe+0xd8/0x484)
[    4.129900] [<c06b7414>] (really_probe) from [<c06b7860>] 
(__driver_probe_device+0xa0/0x204)
[    4.129912] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>] 
(driver_probe_device+0x34/0xc4)
[    4.129924] [<c06b79f8>] (driver_probe_device) from [<c06b8034>] 
(__device_attach_driver+0xa4/0x11c)
[    4.129936] [<c06b8034>] (__device_attach_driver) from [<c06b5220>] 
(bus_for_each_drv+0x7c/0xc0)
[    4.129948] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>] 
(__device_attach+0xc8/0x1d0)
[    4.129960] [<c06b7cd8>] (__device_attach) from [<c06b6338>] 
(bus_probe_device+0x88/0x90)
[    4.129971] [<c06b6338>] (bus_probe_device) from [<c06b6834>] 
(deferred_probe_work_func+0x98/0xe0)
[    4.129983] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>] 
(process_one_work+0x288/0x7a4)
[    4.129995] [<c01470ec>] (process_one_work) from [<c014764c>] 
(worker_thread+0x44/0x534)
[    4.130005] [<c014764c>] (worker_thread) from [<c01500ac>] 
(kthread+0x158/0x190)
[    4.130014] [<c01500ac>] (kthread) from [<c0100108>] 
(ret_from_fork+0x14/0x2c)
[    4.130023] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
[    4.130030] 1fa0:                                     00000000 
00000000 00000000 00000000
[    4.130037] 1fc0: 00000000 00000000 00000000 00000000 00000000 
00000000 00000000 00000000
[    4.130043] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    4.130049] irq event stamp: 19103
[    4.130057] hardirqs last  enabled at (19109): [<c01a0acc>] 
vprintk_emit+0x2ac/0x2d0
[    4.130069] hardirqs last disabled at (19114): [<c01a0a88>] 
vprintk_emit+0x268/0x2d0
[    4.130081] softirqs last  enabled at (18882): [<c0101578>] 
__do_softirq+0x348/0x610
[    4.130091] softirqs last disabled at (18877): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[    4.130103] ---[ end trace ab5bb577f0c45839 ]---
[    4.175229] usb 1-3.2: new high-speed USB device number 3 using 
exynos-ehci
[    4.179270] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device

There is something seriously broken with connector setup (Arndale board):

# ./modetest -C -Mexynos
[   37.803987] ------------[ cut here ]------------
[   37.807883] WARNING: CPU: 1 PID: 1296 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[   37.819952] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem 
videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common 
videodev mc
[   37.832906] CPU: 1 PID: 1296 Comm: modetest Tainted: G W         
5.16.0-rc1-00004-gd0885f6a52ee #11059
[   37.842588] Hardware name: Samsung Exynos (Flattened Device Tree)
[   37.848667] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[   37.856390] [<c010c618>] (show_stack) from [<c0b658a4>] 
(dump_stack_lvl+0x58/0x70)
[   37.863942] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[   37.871233] [<c01261dc>] (__warn) from [<c0b5f6f8>] 
(warn_slowpath_fmt+0x5c/0xb4)
[   37.878697] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[   37.889374] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[   37.901265] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[   37.912115] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[   37.923139] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[   37.934248] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
[   37.944665] [<c067e98c>] (drm_client_modeset_commit) from 
[<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
[   37.954300] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>] 
(drm_release+0x114/0x14c)
[   37.962893] [<c0652b7c>] (drm_release) from [<c02dc400>] 
(__fput+0x88/0x258)
[   37.969924] [<c02dc400>] (__fput) from [<c014cd44>] 
(task_work_run+0x8c/0xc8)
[   37.977041] [<c014cd44>] (task_work_run) from [<c010c08c>] 
(do_work_pending+0x4a4/0x598)
[   37.985114] [<c010c08c>] (do_work_pending) from [<c0100088>] 
(slow_work_pending+0xc/0x20)
[   37.993272] Exception stack(0xc3577fb0 to 0xc3577ff8)
[   37.998309] 7fa0:                                     00000000 
0000001f 85024200 00000000
[   38.006469] 7fc0: 00000001 00000003 00000000 00000006 00022188 
00000000 b6f6c000 00000000
[   38.014628] 7fe0: b6e6daa0 bec90a98 0000e7c4 b6e6dac0 60000010 00000003
[   38.021474] irq event stamp: 3541
[   38.024718] hardirqs last  enabled at (3553): [<c01598ec>] 
finish_task_switch+0x110/0x368
[   38.032840] hardirqs last disabled at (3564): [<c0b6cc7c>] 
__schedule+0x4e4/0xa6c
[   38.040321] softirqs last  enabled at (3580): [<c0101578>] 
__do_softirq+0x348/0x610
[   38.048072] softirqs last disabled at (3573): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[   38.055797] ---[ end trace cfeb2d6c6e65009a ]---
could not get connector 62: N[   38.062741] ------------[ cut here 
]------------
[   38.067551] WARNING: CPU: 0 PID: 1296 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x94/0x9c
[   38.080014] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem 
videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common 
videodev mc
[   38.092947] CPU: 0 PID: 1296 Comm: modetest Tainted: G W         
5.16.0-rc1-00004-gd0885f6a52ee #11059
[   38.102727] Hardware name: Samsung Exynos (Flattened Device Tree)
[   38.108806] [<c0110b30>] (unwind_backtrace) from [<c010c618>] 
(show_stack+0x10/0x14)
[   38.116529] [<c010c618>] (show_stack) from [<c0b658a4>] 
(dump_stack_lvl+0x58/0x70)
[   38.124081] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>] 
(__warn+0xd0/0x134)
[   38.131373] [<c01261dc>] (__warn) from [<c0b5f6f8>] 
(warn_slowpath_fmt+0x5c/0xb4)
[   38.138837] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
[   38.149514] [<c064bce4>] 
(drm_atomic_helper_connector_duplicate_state) from [<c0666b64>] 
(drm_atomic_get_connector_state+0xd4/0x190)
[   38.161405] [<c0666b64>] (drm_atomic_get_connector_state) from 
[<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
[   38.172255] [<c0667928>] (__drm_atomic_helper_set_config) from 
[<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
[   38.183279] [<c067e628>] (drm_client_modeset_commit_atomic) from 
[<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
[   38.194388] [<c067e800>] (drm_client_modeset_commit_locked) from 
[<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
[   38.204804] [<c067e98c>] (drm_client_modeset_commit) from 
[<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
[   38.214439] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>] 
(drm_release+0x114/0x14c)
[   38.223032] [<c0652b7c>] (drm_release) from [<c02dc400>] 
(__fput+0x88/0x258)
[   38.230063] [<c02dc400>] (__fput) from [<c014cd44>] 
(task_work_run+0x8c/0xc8)
[   38.234727] dwmmc_exynos 12200000.mmc: Unexpected interrupt latency
[   38.237178] [<c014cd44>] (task_work_run) from [<c012b5ac>] 
(do_exit+0x390/0xaf0)
[   38.250809] [<c012b5ac>] (do_exit) from [<c012d040>] 
(do_group_exit+0x2c/0xa0)
[   38.258013] [<c012d040>] (do_group_exit) from [<c013b8f4>] 
(get_signal+0x140/0xab8)
[   38.265651] [<c013b8f4>] (get_signal) from [<c010bd0c>] 
(do_work_pending+0x124/0x598)
[   38.273463] [<c010bd0c>] (do_work_pending) from [<c0100088>] 
(slow_work_pending+0xc/0x20)
[   38.281622] Exception stack(0xc3577fb0 to 0xc3577ff8)
[   38.286659] 7fa0:                                     00000008 
0000005f 00000002 00023388
[   38.294819] 7fc0: 00000001 000232a8 00000000 00023398 0000003e 
00000000 00023360 00000000
[   38.302978] 7fe0: 00023590 bec90ae8 00009ec0 00009e9c 80000010 ffffffff
[   38.310025] irq event stamp: 4059
[   38.312910] hardirqs last  enabled at (4069): [<c019d7f4>] 
__up_console_sem+0x50/0x60
[   38.320780] hardirqs last disabled at (4078): [<c019d7e0>] 
__up_console_sem+0x3c/0x60
[   38.328617] softirqs last  enabled at (4054): [<c0101578>] 
__do_softirq+0x348/0x610
[   38.336222] softirqs last disabled at (4013): [<c012e7a4>] 
__irq_exit_rcu+0x144/0x1ec
[   38.343942] ---[ end trace cfeb2d6c6e65009b ]---
o such file or directory
Segmentation fault

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 13:21           ` Marek Szyprowski
@ 2021-12-13 13:56             ` Jagan Teki
  2021-12-13 14:12               ` Marek Szyprowski
  0 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-13 13:56 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Marek,

On Mon, Dec 13, 2021 at 6:51 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>
> Hi Jagan,
>
> On 13.12.2021 13:31, Jagan Teki wrote:
> > On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
> > <m.szyprowski@samsung.com> wrote:
> >> On 13.12.2021 13:08, Jagan Teki wrote:
> >>> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
> >>> <m.szyprowski@samsung.com> wrote:
> >>>> On 12.12.2021 19:14, Jagan Teki wrote:
> >>>>> Updated series about drm bridge conversion of exynos dsi.
> >>>>>
> >>>>> Patch 1: panel checker
> >>>>>
> >>>>> Patch 2: panel_bridge API
> >>>>>
> >>>>> Patch 3: Bridge conversion
> >>>>>
> >>>>> Patch 4: pree_enable, post_disable
> >>>>>
> >>>>> Patch 5: Atomic functions
> >>>>>
> >>>>> Patch 6: atomic_set
> >>>>>
> >>>>> Patch 7: DSI init in enable
> >>>>>
> >>>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
> >>>>>
> >>>>> Any inputs?
> >>>> I've checked this patchset on Exynos based Trats2 board (the one with
> >>>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
> >>>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
> >>>> exynos: dsi: Use drm panel_bridge API"):
> >>>>
> >>>> # dmesg | grep drm
> >>>> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
> >>>> mapping operations
> >>>> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> >>>> fimd_component_ops)
> >>>> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> >>>> exynos_dsi_component_ops)
> >>>> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> >>>> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> >>>> minor 0
> >>>> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
> >>>> *ERROR* failed to find the bridge: -19
> >>> Look like you have missed to apply the Child lookup patch. is it so?
> >>>
> >>> Let me send it, I will CC you as well. And I will also send tc358764
> >>> panel_bridge conversion.
> >> The above log is from Trats2 board, which uses only the s6e8aa0 DSI
> >> panel. I've also checked the Arndale board, which has tc358764 bridge
> >> and it also doesn't work. Which patches I have to apply for the tests?
> > [PATCH v2] drm: of: Lookup if child node has panel or bridge
> > [PATCH] drm: bridge: tc358764: Use drm panel_bridge API
>
> Ok, I've applied both. Still no success on Trats:
>
> [    2.451632] exynos4-fb 11c00000.fimd: Adding to iommu group 0
> [    2.458137] OF: graph: no port node found in /soc/fimd@11c00000
> [    2.476903] [drm] Exynos DRM: using 11c00000.fimd device for DMA
> mapping operations
> [    2.483905] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> fimd_component_ops)
> [    2.490858] OF: graph: no port node found in /soc/dsi@11c80000
> [    2.500283] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> exynos_dsi_component_ops)
> [    2.508490] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> [    2.520121] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> minor 0
> [    2.537231] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
> Attached s6e8aa0 device
> [    2.566358] ------------[ cut here ]------------
> [    2.569894] WARNING: CPU: 1 PID: 29 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    2.586123] Modules linked in:
> [    2.586171] CPU: 1 PID: 29 Comm: kworker/1:2 Not tainted
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    2.586190] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    2.586203] Workqueue: events output_poll_execute
> [    2.586235] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    2.586267] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    2.586299] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    2.586324] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    2.586346] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    2.586371] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    2.586398] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    2.586421] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    2.586453] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    2.586479] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> [    2.586505] [<c067e98c>] (drm_client_modeset_commit) from
> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
> [    2.586535] [<c06509c0>] (drm_fb_helper_set_par) from [<c0650aa8>]
> (drm_fb_helper_hotplug_event.part.0+0xa8/0xc0)
> [    2.586560] [<c0650aa8>] (drm_fb_helper_hotplug_event.part.0) from
> [<c063ab40>] (output_poll_execute+0xac/0x21c)
> [    2.586585] [<c063ab40>] (output_poll_execute) from [<c01470ec>]
> (process_one_work+0x288/0x7a4)
> [    2.586611] [<c01470ec>] (process_one_work) from [<c014764c>]
> (worker_thread+0x44/0x534)
> [    2.586633] [<c014764c>] (worker_thread) from [<c01500ac>]
> (kthread+0x158/0x190)
> [    2.586655] [<c01500ac>] (kthread) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    2.586675] Exception stack(0xc1f6ffb0 to 0xc1f6fff8)
> [    2.586690] ffa0:                                     00000000
> 00000000 00000000 00000000
> [    2.586705] ffc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    2.586720] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    2.586734] irq event stamp: 449
> [    2.586749] hardirqs last  enabled at (455): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    2.586780] hardirqs last disabled at (460): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    2.586804] softirqs last  enabled at (430): [<c0101578>]
> __do_softirq+0x348/0x610
> [    2.586829] softirqs last disabled at (425): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    2.586902] ---[ end trace e6002ef7c126805b ]---
> [    2.587418] ------------[ cut here ]------------
> [    2.587452] WARNING: CPU: 1 PID: 1 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    2.587485] Modules linked in:
> [    2.587518] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    2.587535] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    2.587548] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    2.587576] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    2.587605] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    2.587628] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    2.587650] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    2.587676] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    2.587700] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    2.587724] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    2.587751] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    2.587778] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> [    2.587804] [<c067e98c>] (drm_client_modeset_commit) from
> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
> [    2.587831] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>]
> (fbcon_init+0x2c0/0x518)
> [    2.587858] [<c05b86d0>] (fbcon_init) from [<c060636c>]
> (visual_init+0xc0/0x108)
> [    2.587888] [<c060636c>] (visual_init) from [<c06085e4>]
> (do_bind_con_driver+0x1b8/0x3a4)
> [    2.587915] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> (do_take_over_console+0x13c/0x1e8)
> [    2.587942] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> (do_fbcon_takeover+0x78/0xd8)
> [    2.587968] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> (register_framebuffer+0x208/0x2e0)
> [    2.588001] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> [    2.588028] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [    2.588053] [<c063a718>] (drm_kms_helper_hotplug_event) from
> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> [    2.588088] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
> (s6e8aa0_probe+0x1b4/0x218)
> [    2.588117] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
> (really_probe+0xd8/0x484)
> [    2.588147] [<c06b7414>] (really_probe) from [<c06b7860>]
> (__driver_probe_device+0xa0/0x204)
> [    2.588172] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> (driver_probe_device+0x34/0xc4)
> [    2.588197] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
> (__driver_attach+0xf0/0x1d4)
> [    2.588222] [<c06b819c>] (__driver_attach) from [<c06b5164>]
> (bus_for_each_dev+0x70/0xb0)
> [    2.588246] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
> (bus_add_driver+0x170/0x20c)
> [    2.588270] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
> (driver_register+0x88/0x118)
> [    2.588294] [<c06b8c08>] (driver_register) from [<c01021e8>]
> (do_one_initcall+0x64/0x380)
> [    2.588320] [<c01021e8>] (do_one_initcall) from [<c110123c>]
> (kernel_init_freeable+0x1c0/0x224)
> [    2.588353] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
> (kernel_init+0x18/0x12c)
> [    2.588380] [<c0b6ba54>] (kernel_init) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    2.588401] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
> [    2.588416] 5fa0:                                     00000000
> 00000000 00000000 00000000
> [    2.588432] 5fc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    2.588446] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    2.588460] irq event stamp: 175387
> [    2.588477] hardirqs last  enabled at (175393): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    2.588506] hardirqs last disabled at (175398): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    2.588531] softirqs last  enabled at (171796): [<c0101578>]
> __do_softirq+0x348/0x610
> [    2.588555] softirqs last disabled at (171781): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    2.588581] ---[ end trace e6002ef7c126805c ]---
> [    2.588971] ------------[ cut here ]------------
> [    2.588989] WARNING: CPU: 1 PID: 1 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    2.589022] Modules linked in:
> [    2.589053] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    2.589072] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    2.589085] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    2.589113] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    2.589140] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    2.589165] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    2.589187] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    2.589212] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    2.589237] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    2.589260] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    2.589288] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    2.589314] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> [    2.589342] [<c064fe38>] (drm_fb_helper_pan_display) from
> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> [    2.589372] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> (bit_update_start+0x14/0x30)
> [    2.589398] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> (fbcon_switch+0x2ec/0x454)
> [    2.589422] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> (redraw_screen+0xdc/0x230)
> [    2.589448] [<c0606fe0>] (redraw_screen) from [<c05b795c>]
> (fbcon_prepare_logo+0x38c/0x450)
> [    2.589472] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>]
> (fbcon_init+0x42c/0x518)
> [    2.589495] [<c05b883c>] (fbcon_init) from [<c060636c>]
> (visual_init+0xc0/0x108)
> [    2.589518] [<c060636c>] (visual_init) from [<c06085e4>]
> (do_bind_con_driver+0x1b8/0x3a4)
> [    2.589544] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> (do_take_over_console+0x13c/0x1e8)
> [    2.589571] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> (do_fbcon_takeover+0x78/0xd8)
> [    2.589596] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> (register_framebuffer+0x208/0x2e0)
> [    2.589622] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> [    2.589649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [    2.589675] [<c063a718>] (drm_kms_helper_hotplug_event) from
> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> [    2.589704] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
> (s6e8aa0_probe+0x1b4/0x218)
> [    2.589731] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
> (really_probe+0xd8/0x484)
> [    2.589758] [<c06b7414>] (really_probe) from [<c06b7860>]
> (__driver_probe_device+0xa0/0x204)
> [    2.589783] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> (driver_probe_device+0x34/0xc4)
> [    2.589808] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
> (__driver_attach+0xf0/0x1d4)
> [    2.589832] [<c06b819c>] (__driver_attach) from [<c06b5164>]
> (bus_for_each_dev+0x70/0xb0)
> [    2.589856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
> (bus_add_driver+0x170/0x20c)
> [    2.589879] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
> (driver_register+0x88/0x118)
> [    2.589904] [<c06b8c08>] (driver_register) from [<c01021e8>]
> (do_one_initcall+0x64/0x380)
> [    2.589929] [<c01021e8>] (do_one_initcall) from [<c110123c>]
> (kernel_init_freeable+0x1c0/0x224)
> [    2.589956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
> (kernel_init+0x18/0x12c)
> [    2.589982] [<c0b6ba54>] (kernel_init) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    2.590002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
> [    2.590017] 5fa0:                                     00000000
> 00000000 00000000 00000000
> [    2.590033] 5fc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    2.590047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    2.590061] irq event stamp: 175453
> [    2.590079] hardirqs last  enabled at (175459): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    2.590107] hardirqs last disabled at (175464): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    2.590132] softirqs last  enabled at (171796): [<c0101578>]
> __do_softirq+0x348/0x610
> [    2.590156] softirqs last disabled at (171781): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    2.590183] ---[ end trace e6002ef7c126805d ]---
> [    2.609799] Console: switching to colour frame buffer device 102x91
> [    2.610039] ------------[ cut here ]------------
> [    2.610057] WARNING: CPU: 1 PID: 1 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    2.610090] Modules linked in:
> [    2.610122] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    2.610140] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    2.610153] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    2.610180] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    2.610208] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    2.610231] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    2.610254] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    2.610279] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    2.610305] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    2.610327] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    2.610355] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    2.610382] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> [    2.610410] [<c064fe38>] (drm_fb_helper_pan_display) from
> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> [    2.610439] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> (bit_update_start+0x14/0x30)
> [    2.610465] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> (fbcon_switch+0x2ec/0x454)
> [    2.610489] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> (redraw_screen+0xdc/0x230)
> [    2.610515] [<c0606fe0>] (redraw_screen) from [<c0608708>]
> (do_bind_con_driver+0x2dc/0x3a4)
> [    2.610543] [<c0608708>] (do_bind_con_driver) from [<c0608b40>]
> (do_take_over_console+0x13c/0x1e8)
> [    2.610570] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> (do_fbcon_takeover+0x78/0xd8)
> [    2.610595] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> (register_framebuffer+0x208/0x2e0)
> [    2.610621] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> [    2.610649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [    2.610674] [<c063a718>] (drm_kms_helper_hotplug_event) from
> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> [    2.610703] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
> (s6e8aa0_probe+0x1b4/0x218)
> [    2.610730] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
> (really_probe+0xd8/0x484)
> [    2.610756] [<c06b7414>] (really_probe) from [<c06b7860>]
> (__driver_probe_device+0xa0/0x204)
> [    2.610782] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> (driver_probe_device+0x34/0xc4)
> [    2.610807] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
> (__driver_attach+0xf0/0x1d4)
> [    2.610832] [<c06b819c>] (__driver_attach) from [<c06b5164>]
> (bus_for_each_dev+0x70/0xb0)
> [    2.610856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
> (bus_add_driver+0x170/0x20c)
> [    2.610880] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
> (driver_register+0x88/0x118)
> [    2.610904] [<c06b8c08>] (driver_register) from [<c01021e8>]
> (do_one_initcall+0x64/0x380)
> [    2.610929] [<c01021e8>] (do_one_initcall) from [<c110123c>]
> (kernel_init_freeable+0x1c0/0x224)
> [    2.610956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
> (kernel_init+0x18/0x12c)
> [    2.610982] [<c0b6ba54>] (kernel_init) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    2.611002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
> [    2.611017] 5fa0:                                     00000000
> 00000000 00000000 00000000
> [    2.611033] 5fc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    2.611047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    2.611062] irq event stamp: 175539
> [    2.611079] hardirqs last  enabled at (175545): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    2.611108] hardirqs last disabled at (175550): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    2.611134] softirqs last  enabled at (171796): [<c0101578>]
> __do_softirq+0x348/0x610
> [    2.611158] softirqs last disabled at (171781): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    2.611185] ---[ end trace e6002ef7c126805e ]---
> [    6.173152] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device
>
> After the 2nd patch ("[PATCH v3 2/7] drm: exynos: dsi: Use drm
> panel_bridge API") the display stops working.
>
> Here is the log from Arndale board (which also doesn't work after the
> 2nd path):
>
> [    3.739197] OF: graph: no port node found in /soc/hdmi@14530000
> [    3.747930] [drm] Exynos DRM: using 14400000.fimd device for DMA
> mapping operations
> [    3.754385] exynos-drm exynos-drm: bound 14400000.fimd (ops
> fimd_component_ops)
> [    3.762985] exynos-drm exynos-drm: bound 14450000.mixer (ops
> mixer_component_ops)
> [    3.769332] OF: graph: no port node found in /soc/dsi@14500000
> [    3.779055] exynos-drm exynos-drm: bound 14500000.dsi (ops
> exynos_dsi_component_ops)
> [    3.785997] exynos-drm exynos-drm: bound 14530000.hdmi (ops
> hdmi_component_ops)
> [    3.795431] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> [    3.801975] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> [    3.811501] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> minor 0
> [    3.818349] usb 1-3: New USB device found, idVendor=0424,
> idProduct=3503, bcdDevice=a1.a0
> [    3.825602] usb 1-3: New USB device strings: Mfr=0, Product=0,
> SerialNumber=0
> [    3.833782] panfrost 11800000.gpu: clock rate = 533000000
> [    3.835556] hub 1-3:1.0: USB hub found
> [    3.842054] hub 1-3:1.0: 3 ports detected
> [    3.861628] panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor
> 0x0 status 0x1
> [    3.868077] panfrost 11800000.gpu: features: 00000000,10206000,
> issues: 00000000,31b4dfff
> [    3.876202] panfrost 11800000.gpu: Features: L2:0x07110206
> Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
> [    3.887853] panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
> [    3.897532] [drm] Initialized panfrost 1.2.0 20180908 for
> 11800000.gpu on minor 1
> [    3.919339] wm8994 3-001a: WM1811 revision D CUST_ID 00
> [    3.933753] wm8994 3-001a: No interrupt specified, no interrupts
> [    4.111656] exynos-dsi 14500000.dsi: [drm:exynos_dsi_host_attach]
> Attached tc358764 device
> [    4.125346] ------------[ cut here ]------------
> [    4.125392] WARNING: CPU: 1 PID: 7 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    4.125412] Modules linked in:
> [    4.125428] CPU: 1 PID: 7 Comm: kworker/u4:0 Not tainted
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    4.125438] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    4.125444] Workqueue: events_unbound deferred_probe_work_func
> [    4.125461] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    4.125477] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    4.125492] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    4.125505] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    4.125515] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    4.125527] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    4.125538] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    4.125549] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    4.125562] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    4.125575] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> [    4.125588] [<c067e98c>] (drm_client_modeset_commit) from
> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
> [    4.125603] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>]
> (fbcon_init+0x2c0/0x518)
> [    4.125615] [<c05b86d0>] (fbcon_init) from [<c060636c>]
> (visual_init+0xc0/0x108)
> [    4.125628] [<c060636c>] (visual_init) from [<c06085e4>]
> (do_bind_con_driver+0x1b8/0x3a4)
> [    4.125641] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> (do_take_over_console+0x13c/0x1e8)
> [    4.125654] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> (do_fbcon_takeover+0x78/0xd8)
> [    4.125666] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> (register_framebuffer+0x208/0x2e0)
> [    4.125682] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> [    4.125695] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [    4.125708] [<c063a718>] (drm_kms_helper_hotplug_event) from
> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> [    4.125722] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
> (tc358764_probe+0xe8/0x15c)
> [    4.125736] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
> (really_probe+0xd8/0x484)
> [    4.125747] [<c06b7414>] (really_probe) from [<c06b7860>]
> (__driver_probe_device+0xa0/0x204)
> [    4.125759] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> (driver_probe_device+0x34/0xc4)
> [    4.125771] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
> (__device_attach_driver+0xa4/0x11c)
> [    4.125784] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
> (bus_for_each_drv+0x7c/0xc0)
> [    4.125796] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
> (__device_attach+0xc8/0x1d0)
> [    4.125807] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
> (bus_probe_device+0x88/0x90)
> [    4.125818] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
> (deferred_probe_work_func+0x98/0xe0)
> [    4.125830] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
> (process_one_work+0x288/0x7a4)
> [    4.125843] [<c01470ec>] (process_one_work) from [<c014764c>]
> (worker_thread+0x44/0x534)
> [    4.125853] [<c014764c>] (worker_thread) from [<c01500ac>]
> (kthread+0x158/0x190)
> [    4.125863] [<c01500ac>] (kthread) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    4.125872] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
> [    4.125879] 1fa0:                                     00000000
> 00000000 00000000 00000000
> [    4.125886] 1fc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    4.125893] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    4.125900] irq event stamp: 18917
> [    4.125908] hardirqs last  enabled at (18923): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    4.125922] hardirqs last disabled at (18928): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    4.125934] softirqs last  enabled at (18882): [<c0101578>]
> __do_softirq+0x348/0x610
> [    4.125945] softirqs last disabled at (18877): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    4.125957] ---[ end trace ab5bb577f0c45837 ]---
> [    4.126167] ------------[ cut here ]------------
> [    4.126175] WARNING: CPU: 1 PID: 7 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    4.126190] Modules linked in:
> [    4.126205] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    4.126213] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    4.126219] Workqueue: events_unbound deferred_probe_work_func
> [    4.126232] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    4.126245] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    4.126258] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    4.126269] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    4.126279] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    4.126290] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    4.126301] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    4.126310] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    4.126323] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    4.126336] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> [    4.126349] [<c064fe38>] (drm_fb_helper_pan_display) from
> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> [    4.126362] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> (bit_update_start+0x14/0x30)
> [    4.126375] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> (fbcon_switch+0x2ec/0x454)
> [    4.126385] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> (redraw_screen+0xdc/0x230)
> [    4.126397] [<c0606fe0>] (redraw_screen) from [<c05b795c>]
> (fbcon_prepare_logo+0x38c/0x450)
> [    4.126408] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>]
> (fbcon_init+0x42c/0x518)
> [    4.126419] [<c05b883c>] (fbcon_init) from [<c060636c>]
> (visual_init+0xc0/0x108)
> [    4.126430] [<c060636c>] (visual_init) from [<c06085e4>]
> (do_bind_con_driver+0x1b8/0x3a4)
> [    4.126442] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> (do_take_over_console+0x13c/0x1e8)
> [    4.126455] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> (do_fbcon_takeover+0x78/0xd8)
> [    4.126466] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> (register_framebuffer+0x208/0x2e0)
> [    4.126478] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> [    4.126491] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [    4.126503] [<c063a718>] (drm_kms_helper_hotplug_event) from
> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> [    4.126516] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
> (tc358764_probe+0xe8/0x15c)
> [    4.126528] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
> (really_probe+0xd8/0x484)
> [    4.126540] [<c06b7414>] (really_probe) from [<c06b7860>]
> (__driver_probe_device+0xa0/0x204)
> [    4.126552] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> (driver_probe_device+0x34/0xc4)
> [    4.126564] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
> (__device_attach_driver+0xa4/0x11c)
> [    4.126577] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
> (bus_for_each_drv+0x7c/0xc0)
> [    4.126589] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
> (__device_attach+0xc8/0x1d0)
> [    4.126600] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
> (bus_probe_device+0x88/0x90)
> [    4.126611] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
> (deferred_probe_work_func+0x98/0xe0)
> [    4.126623] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
> (process_one_work+0x288/0x7a4)
> [    4.126634] [<c01470ec>] (process_one_work) from [<c014764c>]
> (worker_thread+0x44/0x534)
> [    4.126644] [<c014764c>] (worker_thread) from [<c01500ac>]
> (kthread+0x158/0x190)
> [    4.126654] [<c01500ac>] (kthread) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    4.126663] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
> [    4.126670] 1fa0:                                     00000000
> 00000000 00000000 00000000
> [    4.126676] 1fc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    4.126683] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    4.126689] irq event stamp: 19009
> [    4.126697] hardirqs last  enabled at (19015): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    4.126709] hardirqs last disabled at (19020): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    4.126721] softirqs last  enabled at (18882): [<c0101578>]
> __do_softirq+0x348/0x610
> [    4.126731] softirqs last disabled at (18877): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    4.126743] ---[ end trace ab5bb577f0c45838 ]---
> [    4.129425] Console: switching to colour frame buffer device 146x42
> [    4.129562] ------------[ cut here ]------------
> [    4.129570] WARNING: CPU: 1 PID: 7 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [    4.129585] Modules linked in:
> [    4.129599] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W
> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> [    4.129607] Hardware name: Samsung Exynos (Flattened Device Tree)
> [    4.129613] Workqueue: events_unbound deferred_probe_work_func
> [    4.129626] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [    4.129639] [<c010c618>] (show_stack) from [<c0b657d4>]
> (dump_stack_lvl+0x58/0x70)
> [    4.129651] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [    4.129663] [<c01261dc>] (__warn) from [<c0b5f628>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [    4.129673] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [    4.129684] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [    4.129695] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [    4.129704] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [    4.129716] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [    4.129729] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> [    4.129742] [<c064fe38>] (drm_fb_helper_pan_display) from
> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> [    4.129755] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> (bit_update_start+0x14/0x30)
> [    4.129767] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> (fbcon_switch+0x2ec/0x454)
> [    4.129778] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> (redraw_screen+0xdc/0x230)
> [    4.129790] [<c0606fe0>] (redraw_screen) from [<c0608708>]
> (do_bind_con_driver+0x2dc/0x3a4)
> [    4.129802] [<c0608708>] (do_bind_con_driver) from [<c0608b40>]
> (do_take_over_console+0x13c/0x1e8)
> [    4.129815] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> (do_fbcon_takeover+0x78/0xd8)
> [    4.129827] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> (register_framebuffer+0x208/0x2e0)
> [    4.129839] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> [    4.129852] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [    4.129863] [<c063a718>] (drm_kms_helper_hotplug_event) from
> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> [    4.129876] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
> (tc358764_probe+0xe8/0x15c)
> [    4.129888] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
> (really_probe+0xd8/0x484)
> [    4.129900] [<c06b7414>] (really_probe) from [<c06b7860>]
> (__driver_probe_device+0xa0/0x204)
> [    4.129912] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> (driver_probe_device+0x34/0xc4)
> [    4.129924] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
> (__device_attach_driver+0xa4/0x11c)
> [    4.129936] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
> (bus_for_each_drv+0x7c/0xc0)
> [    4.129948] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
> (__device_attach+0xc8/0x1d0)
> [    4.129960] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
> (bus_probe_device+0x88/0x90)
> [    4.129971] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
> (deferred_probe_work_func+0x98/0xe0)
> [    4.129983] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
> (process_one_work+0x288/0x7a4)
> [    4.129995] [<c01470ec>] (process_one_work) from [<c014764c>]
> (worker_thread+0x44/0x534)
> [    4.130005] [<c014764c>] (worker_thread) from [<c01500ac>]
> (kthread+0x158/0x190)
> [    4.130014] [<c01500ac>] (kthread) from [<c0100108>]
> (ret_from_fork+0x14/0x2c)
> [    4.130023] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
> [    4.130030] 1fa0:                                     00000000
> 00000000 00000000 00000000
> [    4.130037] 1fc0: 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000 00000000
> [    4.130043] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> [    4.130049] irq event stamp: 19103
> [    4.130057] hardirqs last  enabled at (19109): [<c01a0acc>]
> vprintk_emit+0x2ac/0x2d0
> [    4.130069] hardirqs last disabled at (19114): [<c01a0a88>]
> vprintk_emit+0x268/0x2d0
> [    4.130081] softirqs last  enabled at (18882): [<c0101578>]
> __do_softirq+0x348/0x610
> [    4.130091] softirqs last disabled at (18877): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [    4.130103] ---[ end trace ab5bb577f0c45839 ]---
> [    4.175229] usb 1-3.2: new high-speed USB device number 3 using
> exynos-ehci
> [    4.179270] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device
>
> There is something seriously broken with connector setup (Arndale board):
>
> # ./modetest -C -Mexynos
> [   37.803987] ------------[ cut here ]------------
> [   37.807883] WARNING: CPU: 1 PID: 1296 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [   37.819952] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem
> videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common
> videodev mc
> [   37.832906] CPU: 1 PID: 1296 Comm: modetest Tainted: G W
> 5.16.0-rc1-00004-gd0885f6a52ee #11059
> [   37.842588] Hardware name: Samsung Exynos (Flattened Device Tree)
> [   37.848667] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [   37.856390] [<c010c618>] (show_stack) from [<c0b658a4>]
> (dump_stack_lvl+0x58/0x70)
> [   37.863942] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [   37.871233] [<c01261dc>] (__warn) from [<c0b5f6f8>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [   37.878697] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [   37.889374] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [   37.901265] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [   37.912115] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [   37.923139] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [   37.934248] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> [   37.944665] [<c067e98c>] (drm_client_modeset_commit) from
> [<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
> [   37.954300] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>]
> (drm_release+0x114/0x14c)
> [   37.962893] [<c0652b7c>] (drm_release) from [<c02dc400>]
> (__fput+0x88/0x258)
> [   37.969924] [<c02dc400>] (__fput) from [<c014cd44>]
> (task_work_run+0x8c/0xc8)
> [   37.977041] [<c014cd44>] (task_work_run) from [<c010c08c>]
> (do_work_pending+0x4a4/0x598)
> [   37.985114] [<c010c08c>] (do_work_pending) from [<c0100088>]
> (slow_work_pending+0xc/0x20)
> [   37.993272] Exception stack(0xc3577fb0 to 0xc3577ff8)
> [   37.998309] 7fa0:                                     00000000
> 0000001f 85024200 00000000
> [   38.006469] 7fc0: 00000001 00000003 00000000 00000006 00022188
> 00000000 b6f6c000 00000000
> [   38.014628] 7fe0: b6e6daa0 bec90a98 0000e7c4 b6e6dac0 60000010 00000003
> [   38.021474] irq event stamp: 3541
> [   38.024718] hardirqs last  enabled at (3553): [<c01598ec>]
> finish_task_switch+0x110/0x368
> [   38.032840] hardirqs last disabled at (3564): [<c0b6cc7c>]
> __schedule+0x4e4/0xa6c
> [   38.040321] softirqs last  enabled at (3580): [<c0101578>]
> __do_softirq+0x348/0x610
> [   38.048072] softirqs last disabled at (3573): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [   38.055797] ---[ end trace cfeb2d6c6e65009a ]---
> could not get connector 62: N[   38.062741] ------------[ cut here
> ]------------
> [   38.067551] WARNING: CPU: 0 PID: 1296 at
> drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> [   38.080014] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem
> videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common
> videodev mc
> [   38.092947] CPU: 0 PID: 1296 Comm: modetest Tainted: G W
> 5.16.0-rc1-00004-gd0885f6a52ee #11059
> [   38.102727] Hardware name: Samsung Exynos (Flattened Device Tree)
> [   38.108806] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> (show_stack+0x10/0x14)
> [   38.116529] [<c010c618>] (show_stack) from [<c0b658a4>]
> (dump_stack_lvl+0x58/0x70)
> [   38.124081] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>]
> (__warn+0xd0/0x134)
> [   38.131373] [<c01261dc>] (__warn) from [<c0b5f6f8>]
> (warn_slowpath_fmt+0x5c/0xb4)
> [   38.138837] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> [   38.149514] [<c064bce4>]
> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> (drm_atomic_get_connector_state+0xd4/0x190)
> [   38.161405] [<c0666b64>] (drm_atomic_get_connector_state) from
> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> [   38.172255] [<c0667928>] (__drm_atomic_helper_set_config) from
> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> [   38.183279] [<c067e628>] (drm_client_modeset_commit_atomic) from
> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> [   38.194388] [<c067e800>] (drm_client_modeset_commit_locked) from
> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> [   38.204804] [<c067e98c>] (drm_client_modeset_commit) from
> [<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
> [   38.214439] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>]
> (drm_release+0x114/0x14c)
> [   38.223032] [<c0652b7c>] (drm_release) from [<c02dc400>]
> (__fput+0x88/0x258)
> [   38.230063] [<c02dc400>] (__fput) from [<c014cd44>]
> (task_work_run+0x8c/0xc8)
> [   38.234727] dwmmc_exynos 12200000.mmc: Unexpected interrupt latency
> [   38.237178] [<c014cd44>] (task_work_run) from [<c012b5ac>]
> (do_exit+0x390/0xaf0)
> [   38.250809] [<c012b5ac>] (do_exit) from [<c012d040>]
> (do_group_exit+0x2c/0xa0)
> [   38.258013] [<c012d040>] (do_group_exit) from [<c013b8f4>]
> (get_signal+0x140/0xab8)
> [   38.265651] [<c013b8f4>] (get_signal) from [<c010bd0c>]
> (do_work_pending+0x124/0x598)
> [   38.273463] [<c010bd0c>] (do_work_pending) from [<c0100088>]
> (slow_work_pending+0xc/0x20)
> [   38.281622] Exception stack(0xc3577fb0 to 0xc3577ff8)
> [   38.286659] 7fa0:                                     00000008
> 0000005f 00000002 00023388
> [   38.294819] 7fc0: 00000001 000232a8 00000000 00023398 0000003e
> 00000000 00023360 00000000
> [   38.302978] 7fe0: 00023590 bec90ae8 00009ec0 00009e9c 80000010 ffffffff
> [   38.310025] irq event stamp: 4059
> [   38.312910] hardirqs last  enabled at (4069): [<c019d7f4>]
> __up_console_sem+0x50/0x60
> [   38.320780] hardirqs last disabled at (4078): [<c019d7e0>]
> __up_console_sem+0x3c/0x60
> [   38.328617] softirqs last  enabled at (4054): [<c0101578>]
> __do_softirq+0x348/0x610
> [   38.336222] softirqs last disabled at (4013): [<c012e7a4>]
> __irq_exit_rcu+0x144/0x1ec
> [   38.343942] ---[ end trace cfeb2d6c6e65009b ]---
> o such file or directory
> Segmentation fault

Thanks for testing it.

Can you test it on the downstream bridge, tc358764 and post the result?

Jagan,

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 13:56             ` Jagan Teki
@ 2021-12-13 14:12               ` Marek Szyprowski
  2021-12-14 10:47                 ` Jagan Teki
  0 siblings, 1 reply; 23+ messages in thread
From: Marek Szyprowski @ 2021-12-13 14:12 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Jagan,

On 13.12.2021 14:56, Jagan Teki wrote:
> On Mon, Dec 13, 2021 at 6:51 PM Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
>> On 13.12.2021 13:31, Jagan Teki wrote:
>>> On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
>>> <m.szyprowski@samsung.com> wrote:
>>>> On 13.12.2021 13:08, Jagan Teki wrote:
>>>>> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
>>>>> <m.szyprowski@samsung.com> wrote:
>>>>>> On 12.12.2021 19:14, Jagan Teki wrote:
>>>>>>> Updated series about drm bridge conversion of exynos dsi.
>>>>>>>
>>>>>>> Patch 1: panel checker
>>>>>>>
>>>>>>> Patch 2: panel_bridge API
>>>>>>>
>>>>>>> Patch 3: Bridge conversion
>>>>>>>
>>>>>>> Patch 4: pree_enable, post_disable
>>>>>>>
>>>>>>> Patch 5: Atomic functions
>>>>>>>
>>>>>>> Patch 6: atomic_set
>>>>>>>
>>>>>>> Patch 7: DSI init in enable
>>>>>>>
>>>>>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
>>>>>>>
>>>>>>> Any inputs?
>>>>>> I've checked this patchset on Exynos based Trats2 board (the one with
>>>>>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
>>>>>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
>>>>>> exynos: dsi: Use drm panel_bridge API"):
>>>>>>
>>>>>> # dmesg | grep drm
>>>>>> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
>>>>>> mapping operations
>>>>>> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
>>>>>> fimd_component_ops)
>>>>>> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
>>>>>> exynos_dsi_component_ops)
>>>>>> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
>>>>>> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
>>>>>> minor 0
>>>>>> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
>>>>>> *ERROR* failed to find the bridge: -19
>>>>> Look like you have missed to apply the Child lookup patch. is it so?
>>>>>
>>>>> Let me send it, I will CC you as well. And I will also send tc358764
>>>>> panel_bridge conversion.
>>>> The above log is from Trats2 board, which uses only the s6e8aa0 DSI
>>>> panel. I've also checked the Arndale board, which has tc358764 bridge
>>>> and it also doesn't work. Which patches I have to apply for the tests?
>>> [PATCH v2] drm: of: Lookup if child node has panel or bridge
>>> [PATCH] drm: bridge: tc358764: Use drm panel_bridge API
>> Ok, I've applied both. Still no success on Trats:
>>
>> [    2.451632] exynos4-fb 11c00000.fimd: Adding to iommu group 0
>> [    2.458137] OF: graph: no port node found in /soc/fimd@11c00000
>> [    2.476903] [drm] Exynos DRM: using 11c00000.fimd device for DMA
>> mapping operations
>> [    2.483905] exynos-drm exynos-drm: bound 11c00000.fimd (ops
>> fimd_component_ops)
>> [    2.490858] OF: graph: no port node found in /soc/dsi@11c80000
>> [    2.500283] exynos-drm exynos-drm: bound 11c80000.dsi (ops
>> exynos_dsi_component_ops)
>> [    2.508490] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
>> [    2.520121] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
>> minor 0
>> [    2.537231] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
>> Attached s6e8aa0 device
>> [    2.566358] ------------[ cut here ]------------
>> [    2.569894] WARNING: CPU: 1 PID: 29 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    2.586123] Modules linked in:
>> [    2.586171] CPU: 1 PID: 29 Comm: kworker/1:2 Not tainted
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    2.586190] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    2.586203] Workqueue: events output_poll_execute
>> [    2.586235] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    2.586267] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    2.586299] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    2.586324] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    2.586346] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    2.586371] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    2.586398] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    2.586421] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    2.586453] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    2.586479] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
>> [    2.586505] [<c067e98c>] (drm_client_modeset_commit) from
>> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
>> [    2.586535] [<c06509c0>] (drm_fb_helper_set_par) from [<c0650aa8>]
>> (drm_fb_helper_hotplug_event.part.0+0xa8/0xc0)
>> [    2.586560] [<c0650aa8>] (drm_fb_helper_hotplug_event.part.0) from
>> [<c063ab40>] (output_poll_execute+0xac/0x21c)
>> [    2.586585] [<c063ab40>] (output_poll_execute) from [<c01470ec>]
>> (process_one_work+0x288/0x7a4)
>> [    2.586611] [<c01470ec>] (process_one_work) from [<c014764c>]
>> (worker_thread+0x44/0x534)
>> [    2.586633] [<c014764c>] (worker_thread) from [<c01500ac>]
>> (kthread+0x158/0x190)
>> [    2.586655] [<c01500ac>] (kthread) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    2.586675] Exception stack(0xc1f6ffb0 to 0xc1f6fff8)
>> [    2.586690] ffa0:                                     00000000
>> 00000000 00000000 00000000
>> [    2.586705] ffc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    2.586720] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    2.586734] irq event stamp: 449
>> [    2.586749] hardirqs last  enabled at (455): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    2.586780] hardirqs last disabled at (460): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    2.586804] softirqs last  enabled at (430): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    2.586829] softirqs last disabled at (425): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    2.586902] ---[ end trace e6002ef7c126805b ]---
>> [    2.587418] ------------[ cut here ]------------
>> [    2.587452] WARNING: CPU: 1 PID: 1 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    2.587485] Modules linked in:
>> [    2.587518] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    2.587535] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    2.587548] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    2.587576] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    2.587605] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    2.587628] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    2.587650] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    2.587676] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    2.587700] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    2.587724] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    2.587751] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    2.587778] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
>> [    2.587804] [<c067e98c>] (drm_client_modeset_commit) from
>> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
>> [    2.587831] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>]
>> (fbcon_init+0x2c0/0x518)
>> [    2.587858] [<c05b86d0>] (fbcon_init) from [<c060636c>]
>> (visual_init+0xc0/0x108)
>> [    2.587888] [<c060636c>] (visual_init) from [<c06085e4>]
>> (do_bind_con_driver+0x1b8/0x3a4)
>> [    2.587915] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
>> (do_take_over_console+0x13c/0x1e8)
>> [    2.587942] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
>> (do_fbcon_takeover+0x78/0xd8)
>> [    2.587968] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
>> (register_framebuffer+0x208/0x2e0)
>> [    2.588001] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
>> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
>> [    2.588028] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
>> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
>> [    2.588053] [<c063a718>] (drm_kms_helper_hotplug_event) from
>> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
>> [    2.588088] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
>> (s6e8aa0_probe+0x1b4/0x218)
>> [    2.588117] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
>> (really_probe+0xd8/0x484)
>> [    2.588147] [<c06b7414>] (really_probe) from [<c06b7860>]
>> (__driver_probe_device+0xa0/0x204)
>> [    2.588172] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
>> (driver_probe_device+0x34/0xc4)
>> [    2.588197] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
>> (__driver_attach+0xf0/0x1d4)
>> [    2.588222] [<c06b819c>] (__driver_attach) from [<c06b5164>]
>> (bus_for_each_dev+0x70/0xb0)
>> [    2.588246] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
>> (bus_add_driver+0x170/0x20c)
>> [    2.588270] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
>> (driver_register+0x88/0x118)
>> [    2.588294] [<c06b8c08>] (driver_register) from [<c01021e8>]
>> (do_one_initcall+0x64/0x380)
>> [    2.588320] [<c01021e8>] (do_one_initcall) from [<c110123c>]
>> (kernel_init_freeable+0x1c0/0x224)
>> [    2.588353] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
>> (kernel_init+0x18/0x12c)
>> [    2.588380] [<c0b6ba54>] (kernel_init) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    2.588401] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
>> [    2.588416] 5fa0:                                     00000000
>> 00000000 00000000 00000000
>> [    2.588432] 5fc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    2.588446] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    2.588460] irq event stamp: 175387
>> [    2.588477] hardirqs last  enabled at (175393): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    2.588506] hardirqs last disabled at (175398): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    2.588531] softirqs last  enabled at (171796): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    2.588555] softirqs last disabled at (171781): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    2.588581] ---[ end trace e6002ef7c126805c ]---
>> [    2.588971] ------------[ cut here ]------------
>> [    2.588989] WARNING: CPU: 1 PID: 1 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    2.589022] Modules linked in:
>> [    2.589053] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    2.589072] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    2.589085] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    2.589113] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    2.589140] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    2.589165] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    2.589187] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    2.589212] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    2.589237] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    2.589260] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    2.589288] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    2.589314] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
>> [    2.589342] [<c064fe38>] (drm_fb_helper_pan_display) from
>> [<c05b024c>] (fb_pan_display+0x9c/0x114)
>> [    2.589372] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
>> (bit_update_start+0x14/0x30)
>> [    2.589398] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
>> (fbcon_switch+0x2ec/0x454)
>> [    2.589422] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
>> (redraw_screen+0xdc/0x230)
>> [    2.589448] [<c0606fe0>] (redraw_screen) from [<c05b795c>]
>> (fbcon_prepare_logo+0x38c/0x450)
>> [    2.589472] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>]
>> (fbcon_init+0x42c/0x518)
>> [    2.589495] [<c05b883c>] (fbcon_init) from [<c060636c>]
>> (visual_init+0xc0/0x108)
>> [    2.589518] [<c060636c>] (visual_init) from [<c06085e4>]
>> (do_bind_con_driver+0x1b8/0x3a4)
>> [    2.589544] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
>> (do_take_over_console+0x13c/0x1e8)
>> [    2.589571] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
>> (do_fbcon_takeover+0x78/0xd8)
>> [    2.589596] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
>> (register_framebuffer+0x208/0x2e0)
>> [    2.589622] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
>> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
>> [    2.589649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
>> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
>> [    2.589675] [<c063a718>] (drm_kms_helper_hotplug_event) from
>> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
>> [    2.589704] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
>> (s6e8aa0_probe+0x1b4/0x218)
>> [    2.589731] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
>> (really_probe+0xd8/0x484)
>> [    2.589758] [<c06b7414>] (really_probe) from [<c06b7860>]
>> (__driver_probe_device+0xa0/0x204)
>> [    2.589783] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
>> (driver_probe_device+0x34/0xc4)
>> [    2.589808] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
>> (__driver_attach+0xf0/0x1d4)
>> [    2.589832] [<c06b819c>] (__driver_attach) from [<c06b5164>]
>> (bus_for_each_dev+0x70/0xb0)
>> [    2.589856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
>> (bus_add_driver+0x170/0x20c)
>> [    2.589879] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
>> (driver_register+0x88/0x118)
>> [    2.589904] [<c06b8c08>] (driver_register) from [<c01021e8>]
>> (do_one_initcall+0x64/0x380)
>> [    2.589929] [<c01021e8>] (do_one_initcall) from [<c110123c>]
>> (kernel_init_freeable+0x1c0/0x224)
>> [    2.589956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
>> (kernel_init+0x18/0x12c)
>> [    2.589982] [<c0b6ba54>] (kernel_init) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    2.590002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
>> [    2.590017] 5fa0:                                     00000000
>> 00000000 00000000 00000000
>> [    2.590033] 5fc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    2.590047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    2.590061] irq event stamp: 175453
>> [    2.590079] hardirqs last  enabled at (175459): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    2.590107] hardirqs last disabled at (175464): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    2.590132] softirqs last  enabled at (171796): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    2.590156] softirqs last disabled at (171781): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    2.590183] ---[ end trace e6002ef7c126805d ]---
>> [    2.609799] Console: switching to colour frame buffer device 102x91
>> [    2.610039] ------------[ cut here ]------------
>> [    2.610057] WARNING: CPU: 1 PID: 1 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    2.610090] Modules linked in:
>> [    2.610122] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    2.610140] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    2.610153] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    2.610180] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    2.610208] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    2.610231] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    2.610254] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    2.610279] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    2.610305] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    2.610327] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    2.610355] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    2.610382] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
>> [    2.610410] [<c064fe38>] (drm_fb_helper_pan_display) from
>> [<c05b024c>] (fb_pan_display+0x9c/0x114)
>> [    2.610439] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
>> (bit_update_start+0x14/0x30)
>> [    2.610465] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
>> (fbcon_switch+0x2ec/0x454)
>> [    2.610489] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
>> (redraw_screen+0xdc/0x230)
>> [    2.610515] [<c0606fe0>] (redraw_screen) from [<c0608708>]
>> (do_bind_con_driver+0x2dc/0x3a4)
>> [    2.610543] [<c0608708>] (do_bind_con_driver) from [<c0608b40>]
>> (do_take_over_console+0x13c/0x1e8)
>> [    2.610570] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
>> (do_fbcon_takeover+0x78/0xd8)
>> [    2.610595] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
>> (register_framebuffer+0x208/0x2e0)
>> [    2.610621] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
>> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
>> [    2.610649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
>> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
>> [    2.610674] [<c063a718>] (drm_kms_helper_hotplug_event) from
>> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
>> [    2.610703] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
>> (s6e8aa0_probe+0x1b4/0x218)
>> [    2.610730] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
>> (really_probe+0xd8/0x484)
>> [    2.610756] [<c06b7414>] (really_probe) from [<c06b7860>]
>> (__driver_probe_device+0xa0/0x204)
>> [    2.610782] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
>> (driver_probe_device+0x34/0xc4)
>> [    2.610807] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
>> (__driver_attach+0xf0/0x1d4)
>> [    2.610832] [<c06b819c>] (__driver_attach) from [<c06b5164>]
>> (bus_for_each_dev+0x70/0xb0)
>> [    2.610856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
>> (bus_add_driver+0x170/0x20c)
>> [    2.610880] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
>> (driver_register+0x88/0x118)
>> [    2.610904] [<c06b8c08>] (driver_register) from [<c01021e8>]
>> (do_one_initcall+0x64/0x380)
>> [    2.610929] [<c01021e8>] (do_one_initcall) from [<c110123c>]
>> (kernel_init_freeable+0x1c0/0x224)
>> [    2.610956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
>> (kernel_init+0x18/0x12c)
>> [    2.610982] [<c0b6ba54>] (kernel_init) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    2.611002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
>> [    2.611017] 5fa0:                                     00000000
>> 00000000 00000000 00000000
>> [    2.611033] 5fc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    2.611047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    2.611062] irq event stamp: 175539
>> [    2.611079] hardirqs last  enabled at (175545): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    2.611108] hardirqs last disabled at (175550): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    2.611134] softirqs last  enabled at (171796): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    2.611158] softirqs last disabled at (171781): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    2.611185] ---[ end trace e6002ef7c126805e ]---
>> [    6.173152] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device
>>
>> After the 2nd patch ("[PATCH v3 2/7] drm: exynos: dsi: Use drm
>> panel_bridge API") the display stops working.
>>
>> Here is the log from Arndale board (which also doesn't work after the
>> 2nd path):
>>
>> [    3.739197] OF: graph: no port node found in /soc/hdmi@14530000
>> [    3.747930] [drm] Exynos DRM: using 14400000.fimd device for DMA
>> mapping operations
>> [    3.754385] exynos-drm exynos-drm: bound 14400000.fimd (ops
>> fimd_component_ops)
>> [    3.762985] exynos-drm exynos-drm: bound 14450000.mixer (ops
>> mixer_component_ops)
>> [    3.769332] OF: graph: no port node found in /soc/dsi@14500000
>> [    3.779055] exynos-drm exynos-drm: bound 14500000.dsi (ops
>> exynos_dsi_component_ops)
>> [    3.785997] exynos-drm exynos-drm: bound 14530000.hdmi (ops
>> hdmi_component_ops)
>> [    3.795431] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
>> [    3.801975] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
>> [    3.811501] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
>> minor 0
>> [    3.818349] usb 1-3: New USB device found, idVendor=0424,
>> idProduct=3503, bcdDevice=a1.a0
>> [    3.825602] usb 1-3: New USB device strings: Mfr=0, Product=0,
>> SerialNumber=0
>> [    3.833782] panfrost 11800000.gpu: clock rate = 533000000
>> [    3.835556] hub 1-3:1.0: USB hub found
>> [    3.842054] hub 1-3:1.0: 3 ports detected
>> [    3.861628] panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor
>> 0x0 status 0x1
>> [    3.868077] panfrost 11800000.gpu: features: 00000000,10206000,
>> issues: 00000000,31b4dfff
>> [    3.876202] panfrost 11800000.gpu: Features: L2:0x07110206
>> Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
>> [    3.887853] panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
>> [    3.897532] [drm] Initialized panfrost 1.2.0 20180908 for
>> 11800000.gpu on minor 1
>> [    3.919339] wm8994 3-001a: WM1811 revision D CUST_ID 00
>> [    3.933753] wm8994 3-001a: No interrupt specified, no interrupts
>> [    4.111656] exynos-dsi 14500000.dsi: [drm:exynos_dsi_host_attach]
>> Attached tc358764 device
>> [    4.125346] ------------[ cut here ]------------
>> [    4.125392] WARNING: CPU: 1 PID: 7 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    4.125412] Modules linked in:
>> [    4.125428] CPU: 1 PID: 7 Comm: kworker/u4:0 Not tainted
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    4.125438] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    4.125444] Workqueue: events_unbound deferred_probe_work_func
>> [    4.125461] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    4.125477] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    4.125492] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    4.125505] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    4.125515] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    4.125527] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    4.125538] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    4.125549] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    4.125562] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    4.125575] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
>> [    4.125588] [<c067e98c>] (drm_client_modeset_commit) from
>> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
>> [    4.125603] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>]
>> (fbcon_init+0x2c0/0x518)
>> [    4.125615] [<c05b86d0>] (fbcon_init) from [<c060636c>]
>> (visual_init+0xc0/0x108)
>> [    4.125628] [<c060636c>] (visual_init) from [<c06085e4>]
>> (do_bind_con_driver+0x1b8/0x3a4)
>> [    4.125641] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
>> (do_take_over_console+0x13c/0x1e8)
>> [    4.125654] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
>> (do_fbcon_takeover+0x78/0xd8)
>> [    4.125666] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
>> (register_framebuffer+0x208/0x2e0)
>> [    4.125682] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
>> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
>> [    4.125695] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
>> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
>> [    4.125708] [<c063a718>] (drm_kms_helper_hotplug_event) from
>> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
>> [    4.125722] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
>> (tc358764_probe+0xe8/0x15c)
>> [    4.125736] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
>> (really_probe+0xd8/0x484)
>> [    4.125747] [<c06b7414>] (really_probe) from [<c06b7860>]
>> (__driver_probe_device+0xa0/0x204)
>> [    4.125759] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
>> (driver_probe_device+0x34/0xc4)
>> [    4.125771] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
>> (__device_attach_driver+0xa4/0x11c)
>> [    4.125784] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
>> (bus_for_each_drv+0x7c/0xc0)
>> [    4.125796] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
>> (__device_attach+0xc8/0x1d0)
>> [    4.125807] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
>> (bus_probe_device+0x88/0x90)
>> [    4.125818] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
>> (deferred_probe_work_func+0x98/0xe0)
>> [    4.125830] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
>> (process_one_work+0x288/0x7a4)
>> [    4.125843] [<c01470ec>] (process_one_work) from [<c014764c>]
>> (worker_thread+0x44/0x534)
>> [    4.125853] [<c014764c>] (worker_thread) from [<c01500ac>]
>> (kthread+0x158/0x190)
>> [    4.125863] [<c01500ac>] (kthread) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    4.125872] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
>> [    4.125879] 1fa0:                                     00000000
>> 00000000 00000000 00000000
>> [    4.125886] 1fc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    4.125893] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    4.125900] irq event stamp: 18917
>> [    4.125908] hardirqs last  enabled at (18923): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    4.125922] hardirqs last disabled at (18928): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    4.125934] softirqs last  enabled at (18882): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    4.125945] softirqs last disabled at (18877): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    4.125957] ---[ end trace ab5bb577f0c45837 ]---
>> [    4.126167] ------------[ cut here ]------------
>> [    4.126175] WARNING: CPU: 1 PID: 7 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    4.126190] Modules linked in:
>> [    4.126205] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    4.126213] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    4.126219] Workqueue: events_unbound deferred_probe_work_func
>> [    4.126232] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    4.126245] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    4.126258] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    4.126269] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    4.126279] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    4.126290] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    4.126301] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    4.126310] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    4.126323] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    4.126336] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
>> [    4.126349] [<c064fe38>] (drm_fb_helper_pan_display) from
>> [<c05b024c>] (fb_pan_display+0x9c/0x114)
>> [    4.126362] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
>> (bit_update_start+0x14/0x30)
>> [    4.126375] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
>> (fbcon_switch+0x2ec/0x454)
>> [    4.126385] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
>> (redraw_screen+0xdc/0x230)
>> [    4.126397] [<c0606fe0>] (redraw_screen) from [<c05b795c>]
>> (fbcon_prepare_logo+0x38c/0x450)
>> [    4.126408] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>]
>> (fbcon_init+0x42c/0x518)
>> [    4.126419] [<c05b883c>] (fbcon_init) from [<c060636c>]
>> (visual_init+0xc0/0x108)
>> [    4.126430] [<c060636c>] (visual_init) from [<c06085e4>]
>> (do_bind_con_driver+0x1b8/0x3a4)
>> [    4.126442] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
>> (do_take_over_console+0x13c/0x1e8)
>> [    4.126455] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
>> (do_fbcon_takeover+0x78/0xd8)
>> [    4.126466] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
>> (register_framebuffer+0x208/0x2e0)
>> [    4.126478] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
>> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
>> [    4.126491] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
>> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
>> [    4.126503] [<c063a718>] (drm_kms_helper_hotplug_event) from
>> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
>> [    4.126516] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
>> (tc358764_probe+0xe8/0x15c)
>> [    4.126528] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
>> (really_probe+0xd8/0x484)
>> [    4.126540] [<c06b7414>] (really_probe) from [<c06b7860>]
>> (__driver_probe_device+0xa0/0x204)
>> [    4.126552] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
>> (driver_probe_device+0x34/0xc4)
>> [    4.126564] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
>> (__device_attach_driver+0xa4/0x11c)
>> [    4.126577] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
>> (bus_for_each_drv+0x7c/0xc0)
>> [    4.126589] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
>> (__device_attach+0xc8/0x1d0)
>> [    4.126600] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
>> (bus_probe_device+0x88/0x90)
>> [    4.126611] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
>> (deferred_probe_work_func+0x98/0xe0)
>> [    4.126623] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
>> (process_one_work+0x288/0x7a4)
>> [    4.126634] [<c01470ec>] (process_one_work) from [<c014764c>]
>> (worker_thread+0x44/0x534)
>> [    4.126644] [<c014764c>] (worker_thread) from [<c01500ac>]
>> (kthread+0x158/0x190)
>> [    4.126654] [<c01500ac>] (kthread) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    4.126663] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
>> [    4.126670] 1fa0:                                     00000000
>> 00000000 00000000 00000000
>> [    4.126676] 1fc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    4.126683] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    4.126689] irq event stamp: 19009
>> [    4.126697] hardirqs last  enabled at (19015): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    4.126709] hardirqs last disabled at (19020): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    4.126721] softirqs last  enabled at (18882): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    4.126731] softirqs last disabled at (18877): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    4.126743] ---[ end trace ab5bb577f0c45838 ]---
>> [    4.129425] Console: switching to colour frame buffer device 146x42
>> [    4.129562] ------------[ cut here ]------------
>> [    4.129570] WARNING: CPU: 1 PID: 7 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [    4.129585] Modules linked in:
>> [    4.129599] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W
>> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
>> [    4.129607] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [    4.129613] Workqueue: events_unbound deferred_probe_work_func
>> [    4.129626] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [    4.129639] [<c010c618>] (show_stack) from [<c0b657d4>]
>> (dump_stack_lvl+0x58/0x70)
>> [    4.129651] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [    4.129663] [<c01261dc>] (__warn) from [<c0b5f628>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [    4.129673] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [    4.129684] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [    4.129695] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [    4.129704] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [    4.129716] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [    4.129729] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
>> [    4.129742] [<c064fe38>] (drm_fb_helper_pan_display) from
>> [<c05b024c>] (fb_pan_display+0x9c/0x114)
>> [    4.129755] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
>> (bit_update_start+0x14/0x30)
>> [    4.129767] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
>> (fbcon_switch+0x2ec/0x454)
>> [    4.129778] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
>> (redraw_screen+0xdc/0x230)
>> [    4.129790] [<c0606fe0>] (redraw_screen) from [<c0608708>]
>> (do_bind_con_driver+0x2dc/0x3a4)
>> [    4.129802] [<c0608708>] (do_bind_con_driver) from [<c0608b40>]
>> (do_take_over_console+0x13c/0x1e8)
>> [    4.129815] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
>> (do_fbcon_takeover+0x78/0xd8)
>> [    4.129827] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
>> (register_framebuffer+0x208/0x2e0)
>> [    4.129839] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
>> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
>> [    4.129852] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
>> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
>> [    4.129863] [<c063a718>] (drm_kms_helper_hotplug_event) from
>> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
>> [    4.129876] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
>> (tc358764_probe+0xe8/0x15c)
>> [    4.129888] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
>> (really_probe+0xd8/0x484)
>> [    4.129900] [<c06b7414>] (really_probe) from [<c06b7860>]
>> (__driver_probe_device+0xa0/0x204)
>> [    4.129912] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
>> (driver_probe_device+0x34/0xc4)
>> [    4.129924] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
>> (__device_attach_driver+0xa4/0x11c)
>> [    4.129936] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
>> (bus_for_each_drv+0x7c/0xc0)
>> [    4.129948] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
>> (__device_attach+0xc8/0x1d0)
>> [    4.129960] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
>> (bus_probe_device+0x88/0x90)
>> [    4.129971] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
>> (deferred_probe_work_func+0x98/0xe0)
>> [    4.129983] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
>> (process_one_work+0x288/0x7a4)
>> [    4.129995] [<c01470ec>] (process_one_work) from [<c014764c>]
>> (worker_thread+0x44/0x534)
>> [    4.130005] [<c014764c>] (worker_thread) from [<c01500ac>]
>> (kthread+0x158/0x190)
>> [    4.130014] [<c01500ac>] (kthread) from [<c0100108>]
>> (ret_from_fork+0x14/0x2c)
>> [    4.130023] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
>> [    4.130030] 1fa0:                                     00000000
>> 00000000 00000000 00000000
>> [    4.130037] 1fc0: 00000000 00000000 00000000 00000000 00000000
>> 00000000 00000000 00000000
>> [    4.130043] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
>> [    4.130049] irq event stamp: 19103
>> [    4.130057] hardirqs last  enabled at (19109): [<c01a0acc>]
>> vprintk_emit+0x2ac/0x2d0
>> [    4.130069] hardirqs last disabled at (19114): [<c01a0a88>]
>> vprintk_emit+0x268/0x2d0
>> [    4.130081] softirqs last  enabled at (18882): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [    4.130091] softirqs last disabled at (18877): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [    4.130103] ---[ end trace ab5bb577f0c45839 ]---
>> [    4.175229] usb 1-3.2: new high-speed USB device number 3 using
>> exynos-ehci
>> [    4.179270] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device
>>
>> There is something seriously broken with connector setup (Arndale board):
>>
>> # ./modetest -C -Mexynos
>> [   37.803987] ------------[ cut here ]------------
>> [   37.807883] WARNING: CPU: 1 PID: 1296 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [   37.819952] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem
>> videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common
>> videodev mc
>> [   37.832906] CPU: 1 PID: 1296 Comm: modetest Tainted: G W
>> 5.16.0-rc1-00004-gd0885f6a52ee #11059
>> [   37.842588] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [   37.848667] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [   37.856390] [<c010c618>] (show_stack) from [<c0b658a4>]
>> (dump_stack_lvl+0x58/0x70)
>> [   37.863942] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [   37.871233] [<c01261dc>] (__warn) from [<c0b5f6f8>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [   37.878697] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [   37.889374] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [   37.901265] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [   37.912115] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [   37.923139] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [   37.934248] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
>> [   37.944665] [<c067e98c>] (drm_client_modeset_commit) from
>> [<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
>> [   37.954300] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>]
>> (drm_release+0x114/0x14c)
>> [   37.962893] [<c0652b7c>] (drm_release) from [<c02dc400>]
>> (__fput+0x88/0x258)
>> [   37.969924] [<c02dc400>] (__fput) from [<c014cd44>]
>> (task_work_run+0x8c/0xc8)
>> [   37.977041] [<c014cd44>] (task_work_run) from [<c010c08c>]
>> (do_work_pending+0x4a4/0x598)
>> [   37.985114] [<c010c08c>] (do_work_pending) from [<c0100088>]
>> (slow_work_pending+0xc/0x20)
>> [   37.993272] Exception stack(0xc3577fb0 to 0xc3577ff8)
>> [   37.998309] 7fa0:                                     00000000
>> 0000001f 85024200 00000000
>> [   38.006469] 7fc0: 00000001 00000003 00000000 00000006 00022188
>> 00000000 b6f6c000 00000000
>> [   38.014628] 7fe0: b6e6daa0 bec90a98 0000e7c4 b6e6dac0 60000010 00000003
>> [   38.021474] irq event stamp: 3541
>> [   38.024718] hardirqs last  enabled at (3553): [<c01598ec>]
>> finish_task_switch+0x110/0x368
>> [   38.032840] hardirqs last disabled at (3564): [<c0b6cc7c>]
>> __schedule+0x4e4/0xa6c
>> [   38.040321] softirqs last  enabled at (3580): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [   38.048072] softirqs last disabled at (3573): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [   38.055797] ---[ end trace cfeb2d6c6e65009a ]---
>> could not get connector 62: N[   38.062741] ------------[ cut here
>> ]------------
>> [   38.067551] WARNING: CPU: 0 PID: 1296 at
>> drivers/gpu/drm/drm_atomic_state_helper.c:494
>> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
>> [   38.080014] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem
>> videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common
>> videodev mc
>> [   38.092947] CPU: 0 PID: 1296 Comm: modetest Tainted: G W
>> 5.16.0-rc1-00004-gd0885f6a52ee #11059
>> [   38.102727] Hardware name: Samsung Exynos (Flattened Device Tree)
>> [   38.108806] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
>> (show_stack+0x10/0x14)
>> [   38.116529] [<c010c618>] (show_stack) from [<c0b658a4>]
>> (dump_stack_lvl+0x58/0x70)
>> [   38.124081] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>]
>> (__warn+0xd0/0x134)
>> [   38.131373] [<c01261dc>] (__warn) from [<c0b5f6f8>]
>> (warn_slowpath_fmt+0x5c/0xb4)
>> [   38.138837] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
>> [   38.149514] [<c064bce4>]
>> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
>> (drm_atomic_get_connector_state+0xd4/0x190)
>> [   38.161405] [<c0666b64>] (drm_atomic_get_connector_state) from
>> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
>> [   38.172255] [<c0667928>] (__drm_atomic_helper_set_config) from
>> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
>> [   38.183279] [<c067e628>] (drm_client_modeset_commit_atomic) from
>> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
>> [   38.194388] [<c067e800>] (drm_client_modeset_commit_locked) from
>> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
>> [   38.204804] [<c067e98c>] (drm_client_modeset_commit) from
>> [<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
>> [   38.214439] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>]
>> (drm_release+0x114/0x14c)
>> [   38.223032] [<c0652b7c>] (drm_release) from [<c02dc400>]
>> (__fput+0x88/0x258)
>> [   38.230063] [<c02dc400>] (__fput) from [<c014cd44>]
>> (task_work_run+0x8c/0xc8)
>> [   38.234727] dwmmc_exynos 12200000.mmc: Unexpected interrupt latency
>> [   38.237178] [<c014cd44>] (task_work_run) from [<c012b5ac>]
>> (do_exit+0x390/0xaf0)
>> [   38.250809] [<c012b5ac>] (do_exit) from [<c012d040>]
>> (do_group_exit+0x2c/0xa0)
>> [   38.258013] [<c012d040>] (do_group_exit) from [<c013b8f4>]
>> (get_signal+0x140/0xab8)
>> [   38.265651] [<c013b8f4>] (get_signal) from [<c010bd0c>]
>> (do_work_pending+0x124/0x598)
>> [   38.273463] [<c010bd0c>] (do_work_pending) from [<c0100088>]
>> (slow_work_pending+0xc/0x20)
>> [   38.281622] Exception stack(0xc3577fb0 to 0xc3577ff8)
>> [   38.286659] 7fa0:                                     00000008
>> 0000005f 00000002 00023388
>> [   38.294819] 7fc0: 00000001 000232a8 00000000 00023398 0000003e
>> 00000000 00023360 00000000
>> [   38.302978] 7fe0: 00023590 bec90ae8 00009ec0 00009e9c 80000010 ffffffff
>> [   38.310025] irq event stamp: 4059
>> [   38.312910] hardirqs last  enabled at (4069): [<c019d7f4>]
>> __up_console_sem+0x50/0x60
>> [   38.320780] hardirqs last disabled at (4078): [<c019d7e0>]
>> __up_console_sem+0x3c/0x60
>> [   38.328617] softirqs last  enabled at (4054): [<c0101578>]
>> __do_softirq+0x348/0x610
>> [   38.336222] softirqs last disabled at (4013): [<c012e7a4>]
>> __irq_exit_rcu+0x144/0x1ec
>> [   38.343942] ---[ end trace cfeb2d6c6e65009b ]---
>> o such file or directory
>> Segmentation fault
> Thanks for testing it.
>
> Can you test it on the downstream bridge, tc358764 and post the result?

There were 2 logs in my reply. One from trats2 board (just dsi panel) 
and one from arndale (tc bridge + simple panel).

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-13 14:12               ` Marek Szyprowski
@ 2021-12-14 10:47                 ` Jagan Teki
  2021-12-15  6:09                   ` Marek Szyprowski
  0 siblings, 1 reply; 23+ messages in thread
From: Jagan Teki @ 2021-12-14 10:47 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Marek,

On Mon, Dec 13, 2021 at 7:42 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>
> Hi Jagan,
>
> On 13.12.2021 14:56, Jagan Teki wrote:
> > On Mon, Dec 13, 2021 at 6:51 PM Marek Szyprowski
> > <m.szyprowski@samsung.com> wrote:
> >> On 13.12.2021 13:31, Jagan Teki wrote:
> >>> On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
> >>> <m.szyprowski@samsung.com> wrote:
> >>>> On 13.12.2021 13:08, Jagan Teki wrote:
> >>>>> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
> >>>>> <m.szyprowski@samsung.com> wrote:
> >>>>>> On 12.12.2021 19:14, Jagan Teki wrote:
> >>>>>>> Updated series about drm bridge conversion of exynos dsi.
> >>>>>>>
> >>>>>>> Patch 1: panel checker
> >>>>>>>
> >>>>>>> Patch 2: panel_bridge API
> >>>>>>>
> >>>>>>> Patch 3: Bridge conversion
> >>>>>>>
> >>>>>>> Patch 4: pree_enable, post_disable
> >>>>>>>
> >>>>>>> Patch 5: Atomic functions
> >>>>>>>
> >>>>>>> Patch 6: atomic_set
> >>>>>>>
> >>>>>>> Patch 7: DSI init in enable
> >>>>>>>
> >>>>>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
> >>>>>>>
> >>>>>>> Any inputs?
> >>>>>> I've checked this patchset on Exynos based Trats2 board (the one with
> >>>>>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
> >>>>>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
> >>>>>> exynos: dsi: Use drm panel_bridge API"):
> >>>>>>
> >>>>>> # dmesg | grep drm
> >>>>>> [    2.511893] [drm] Exynos DRM: using 11c00000.fimd device for DMA
> >>>>>> mapping operations
> >>>>>> [    2.518653] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> >>>>>> fimd_component_ops)
> >>>>>> [    2.535699] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> >>>>>> exynos_dsi_component_ops)
> >>>>>> [    2.543912] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> >>>>>> [    2.556107] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> >>>>>> minor 0
> >>>>>> [    2.573212] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
> >>>>>> *ERROR* failed to find the bridge: -19
> >>>>> Look like you have missed to apply the Child lookup patch. is it so?
> >>>>>
> >>>>> Let me send it, I will CC you as well. And I will also send tc358764
> >>>>> panel_bridge conversion.
> >>>> The above log is from Trats2 board, which uses only the s6e8aa0 DSI
> >>>> panel. I've also checked the Arndale board, which has tc358764 bridge
> >>>> and it also doesn't work. Which patches I have to apply for the tests?
> >>> [PATCH v2] drm: of: Lookup if child node has panel or bridge
> >>> [PATCH] drm: bridge: tc358764: Use drm panel_bridge API
> >> Ok, I've applied both. Still no success on Trats:
> >>
> >> [    2.451632] exynos4-fb 11c00000.fimd: Adding to iommu group 0
> >> [    2.458137] OF: graph: no port node found in /soc/fimd@11c00000
> >> [    2.476903] [drm] Exynos DRM: using 11c00000.fimd device for DMA
> >> mapping operations
> >> [    2.483905] exynos-drm exynos-drm: bound 11c00000.fimd (ops
> >> fimd_component_ops)
> >> [    2.490858] OF: graph: no port node found in /soc/dsi@11c80000
> >> [    2.500283] exynos-drm exynos-drm: bound 11c80000.dsi (ops
> >> exynos_dsi_component_ops)
> >> [    2.508490] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> >> [    2.520121] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> >> minor 0
> >> [    2.537231] exynos-dsi 11c80000.dsi: [drm:exynos_dsi_host_attach]
> >> Attached s6e8aa0 device
> >> [    2.566358] ------------[ cut here ]------------
> >> [    2.569894] WARNING: CPU: 1 PID: 29 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    2.586123] Modules linked in:
> >> [    2.586171] CPU: 1 PID: 29 Comm: kworker/1:2 Not tainted
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    2.586190] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    2.586203] Workqueue: events output_poll_execute
> >> [    2.586235] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    2.586267] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    2.586299] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    2.586324] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    2.586346] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    2.586371] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    2.586398] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    2.586421] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    2.586453] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    2.586479] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> >> [    2.586505] [<c067e98c>] (drm_client_modeset_commit) from
> >> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
> >> [    2.586535] [<c06509c0>] (drm_fb_helper_set_par) from [<c0650aa8>]
> >> (drm_fb_helper_hotplug_event.part.0+0xa8/0xc0)
> >> [    2.586560] [<c0650aa8>] (drm_fb_helper_hotplug_event.part.0) from
> >> [<c063ab40>] (output_poll_execute+0xac/0x21c)
> >> [    2.586585] [<c063ab40>] (output_poll_execute) from [<c01470ec>]
> >> (process_one_work+0x288/0x7a4)
> >> [    2.586611] [<c01470ec>] (process_one_work) from [<c014764c>]
> >> (worker_thread+0x44/0x534)
> >> [    2.586633] [<c014764c>] (worker_thread) from [<c01500ac>]
> >> (kthread+0x158/0x190)
> >> [    2.586655] [<c01500ac>] (kthread) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    2.586675] Exception stack(0xc1f6ffb0 to 0xc1f6fff8)
> >> [    2.586690] ffa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    2.586705] ffc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    2.586720] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    2.586734] irq event stamp: 449
> >> [    2.586749] hardirqs last  enabled at (455): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    2.586780] hardirqs last disabled at (460): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    2.586804] softirqs last  enabled at (430): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    2.586829] softirqs last disabled at (425): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    2.586902] ---[ end trace e6002ef7c126805b ]---
> >> [    2.587418] ------------[ cut here ]------------
> >> [    2.587452] WARNING: CPU: 1 PID: 1 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    2.587485] Modules linked in:
> >> [    2.587518] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    2.587535] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    2.587548] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    2.587576] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    2.587605] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    2.587628] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    2.587650] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    2.587676] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    2.587700] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    2.587724] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    2.587751] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    2.587778] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> >> [    2.587804] [<c067e98c>] (drm_client_modeset_commit) from
> >> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
> >> [    2.587831] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>]
> >> (fbcon_init+0x2c0/0x518)
> >> [    2.587858] [<c05b86d0>] (fbcon_init) from [<c060636c>]
> >> (visual_init+0xc0/0x108)
> >> [    2.587888] [<c060636c>] (visual_init) from [<c06085e4>]
> >> (do_bind_con_driver+0x1b8/0x3a4)
> >> [    2.587915] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> >> (do_take_over_console+0x13c/0x1e8)
> >> [    2.587942] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> >> (do_fbcon_takeover+0x78/0xd8)
> >> [    2.587968] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> >> (register_framebuffer+0x208/0x2e0)
> >> [    2.588001] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> >> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> >> [    2.588028] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> >> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> >> [    2.588053] [<c063a718>] (drm_kms_helper_hotplug_event) from
> >> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> >> [    2.588088] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
> >> (s6e8aa0_probe+0x1b4/0x218)
> >> [    2.588117] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
> >> (really_probe+0xd8/0x484)
> >> [    2.588147] [<c06b7414>] (really_probe) from [<c06b7860>]
> >> (__driver_probe_device+0xa0/0x204)
> >> [    2.588172] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> >> (driver_probe_device+0x34/0xc4)
> >> [    2.588197] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
> >> (__driver_attach+0xf0/0x1d4)
> >> [    2.588222] [<c06b819c>] (__driver_attach) from [<c06b5164>]
> >> (bus_for_each_dev+0x70/0xb0)
> >> [    2.588246] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
> >> (bus_add_driver+0x170/0x20c)
> >> [    2.588270] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
> >> (driver_register+0x88/0x118)
> >> [    2.588294] [<c06b8c08>] (driver_register) from [<c01021e8>]
> >> (do_one_initcall+0x64/0x380)
> >> [    2.588320] [<c01021e8>] (do_one_initcall) from [<c110123c>]
> >> (kernel_init_freeable+0x1c0/0x224)
> >> [    2.588353] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
> >> (kernel_init+0x18/0x12c)
> >> [    2.588380] [<c0b6ba54>] (kernel_init) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    2.588401] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
> >> [    2.588416] 5fa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    2.588432] 5fc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    2.588446] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    2.588460] irq event stamp: 175387
> >> [    2.588477] hardirqs last  enabled at (175393): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    2.588506] hardirqs last disabled at (175398): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    2.588531] softirqs last  enabled at (171796): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    2.588555] softirqs last disabled at (171781): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    2.588581] ---[ end trace e6002ef7c126805c ]---
> >> [    2.588971] ------------[ cut here ]------------
> >> [    2.588989] WARNING: CPU: 1 PID: 1 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    2.589022] Modules linked in:
> >> [    2.589053] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    2.589072] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    2.589085] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    2.589113] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    2.589140] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    2.589165] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    2.589187] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    2.589212] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    2.589237] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    2.589260] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    2.589288] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    2.589314] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> >> [    2.589342] [<c064fe38>] (drm_fb_helper_pan_display) from
> >> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> >> [    2.589372] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> >> (bit_update_start+0x14/0x30)
> >> [    2.589398] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> >> (fbcon_switch+0x2ec/0x454)
> >> [    2.589422] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> >> (redraw_screen+0xdc/0x230)
> >> [    2.589448] [<c0606fe0>] (redraw_screen) from [<c05b795c>]
> >> (fbcon_prepare_logo+0x38c/0x450)
> >> [    2.589472] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>]
> >> (fbcon_init+0x42c/0x518)
> >> [    2.589495] [<c05b883c>] (fbcon_init) from [<c060636c>]
> >> (visual_init+0xc0/0x108)
> >> [    2.589518] [<c060636c>] (visual_init) from [<c06085e4>]
> >> (do_bind_con_driver+0x1b8/0x3a4)
> >> [    2.589544] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> >> (do_take_over_console+0x13c/0x1e8)
> >> [    2.589571] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> >> (do_fbcon_takeover+0x78/0xd8)
> >> [    2.589596] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> >> (register_framebuffer+0x208/0x2e0)
> >> [    2.589622] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> >> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> >> [    2.589649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> >> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> >> [    2.589675] [<c063a718>] (drm_kms_helper_hotplug_event) from
> >> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> >> [    2.589704] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
> >> (s6e8aa0_probe+0x1b4/0x218)
> >> [    2.589731] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
> >> (really_probe+0xd8/0x484)
> >> [    2.589758] [<c06b7414>] (really_probe) from [<c06b7860>]
> >> (__driver_probe_device+0xa0/0x204)
> >> [    2.589783] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> >> (driver_probe_device+0x34/0xc4)
> >> [    2.589808] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
> >> (__driver_attach+0xf0/0x1d4)
> >> [    2.589832] [<c06b819c>] (__driver_attach) from [<c06b5164>]
> >> (bus_for_each_dev+0x70/0xb0)
> >> [    2.589856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
> >> (bus_add_driver+0x170/0x20c)
> >> [    2.589879] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
> >> (driver_register+0x88/0x118)
> >> [    2.589904] [<c06b8c08>] (driver_register) from [<c01021e8>]
> >> (do_one_initcall+0x64/0x380)
> >> [    2.589929] [<c01021e8>] (do_one_initcall) from [<c110123c>]
> >> (kernel_init_freeable+0x1c0/0x224)
> >> [    2.589956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
> >> (kernel_init+0x18/0x12c)
> >> [    2.589982] [<c0b6ba54>] (kernel_init) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    2.590002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
> >> [    2.590017] 5fa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    2.590033] 5fc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    2.590047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    2.590061] irq event stamp: 175453
> >> [    2.590079] hardirqs last  enabled at (175459): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    2.590107] hardirqs last disabled at (175464): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    2.590132] softirqs last  enabled at (171796): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    2.590156] softirqs last disabled at (171781): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    2.590183] ---[ end trace e6002ef7c126805d ]---
> >> [    2.609799] Console: switching to colour frame buffer device 102x91
> >> [    2.610039] ------------[ cut here ]------------
> >> [    2.610057] WARNING: CPU: 1 PID: 1 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    2.610090] Modules linked in:
> >> [    2.610122] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G W
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    2.610140] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    2.610153] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    2.610180] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    2.610208] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    2.610231] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    2.610254] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    2.610279] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    2.610305] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    2.610327] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    2.610355] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    2.610382] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> >> [    2.610410] [<c064fe38>] (drm_fb_helper_pan_display) from
> >> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> >> [    2.610439] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> >> (bit_update_start+0x14/0x30)
> >> [    2.610465] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> >> (fbcon_switch+0x2ec/0x454)
> >> [    2.610489] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> >> (redraw_screen+0xdc/0x230)
> >> [    2.610515] [<c0606fe0>] (redraw_screen) from [<c0608708>]
> >> (do_bind_con_driver+0x2dc/0x3a4)
> >> [    2.610543] [<c0608708>] (do_bind_con_driver) from [<c0608b40>]
> >> (do_take_over_console+0x13c/0x1e8)
> >> [    2.610570] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> >> (do_fbcon_takeover+0x78/0xd8)
> >> [    2.610595] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> >> (register_framebuffer+0x208/0x2e0)
> >> [    2.610621] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> >> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> >> [    2.610649] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> >> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> >> [    2.610674] [<c063a718>] (drm_kms_helper_hotplug_event) from
> >> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> >> [    2.610703] [<c068f668>] (exynos_dsi_host_attach) from [<c0699354>]
> >> (s6e8aa0_probe+0x1b4/0x218)
> >> [    2.610730] [<c0699354>] (s6e8aa0_probe) from [<c06b7414>]
> >> (really_probe+0xd8/0x484)
> >> [    2.610756] [<c06b7414>] (really_probe) from [<c06b7860>]
> >> (__driver_probe_device+0xa0/0x204)
> >> [    2.610782] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> >> (driver_probe_device+0x34/0xc4)
> >> [    2.610807] [<c06b79f8>] (driver_probe_device) from [<c06b819c>]
> >> (__driver_attach+0xf0/0x1d4)
> >> [    2.610832] [<c06b819c>] (__driver_attach) from [<c06b5164>]
> >> (bus_for_each_dev+0x70/0xb0)
> >> [    2.610856] [<c06b5164>] (bus_for_each_dev) from [<c06b65ec>]
> >> (bus_add_driver+0x170/0x20c)
> >> [    2.610880] [<c06b65ec>] (bus_add_driver) from [<c06b8c08>]
> >> (driver_register+0x88/0x118)
> >> [    2.610904] [<c06b8c08>] (driver_register) from [<c01021e8>]
> >> (do_one_initcall+0x64/0x380)
> >> [    2.610929] [<c01021e8>] (do_one_initcall) from [<c110123c>]
> >> (kernel_init_freeable+0x1c0/0x224)
> >> [    2.610956] [<c110123c>] (kernel_init_freeable) from [<c0b6ba54>]
> >> (kernel_init+0x18/0x12c)
> >> [    2.610982] [<c0b6ba54>] (kernel_init) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    2.611002] Exception stack(0xc1cb5fb0 to 0xc1cb5ff8)
> >> [    2.611017] 5fa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    2.611033] 5fc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    2.611047] 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    2.611062] irq event stamp: 175539
> >> [    2.611079] hardirqs last  enabled at (175545): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    2.611108] hardirqs last disabled at (175550): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    2.611134] softirqs last  enabled at (171796): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    2.611158] softirqs last disabled at (171781): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    2.611185] ---[ end trace e6002ef7c126805e ]---
> >> [    6.173152] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device
> >>
> >> After the 2nd patch ("[PATCH v3 2/7] drm: exynos: dsi: Use drm
> >> panel_bridge API") the display stops working.
> >>
> >> Here is the log from Arndale board (which also doesn't work after the
> >> 2nd path):
> >>
> >> [    3.739197] OF: graph: no port node found in /soc/hdmi@14530000
> >> [    3.747930] [drm] Exynos DRM: using 14400000.fimd device for DMA
> >> mapping operations
> >> [    3.754385] exynos-drm exynos-drm: bound 14400000.fimd (ops
> >> fimd_component_ops)
> >> [    3.762985] exynos-drm exynos-drm: bound 14450000.mixer (ops
> >> mixer_component_ops)
> >> [    3.769332] OF: graph: no port node found in /soc/dsi@14500000
> >> [    3.779055] exynos-drm exynos-drm: bound 14500000.dsi (ops
> >> exynos_dsi_component_ops)
> >> [    3.785997] exynos-drm exynos-drm: bound 14530000.hdmi (ops
> >> hdmi_component_ops)
> >> [    3.795431] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> >> [    3.801975] exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> >> [    3.811501] [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on
> >> minor 0
> >> [    3.818349] usb 1-3: New USB device found, idVendor=0424,
> >> idProduct=3503, bcdDevice=a1.a0
> >> [    3.825602] usb 1-3: New USB device strings: Mfr=0, Product=0,
> >> SerialNumber=0
> >> [    3.833782] panfrost 11800000.gpu: clock rate = 533000000
> >> [    3.835556] hub 1-3:1.0: USB hub found
> >> [    3.842054] hub 1-3:1.0: 3 ports detected
> >> [    3.861628] panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor
> >> 0x0 status 0x1
> >> [    3.868077] panfrost 11800000.gpu: features: 00000000,10206000,
> >> issues: 00000000,31b4dfff
> >> [    3.876202] panfrost 11800000.gpu: Features: L2:0x07110206
> >> Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
> >> [    3.887853] panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
> >> [    3.897532] [drm] Initialized panfrost 1.2.0 20180908 for
> >> 11800000.gpu on minor 1
> >> [    3.919339] wm8994 3-001a: WM1811 revision D CUST_ID 00
> >> [    3.933753] wm8994 3-001a: No interrupt specified, no interrupts
> >> [    4.111656] exynos-dsi 14500000.dsi: [drm:exynos_dsi_host_attach]
> >> Attached tc358764 device
> >> [    4.125346] ------------[ cut here ]------------
> >> [    4.125392] WARNING: CPU: 1 PID: 7 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    4.125412] Modules linked in:
> >> [    4.125428] CPU: 1 PID: 7 Comm: kworker/u4:0 Not tainted
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    4.125438] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    4.125444] Workqueue: events_unbound deferred_probe_work_func
> >> [    4.125461] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    4.125477] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    4.125492] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    4.125505] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    4.125515] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    4.125527] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    4.125538] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    4.125549] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    4.125562] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    4.125575] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> >> [    4.125588] [<c067e98c>] (drm_client_modeset_commit) from
> >> [<c06509c0>] (drm_fb_helper_set_par+0xb8/0xf8)
> >> [    4.125603] [<c06509c0>] (drm_fb_helper_set_par) from [<c05b86d0>]
> >> (fbcon_init+0x2c0/0x518)
> >> [    4.125615] [<c05b86d0>] (fbcon_init) from [<c060636c>]
> >> (visual_init+0xc0/0x108)
> >> [    4.125628] [<c060636c>] (visual_init) from [<c06085e4>]
> >> (do_bind_con_driver+0x1b8/0x3a4)
> >> [    4.125641] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> >> (do_take_over_console+0x13c/0x1e8)
> >> [    4.125654] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> >> (do_fbcon_takeover+0x78/0xd8)
> >> [    4.125666] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> >> (register_framebuffer+0x208/0x2e0)
> >> [    4.125682] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> >> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> >> [    4.125695] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> >> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> >> [    4.125708] [<c063a718>] (drm_kms_helper_hotplug_event) from
> >> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> >> [    4.125722] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
> >> (tc358764_probe+0xe8/0x15c)
> >> [    4.125736] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
> >> (really_probe+0xd8/0x484)
> >> [    4.125747] [<c06b7414>] (really_probe) from [<c06b7860>]
> >> (__driver_probe_device+0xa0/0x204)
> >> [    4.125759] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> >> (driver_probe_device+0x34/0xc4)
> >> [    4.125771] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
> >> (__device_attach_driver+0xa4/0x11c)
> >> [    4.125784] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
> >> (bus_for_each_drv+0x7c/0xc0)
> >> [    4.125796] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
> >> (__device_attach+0xc8/0x1d0)
> >> [    4.125807] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
> >> (bus_probe_device+0x88/0x90)
> >> [    4.125818] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
> >> (deferred_probe_work_func+0x98/0xe0)
> >> [    4.125830] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
> >> (process_one_work+0x288/0x7a4)
> >> [    4.125843] [<c01470ec>] (process_one_work) from [<c014764c>]
> >> (worker_thread+0x44/0x534)
> >> [    4.125853] [<c014764c>] (worker_thread) from [<c01500ac>]
> >> (kthread+0x158/0x190)
> >> [    4.125863] [<c01500ac>] (kthread) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    4.125872] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
> >> [    4.125879] 1fa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    4.125886] 1fc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    4.125893] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    4.125900] irq event stamp: 18917
> >> [    4.125908] hardirqs last  enabled at (18923): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    4.125922] hardirqs last disabled at (18928): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    4.125934] softirqs last  enabled at (18882): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    4.125945] softirqs last disabled at (18877): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    4.125957] ---[ end trace ab5bb577f0c45837 ]---
> >> [    4.126167] ------------[ cut here ]------------
> >> [    4.126175] WARNING: CPU: 1 PID: 7 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    4.126190] Modules linked in:
> >> [    4.126205] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    4.126213] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    4.126219] Workqueue: events_unbound deferred_probe_work_func
> >> [    4.126232] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    4.126245] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    4.126258] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    4.126269] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    4.126279] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    4.126290] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    4.126301] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    4.126310] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    4.126323] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    4.126336] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> >> [    4.126349] [<c064fe38>] (drm_fb_helper_pan_display) from
> >> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> >> [    4.126362] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> >> (bit_update_start+0x14/0x30)
> >> [    4.126375] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> >> (fbcon_switch+0x2ec/0x454)
> >> [    4.126385] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> >> (redraw_screen+0xdc/0x230)
> >> [    4.126397] [<c0606fe0>] (redraw_screen) from [<c05b795c>]
> >> (fbcon_prepare_logo+0x38c/0x450)
> >> [    4.126408] [<c05b795c>] (fbcon_prepare_logo) from [<c05b883c>]
> >> (fbcon_init+0x42c/0x518)
> >> [    4.126419] [<c05b883c>] (fbcon_init) from [<c060636c>]
> >> (visual_init+0xc0/0x108)
> >> [    4.126430] [<c060636c>] (visual_init) from [<c06085e4>]
> >> (do_bind_con_driver+0x1b8/0x3a4)
> >> [    4.126442] [<c06085e4>] (do_bind_con_driver) from [<c0608b40>]
> >> (do_take_over_console+0x13c/0x1e8)
> >> [    4.126455] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> >> (do_fbcon_takeover+0x78/0xd8)
> >> [    4.126466] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> >> (register_framebuffer+0x208/0x2e0)
> >> [    4.126478] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> >> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> >> [    4.126491] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> >> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> >> [    4.126503] [<c063a718>] (drm_kms_helper_hotplug_event) from
> >> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> >> [    4.126516] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
> >> (tc358764_probe+0xe8/0x15c)
> >> [    4.126528] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
> >> (really_probe+0xd8/0x484)
> >> [    4.126540] [<c06b7414>] (really_probe) from [<c06b7860>]
> >> (__driver_probe_device+0xa0/0x204)
> >> [    4.126552] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> >> (driver_probe_device+0x34/0xc4)
> >> [    4.126564] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
> >> (__device_attach_driver+0xa4/0x11c)
> >> [    4.126577] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
> >> (bus_for_each_drv+0x7c/0xc0)
> >> [    4.126589] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
> >> (__device_attach+0xc8/0x1d0)
> >> [    4.126600] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
> >> (bus_probe_device+0x88/0x90)
> >> [    4.126611] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
> >> (deferred_probe_work_func+0x98/0xe0)
> >> [    4.126623] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
> >> (process_one_work+0x288/0x7a4)
> >> [    4.126634] [<c01470ec>] (process_one_work) from [<c014764c>]
> >> (worker_thread+0x44/0x534)
> >> [    4.126644] [<c014764c>] (worker_thread) from [<c01500ac>]
> >> (kthread+0x158/0x190)
> >> [    4.126654] [<c01500ac>] (kthread) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    4.126663] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
> >> [    4.126670] 1fa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    4.126676] 1fc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    4.126683] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    4.126689] irq event stamp: 19009
> >> [    4.126697] hardirqs last  enabled at (19015): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    4.126709] hardirqs last disabled at (19020): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    4.126721] softirqs last  enabled at (18882): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    4.126731] softirqs last disabled at (18877): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    4.126743] ---[ end trace ab5bb577f0c45838 ]---
> >> [    4.129425] Console: switching to colour frame buffer device 146x42
> >> [    4.129562] ------------[ cut here ]------------
> >> [    4.129570] WARNING: CPU: 1 PID: 7 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [    4.129585] Modules linked in:
> >> [    4.129599] CPU: 1 PID: 7 Comm: kworker/u4:0 Tainted: G W
> >> 5.16.0-rc1-00009-g704b1dbfa4c2 #11058
> >> [    4.129607] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [    4.129613] Workqueue: events_unbound deferred_probe_work_func
> >> [    4.129626] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [    4.129639] [<c010c618>] (show_stack) from [<c0b657d4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [    4.129651] [<c0b657d4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [    4.129663] [<c01261dc>] (__warn) from [<c0b5f628>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [    4.129673] [<c0b5f628>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [    4.129684] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [    4.129695] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [    4.129704] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [    4.129716] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [    4.129729] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c064fe38>] (drm_fb_helper_pan_display+0x98/0x1c0)
> >> [    4.129742] [<c064fe38>] (drm_fb_helper_pan_display) from
> >> [<c05b024c>] (fb_pan_display+0x9c/0x114)
> >> [    4.129755] [<c05b024c>] (fb_pan_display) from [<c05bac24>]
> >> (bit_update_start+0x14/0x30)
> >> [    4.129767] [<c05bac24>] (bit_update_start) from [<c05b9e58>]
> >> (fbcon_switch+0x2ec/0x454)
> >> [    4.129778] [<c05b9e58>] (fbcon_switch) from [<c0606fe0>]
> >> (redraw_screen+0xdc/0x230)
> >> [    4.129790] [<c0606fe0>] (redraw_screen) from [<c0608708>]
> >> (do_bind_con_driver+0x2dc/0x3a4)
> >> [    4.129802] [<c0608708>] (do_bind_con_driver) from [<c0608b40>]
> >> (do_take_over_console+0x13c/0x1e8)
> >> [    4.129815] [<c0608b40>] (do_take_over_console) from [<c05b6854>]
> >> (do_fbcon_takeover+0x78/0xd8)
> >> [    4.129827] [<c05b6854>] (do_fbcon_takeover) from [<c05b1154>]
> >> (register_framebuffer+0x208/0x2e0)
> >> [    4.129839] [<c05b1154>] (register_framebuffer) from [<c064ead0>]
> >> (__drm_fb_helper_initial_config_and_unlock+0x400/0x63c)
> >> [    4.129852] [<c064ead0>] (__drm_fb_helper_initial_config_and_unlock)
> >> from [<c063a718>] (drm_kms_helper_hotplug_event+0x24/0x30)
> >> [    4.129863] [<c063a718>] (drm_kms_helper_hotplug_event) from
> >> [<c068f668>] (exynos_dsi_host_attach+0x174/0x1fc)
> >> [    4.129876] [<c068f668>] (exynos_dsi_host_attach) from [<c069cef8>]
> >> (tc358764_probe+0xe8/0x15c)
> >> [    4.129888] [<c069cef8>] (tc358764_probe) from [<c06b7414>]
> >> (really_probe+0xd8/0x484)
> >> [    4.129900] [<c06b7414>] (really_probe) from [<c06b7860>]
> >> (__driver_probe_device+0xa0/0x204)
> >> [    4.129912] [<c06b7860>] (__driver_probe_device) from [<c06b79f8>]
> >> (driver_probe_device+0x34/0xc4)
> >> [    4.129924] [<c06b79f8>] (driver_probe_device) from [<c06b8034>]
> >> (__device_attach_driver+0xa4/0x11c)
> >> [    4.129936] [<c06b8034>] (__device_attach_driver) from [<c06b5220>]
> >> (bus_for_each_drv+0x7c/0xc0)
> >> [    4.129948] [<c06b5220>] (bus_for_each_drv) from [<c06b7cd8>]
> >> (__device_attach+0xc8/0x1d0)
> >> [    4.129960] [<c06b7cd8>] (__device_attach) from [<c06b6338>]
> >> (bus_probe_device+0x88/0x90)
> >> [    4.129971] [<c06b6338>] (bus_probe_device) from [<c06b6834>]
> >> (deferred_probe_work_func+0x98/0xe0)
> >> [    4.129983] [<c06b6834>] (deferred_probe_work_func) from [<c01470ec>]
> >> (process_one_work+0x288/0x7a4)
> >> [    4.129995] [<c01470ec>] (process_one_work) from [<c014764c>]
> >> (worker_thread+0x44/0x534)
> >> [    4.130005] [<c014764c>] (worker_thread) from [<c01500ac>]
> >> (kthread+0x158/0x190)
> >> [    4.130014] [<c01500ac>] (kthread) from [<c0100108>]
> >> (ret_from_fork+0x14/0x2c)
> >> [    4.130023] Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
> >> [    4.130030] 1fa0:                                     00000000
> >> 00000000 00000000 00000000
> >> [    4.130037] 1fc0: 00000000 00000000 00000000 00000000 00000000
> >> 00000000 00000000 00000000
> >> [    4.130043] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> >> [    4.130049] irq event stamp: 19103
> >> [    4.130057] hardirqs last  enabled at (19109): [<c01a0acc>]
> >> vprintk_emit+0x2ac/0x2d0
> >> [    4.130069] hardirqs last disabled at (19114): [<c01a0a88>]
> >> vprintk_emit+0x268/0x2d0
> >> [    4.130081] softirqs last  enabled at (18882): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [    4.130091] softirqs last disabled at (18877): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [    4.130103] ---[ end trace ab5bb577f0c45839 ]---
> >> [    4.175229] usb 1-3.2: new high-speed USB device number 3 using
> >> exynos-ehci
> >> [    4.179270] exynos-drm exynos-drm: [drm] fb0: exynos frame buffer device
> >>
> >> There is something seriously broken with connector setup (Arndale board):
> >>
> >> # ./modetest -C -Mexynos
> >> [   37.803987] ------------[ cut here ]------------
> >> [   37.807883] WARNING: CPU: 1 PID: 1296 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [   37.819952] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem
> >> videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common
> >> videodev mc
> >> [   37.832906] CPU: 1 PID: 1296 Comm: modetest Tainted: G W
> >> 5.16.0-rc1-00004-gd0885f6a52ee #11059
> >> [   37.842588] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [   37.848667] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [   37.856390] [<c010c618>] (show_stack) from [<c0b658a4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [   37.863942] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [   37.871233] [<c01261dc>] (__warn) from [<c0b5f6f8>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [   37.878697] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [   37.889374] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [   37.901265] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [   37.912115] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [   37.923139] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [   37.934248] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> >> [   37.944665] [<c067e98c>] (drm_client_modeset_commit) from
> >> [<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
> >> [   37.954300] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>]
> >> (drm_release+0x114/0x14c)
> >> [   37.962893] [<c0652b7c>] (drm_release) from [<c02dc400>]
> >> (__fput+0x88/0x258)
> >> [   37.969924] [<c02dc400>] (__fput) from [<c014cd44>]
> >> (task_work_run+0x8c/0xc8)
> >> [   37.977041] [<c014cd44>] (task_work_run) from [<c010c08c>]
> >> (do_work_pending+0x4a4/0x598)
> >> [   37.985114] [<c010c08c>] (do_work_pending) from [<c0100088>]
> >> (slow_work_pending+0xc/0x20)
> >> [   37.993272] Exception stack(0xc3577fb0 to 0xc3577ff8)
> >> [   37.998309] 7fa0:                                     00000000
> >> 0000001f 85024200 00000000
> >> [   38.006469] 7fc0: 00000001 00000003 00000000 00000006 00022188
> >> 00000000 b6f6c000 00000000
> >> [   38.014628] 7fe0: b6e6daa0 bec90a98 0000e7c4 b6e6dac0 60000010 00000003
> >> [   38.021474] irq event stamp: 3541
> >> [   38.024718] hardirqs last  enabled at (3553): [<c01598ec>]
> >> finish_task_switch+0x110/0x368
> >> [   38.032840] hardirqs last disabled at (3564): [<c0b6cc7c>]
> >> __schedule+0x4e4/0xa6c
> >> [   38.040321] softirqs last  enabled at (3580): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [   38.048072] softirqs last disabled at (3573): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [   38.055797] ---[ end trace cfeb2d6c6e65009a ]---
> >> could not get connector 62: N[   38.062741] ------------[ cut here
> >> ]------------
> >> [   38.067551] WARNING: CPU: 0 PID: 1296 at
> >> drivers/gpu/drm/drm_atomic_state_helper.c:494
> >> drm_atomic_helper_connector_duplicate_state+0x94/0x9c
> >> [   38.080014] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem
> >> videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common
> >> videodev mc
> >> [   38.092947] CPU: 0 PID: 1296 Comm: modetest Tainted: G W
> >> 5.16.0-rc1-00004-gd0885f6a52ee #11059
> >> [   38.102727] Hardware name: Samsung Exynos (Flattened Device Tree)
> >> [   38.108806] [<c0110b30>] (unwind_backtrace) from [<c010c618>]
> >> (show_stack+0x10/0x14)
> >> [   38.116529] [<c010c618>] (show_stack) from [<c0b658a4>]
> >> (dump_stack_lvl+0x58/0x70)
> >> [   38.124081] [<c0b658a4>] (dump_stack_lvl) from [<c01261dc>]
> >> (__warn+0xd0/0x134)
> >> [   38.131373] [<c01261dc>] (__warn) from [<c0b5f6f8>]
> >> (warn_slowpath_fmt+0x5c/0xb4)
> >> [   38.138837] [<c0b5f6f8>] (warn_slowpath_fmt) from [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state+0x94/0x9c)
> >> [   38.149514] [<c064bce4>]
> >> (drm_atomic_helper_connector_duplicate_state) from [<c0666b64>]
> >> (drm_atomic_get_connector_state+0xd4/0x190)
> >> [   38.161405] [<c0666b64>] (drm_atomic_get_connector_state) from
> >> [<c0667928>] (__drm_atomic_helper_set_config+0x314/0x368)
> >> [   38.172255] [<c0667928>] (__drm_atomic_helper_set_config) from
> >> [<c067e628>] (drm_client_modeset_commit_atomic+0x170/0x278)
> >> [   38.183279] [<c067e628>] (drm_client_modeset_commit_atomic) from
> >> [<c067e800>] (drm_client_modeset_commit_locked+0x60/0x1c8)
> >> [   38.194388] [<c067e800>] (drm_client_modeset_commit_locked) from
> >> [<c067e98c>] (drm_client_modeset_commit+0x24/0x40)
> >> [   38.204804] [<c067e98c>] (drm_client_modeset_commit) from
> >> [<c0650c00>] (drm_fb_helper_lastclose+0x4c/0x84)
> >> [   38.214439] [<c0650c00>] (drm_fb_helper_lastclose) from [<c0652b7c>]
> >> (drm_release+0x114/0x14c)
> >> [   38.223032] [<c0652b7c>] (drm_release) from [<c02dc400>]
> >> (__fput+0x88/0x258)
> >> [   38.230063] [<c02dc400>] (__fput) from [<c014cd44>]
> >> (task_work_run+0x8c/0xc8)
> >> [   38.234727] dwmmc_exynos 12200000.mmc: Unexpected interrupt latency
> >> [   38.237178] [<c014cd44>] (task_work_run) from [<c012b5ac>]
> >> (do_exit+0x390/0xaf0)
> >> [   38.250809] [<c012b5ac>] (do_exit) from [<c012d040>]
> >> (do_group_exit+0x2c/0xa0)
> >> [   38.258013] [<c012d040>] (do_group_exit) from [<c013b8f4>]
> >> (get_signal+0x140/0xab8)
> >> [   38.265651] [<c013b8f4>] (get_signal) from [<c010bd0c>]
> >> (do_work_pending+0x124/0x598)
> >> [   38.273463] [<c010bd0c>] (do_work_pending) from [<c0100088>]
> >> (slow_work_pending+0xc/0x20)
> >> [   38.281622] Exception stack(0xc3577fb0 to 0xc3577ff8)
> >> [   38.286659] 7fa0:                                     00000008
> >> 0000005f 00000002 00023388
> >> [   38.294819] 7fc0: 00000001 000232a8 00000000 00023398 0000003e
> >> 00000000 00023360 00000000
> >> [   38.302978] 7fe0: 00023590 bec90ae8 00009ec0 00009e9c 80000010 ffffffff
> >> [   38.310025] irq event stamp: 4059
> >> [   38.312910] hardirqs last  enabled at (4069): [<c019d7f4>]
> >> __up_console_sem+0x50/0x60
> >> [   38.320780] hardirqs last disabled at (4078): [<c019d7e0>]
> >> __up_console_sem+0x3c/0x60
> >> [   38.328617] softirqs last  enabled at (4054): [<c0101578>]
> >> __do_softirq+0x348/0x610
> >> [   38.336222] softirqs last disabled at (4013): [<c012e7a4>]
> >> __irq_exit_rcu+0x144/0x1ec
> >> [   38.343942] ---[ end trace cfeb2d6c6e65009b ]---
> >> o such file or directory
> >> Segmentation fault
> > Thanks for testing it.
> >
> > Can you test it on the downstream bridge, tc358764 and post the result?
>
> There were 2 logs in my reply. One from trats2 board (just dsi panel)
> and one from arndale (tc bridge + simple panel).

Okay. Got it.

Can you test this tc358764 panel_bridge patch on linux-next? don't
apply this series, apply only below patch and test.

https://patchwork.amarulasolutions.com/patch/1824/

Thanks,
Jagan.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code
  2021-12-13  9:57     ` Andrzej Hajda
@ 2021-12-14 19:01       ` Jagan Teki
  0 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-14 19:01 UTC (permalink / raw)
  To: Andrzej Hajda
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Michael Nazzareno Trimarchi, Sam Ravnborg,
	Marek Szyprowski

On Mon, Dec 13, 2021 at 3:27 PM Andrzej Hajda <andrzej.hajda@intel.com> wrote:
>
>
> On 12.12.2021 19:14, Jagan Teki wrote:
> > Existing driver is calling manual bridge pre_enable, enable,
> > disable and post_disable helpers with their enable and
> > disable functions.
> >
> > Separate the enable code with pre_enable and enable helpers
> > like enable the DSI in pre_enable and set the display in enable.
> >
> > Separate the disable code with disable and post_disable helpers
> > like disable the DSI in disable and reset the display in
> > post_disable.
> >
> > This way the bridge functions are compatible with respective
> > downstream bridge and panel_bridge drivers.
> >
> > Example of enable bridge function calls with panel_bridge is,
> >
> > [ 2.079030] panel_bridge_pre_enable: start
> > [ 2.079043] panel_bridge_pre_enable: end!
> > [ 2.079045] exynos_dsi_atomic_pre_enable: start
> > [ 2.079723] exynos_dsi_atomic_pre_enable: end!
> > [ 2.079728] exynos_dsi_atomic_enable: start
> > [ 2.102500] exynos_dsi_atomic_enable: end
> > [ 2.146505] panel_bridge_enable: start
> > [ 2.148547] panel_bridge_enable: enable
> > Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> > ---
> > Changes for v3:
> > - new patch
> >
> >   drivers/gpu/drm/exynos/exynos_drm_dsi.c | 25 ++++++++++++-------------
> >   1 file changed, 12 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > index 1450187c1edc..07083a545948 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
> > @@ -1377,10 +1377,9 @@ static void exynos_dsi_unregister_te_irq(struct exynos_dsi *dsi)
> >       }
> >   }
> >
> > -static void exynos_dsi_enable(struct drm_bridge *bridge)
> > +static void exynos_dsi_pre_enable(struct drm_bridge *bridge)
> >   {
> >       struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> > -     const struct drm_bridge_funcs *funcs = dsi->out_bridge->funcs;
> >       int ret;
> >
> >       if (dsi->state & DSIM_STATE_ENABLED)
> > @@ -1393,38 +1392,36 @@ static void exynos_dsi_enable(struct drm_bridge *bridge)
> >       }
> >
> >       dsi->state |= DSIM_STATE_ENABLED;
> > +}
> >
> > -     if (dsi->out_bridge)
> > -             funcs->pre_enable(dsi->out_bridge);
> > +static void exynos_dsi_enable(struct drm_bridge *bridge)
> > +{
> > +     struct exynos_dsi *dsi = bridge_to_dsi(bridge);
> >
> >       exynos_dsi_set_display_mode(bridge);
> >       exynos_dsi_set_display_enable(dsi, true);
> >
> > -     if (dsi->out_bridge)
> > -             funcs->enable(dsi->out_bridge);
> > -
>
>
> Ok, apparently I haven't catch that in previous patch you have left out
> bridge attached to encoder->bridge_chain, before the previous patch out
> bridge was detached from bridge_chain, which assured exynos_dsi has full
> control about callbacks.
>
> Does it mean that after prev patch all bridge calls were called twice, I
> think it is incorrect.

I think squash this to previous patch make sense. let me know if you
are fine with it?

Thanks,
Jagan.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-14 10:47                 ` Jagan Teki
@ 2021-12-15  6:09                   ` Marek Szyprowski
  2021-12-15  6:28                     ` Jagan Teki
  0 siblings, 1 reply; 23+ messages in thread
From: Marek Szyprowski @ 2021-12-15  6:09 UTC (permalink / raw)
  To: Jagan Teki
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

Hi Jagan,

On 14.12.2021 11:47, Jagan Teki wrote:
> On Mon, Dec 13, 2021 at 7:42 PM Marek Szyprowski
> <m.szyprowski@samsung.com> wrote:
>> On 13.12.2021 14:56, Jagan Teki wrote:
>>> On Mon, Dec 13, 2021 at 6:51 PM Marek Szyprowski
>>> <m.szyprowski@samsung.com> wrote:
>>>> On 13.12.2021 13:31, Jagan Teki wrote:
>>>>> On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
>>>>> <m.szyprowski@samsung.com> wrote:
>>>>>> On 13.12.2021 13:08, Jagan Teki wrote:
>>>>>>> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
>>>>>>> <m.szyprowski@samsung.com> wrote:
>>>>>>>> On 12.12.2021 19:14, Jagan Teki wrote:
>>>>>>>>> Updated series about drm bridge conversion of exynos dsi.
>>>>>>>>>
>>>>>>>>> Patch 1: panel checker
>>>>>>>>>
>>>>>>>>> Patch 2: panel_bridge API
>>>>>>>>>
>>>>>>>>> Patch 3: Bridge conversion
>>>>>>>>>
>>>>>>>>> Patch 4: pree_enable, post_disable
>>>>>>>>>
>>>>>>>>> Patch 5: Atomic functions
>>>>>>>>>
>>>>>>>>> Patch 6: atomic_set
>>>>>>>>>
>>>>>>>>> Patch 7: DSI init in enable
>>>>>>>>>
>>>>>>>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
>>>>>>>>>
>>>>>>>>> Any inputs?
>>>>>>>> I've checked this patchset on Exynos based Trats2 board (the one with
>>>>>>>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
>>>>>>>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
>>>>>>>> exynos: dsi: Use drm panel_bridge API"):
>>>>>>>>
>>>>>>>> > [...]
>>> Thanks for testing it.
>>>
>>> Can you test it on the downstream bridge, tc358764 and post the result?
>> There were 2 logs in my reply. One from trats2 board (just dsi panel)
>> and one from arndale (tc bridge + simple panel).
> Okay. Got it.
>
> Can you test this tc358764 panel_bridge patch on linux-next? don't
> apply this series, apply only below patch and test.
>
Yes, sure. Sadly, it also breaks display operation:

OF: graph: no port node found in /soc/hdmi@14530000
[drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
exynos-drm exynos-drm: bound 14400000.fimd (ops fimd_component_ops)
exynos-drm exynos-drm: bound 14450000.mixer (ops mixer_component_ops)
OF: graph: no port node found in /soc/dsi@14500000
exynos-drm exynos-drm: bound 14500000.dsi (ops exynos_dsi_component_ops)
exynos-drm exynos-drm: bound 14530000.hdmi (ops hdmi_component_ops)
exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
[drm] Initialized exynos 1.1.0 20180330 for exynos-drm on minor 0
panfrost 11800000.gpu: clock rate = 533000000
panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor 0x0 status 0x1
panfrost 11800000.gpu: features: 00000000,10206000, issues: 
00000000,31b4dfff
panfrost 11800000.gpu: Features: L2:0x07110206 Shader:0x00000000 
Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
[drm] Initialized panfrost 1.2.0 20180908 for 11800000.gpu on minor 1
------------[ cut here ]------------
WARNING: CPU: 1 PID: 23 at drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x60/0x68
Modules linked in:
CPU: 1 PID: 23 Comm: kworker/1:1 Not tainted 
5.16.0-rc5-next-20211213-00001-gac4117943791 #11072
Hardware name: Samsung Exynos (Flattened Device Tree)
Workqueue: events output_poll_execute
[<c01110d0>] (unwind_backtrace) from [<c010cab0>] (show_stack+0x10/0x14)
[<c010cab0>] (show_stack) from [<c0b71b58>] (dump_stack_lvl+0x58/0x70)
[<c0b71b58>] (dump_stack_lvl) from [<c0126c9c>] (__warn+0x228/0x22c)
[<c0126c9c>] (__warn) from [<c0126d4c>] (warn_slowpath_fmt+0xac/0xb4)
[<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state+0x60/0x68)
[<c064e844>] (drm_atomic_helper_connector_duplicate_state) from 
[<c06685f4>] (drm_atomic_get_connector_state+0xd8/0x190)
[<c06685f4>] (drm_atomic_get_connector_state) from [<c066960c>] 
(__drm_atomic_helper_set_config+0x2a0/0x368)
[<c066960c>] (__drm_atomic_helper_set_config) from [<c0680a20>] 
(drm_client_modeset_commit_atomic+0x178/0x27c)
[<c0680a20>] (drm_client_modeset_commit_atomic) from [<c0680be0>] 
(drm_client_modeset_commit_locked+0x48/0x1d0)
[<c0680be0>] (drm_client_modeset_commit_locked) from [<c0680d8c>] 
(drm_client_modeset_commit+0x24/0x40)
[<c0680d8c>] (drm_client_modeset_commit) from [<c0652a94>] 
(__drm_fb_helper_restore_fbdev_mode_unlocked+0x64/0xc8)
[<c0652a94>] (__drm_fb_helper_restore_fbdev_mode_unlocked) from 
[<c0652b60>] (drm_fb_helper_set_par+0x38/0x64)
[<c0652b60>] (drm_fb_helper_set_par) from [<c0652c34>] 
(drm_fb_helper_hotplug_event.part.5+0xa8/0xc0)
[<c0652c34>] (drm_fb_helper_hotplug_event.part.5) from [<c063dfbc>] 
(drm_kms_helper_hotplug_event+0x24/0x30)
[<c063dfbc>] (drm_kms_helper_hotplug_event) from [<c063e210>] 
(output_poll_execute+0x1ec/0x204)
[<c063e210>] (output_poll_execute) from [<c0148990>] 
(process_one_work+0x2c8/0x7ec)
[<c0148990>] (process_one_work) from [<c0148f04>] (worker_thread+0x50/0x584)
[<c0148f04>] (worker_thread) from [<c0151300>] (kthread+0x13c/0x19c)
[<c0151300>] (kthread) from [<c0100108>] (ret_from_fork+0x14/0x2c)
Exception stack(0xc1d35fb0 to 0xc1d35ff8)
5fa0:                                     00000000 00000000 00000000 
00000000
5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000
5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
irq event stamp: 1287
hardirqs last  enabled at (1293): [<c01a3b94>] vprintk_emit+0x270/0x2b4
hardirqs last disabled at (1298): [<c01a3b50>] vprintk_emit+0x22c/0x2b4
softirqs last  enabled at (1260): [<c01016fc>] __do_softirq+0x4cc/0x5ec
softirqs last disabled at (1255): [<c01301c8>] irq_exit+0x1cc/0x200
---[ end trace 0fa33551718d667f ]---
------------[ cut here ]------------
WARNING: CPU: 0 PID: 7 at drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x60/0x68
Modules linked in:
CPU: 0 PID: 7 Comm: kworker/u4:0 Tainted: G        W 
5.16.0-rc5-next-20211213-00001-gac4117943791 #11072
Hardware name: Samsung Exynos (Flattened Device Tree)
Workqueue: events_unbound deferred_probe_work_func
[<c01110d0>] (unwind_backtrace) from [<c010cab0>] (show_stack+0x10/0x14)
[<c010cab0>] (show_stack) from [<c0b71b58>] (dump_stack_lvl+0x58/0x70)
[<c0b71b58>] (dump_stack_lvl) from [<c0126c9c>] (__warn+0x228/0x22c)
[<c0126c9c>] (__warn) from [<c0126d4c>] (warn_slowpath_fmt+0xac/0xb4)
[<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state+0x60/0x68)
[<c064e844>] (drm_atomic_helper_connector_duplicate_state) from 
[<c06685f4>] (drm_atomic_get_connector_state+0xd8/0x190)
[<c06685f4>] (drm_atomic_get_connector_state) from [<c066960c>] 
(__drm_atomic_helper_set_config+0x2a0/0x368)
[<c066960c>] (__drm_atomic_helper_set_config) from [<c0680a20>] 
(drm_client_modeset_commit_atomic+0x178/0x27c)
[<c0680a20>] (drm_client_modeset_commit_atomic) from [<c0680be0>] 
(drm_client_modeset_commit_locked+0x48/0x1d0)
[<c0680be0>] (drm_client_modeset_commit_locked) from [<c0680d8c>] 
(drm_client_modeset_commit+0x24/0x40)
[<c0680d8c>] (drm_client_modeset_commit) from [<c0652a94>] 
(__drm_fb_helper_restore_fbdev_mode_unlocked+0x64/0xc8)
[<c0652a94>] (__drm_fb_helper_restore_fbdev_mode_unlocked) from 
[<c0652b60>] (drm_fb_helper_set_par+0x38/0x64)
[<c0652b60>] (drm_fb_helper_set_par) from [<c05bbf28>] 
(fbcon_init+0x48c/0x510)
[<c05bbf28>] (fbcon_init) from [<c0608b50>] (visual_init+0xc0/0x108)
[<c0608b50>] (visual_init) from [<c0609d78>] 
(do_bind_con_driver+0x1ac/0x388)
[<c0609d78>] (do_bind_con_driver) from [<c060a2b0>] 
(do_take_over_console+0x13c/0x1c8)
[<c060a2b0>] (do_take_over_console) from [<c05b90e0>] 
(do_fbcon_takeover+0x74/0xcc)
[<c05b90e0>] (do_fbcon_takeover) from [<c05b38f0>] 
(register_framebuffer+0x1c8/0x2d8)
[<c05b38f0>] (register_framebuffer) from [<c06524a4>] 
(__drm_fb_helper_initial_config_and_unlock+0x440/0x65c)
[<c06524a4>] (__drm_fb_helper_initial_config_and_unlock) from 
[<c063dfbc>] (drm_kms_helper_hotplug_event+0x24/0x30)
[<c063dfbc>] (drm_kms_helper_hotplug_event) from [<c0690fb8>] 
(exynos_dsi_host_attach+0x170/0x2a4)
[<c0690fb8>] (exynos_dsi_host_attach) from [<c069d064>] 
(tc358764_probe+0xe8/0x160)
[<c069d064>] (tc358764_probe) from [<c06b6fb0>] (really_probe+0x190/0x450)
[<c06b6fb0>] (really_probe) from [<c06b7314>] 
(__driver_probe_device+0xa4/0x204)
[<c06b7314>] (__driver_probe_device) from [<c06b74a8>] 
(driver_probe_device+0x34/0xd4)
[<c06b74a8>] (driver_probe_device) from [<c06b7884>] 
(__device_attach_driver+0xb0/0x11c)
[<c06b7884>] (__device_attach_driver) from [<c06b5094>] 
(bus_for_each_drv+0x70/0xb4)
[<c06b5094>] (bus_for_each_drv) from [<c06b6d80>] 
(__device_attach+0xe0/0x178)
[<c06b6d80>] (__device_attach) from [<c06b5e0c>] 
(bus_probe_device+0x88/0x90)
[<c06b5e0c>] (bus_probe_device) from [<c06b632c>] 
(deferred_probe_work_func+0x4c/0xe8)
[<c06b632c>] (deferred_probe_work_func) from [<c0148990>] 
(process_one_work+0x2c8/0x7ec)
[<c0148990>] (process_one_work) from [<c0148f04>] (worker_thread+0x50/0x584)
[<c0148f04>] (worker_thread) from [<c0151300>] (kthread+0x13c/0x19c)
[<c0151300>] (kthread) from [<c0100108>] (ret_from_fork+0x14/0x2c)
Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
1fa0:                                     00000000 00000000 00000000 
00000000
1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000
1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
irq event stamp: 24321
hardirqs last  enabled at (24327): [<c01a3b94>] vprintk_emit+0x270/0x2b4
hardirqs last disabled at (24332): [<c01a3b50>] vprintk_emit+0x22c/0x2b4
softirqs last  enabled at (21880): [<c01016fc>] __do_softirq+0x4cc/0x5ec
softirqs last disabled at (21875): [<c01301c8>] irq_exit+0x1cc/0x200
---[ end trace 0fa33551718d6680 ]---
------------[ cut here ]------------
WARNING: CPU: 0 PID: 7 at drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x60/0x68
Modules linked in:
CPU: 0 PID: 7 Comm: kworker/u4:0 Tainted: G        W 
5.16.0-rc5-next-20211213-00001-gac4117943791 #11072
Hardware name: Samsung Exynos (Flattened Device Tree)
Workqueue: events_unbound deferred_probe_work_func
[<c01110d0>] (unwind_backtrace) from [<c010cab0>] (show_stack+0x10/0x14)
[<c010cab0>] (show_stack) from [<c0b71b58>] (dump_stack_lvl+0x58/0x70)
[<c0b71b58>] (dump_stack_lvl) from [<c0126c9c>] (__warn+0x228/0x22c)
[<c0126c9c>] (__warn) from [<c0126d4c>] (warn_slowpath_fmt+0xac/0xb4)
[<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state+0x60/0x68)
[<c064e844>] (drm_atomic_helper_connector_duplicate_state) from 
[<c06685f4>] (drm_atomic_get_connector_state+0xd8/0x190)
[<c06685f4>] (drm_atomic_get_connector_state) from [<c066960c>] 
(__drm_atomic_helper_set_config+0x2a0/0x368)
[<c066960c>] (__drm_atomic_helper_set_config) from [<c0680a20>] 
(drm_client_modeset_commit_atomic+0x178/0x27c)
[<c0680a20>] (drm_client_modeset_commit_atomic) from [<c0680be0>] 
(drm_client_modeset_commit_locked+0x48/0x1d0)
[<c0680be0>] (drm_client_modeset_commit_locked) from [<c0651c60>] 
(drm_fb_helper_pan_display+0x90/0x1c4)
[<c0651c60>] (drm_fb_helper_pan_display) from [<c05b2ab0>] 
(fb_pan_display+0xcc/0x138)
[<c05b2ab0>] (fb_pan_display) from [<c05bd024>] (bit_update_start+0x14/0x30)
[<c05bd024>] (bit_update_start) from [<c05bac30>] (fbcon_switch+0x2d0/0x3e4)
[<c05bac30>] (fbcon_switch) from [<c0609afc>] (redraw_screen+0x15c/0x22c)
[<c0609afc>] (redraw_screen) from [<c05ba7e4>] 
(fbcon_prepare_logo+0x2d4/0x450)
[<c05ba7e4>] (fbcon_prepare_logo) from [<c05bbe50>] (fbcon_init+0x3b4/0x510)
[<c05bbe50>] (fbcon_init) from [<c0608b50>] (visual_init+0xc0/0x108)
[<c0608b50>] (visual_init) from [<c0609d78>] 
(do_bind_con_driver+0x1ac/0x388)
[<c0609d78>] (do_bind_con_driver) from [<c060a2b0>] 
(do_take_over_console+0x13c/0x1c8)
[<c060a2b0>] (do_take_over_console) from [<c05b90e0>] 
(do_fbcon_takeover+0x74/0xcc)
[<c05b90e0>] (do_fbcon_takeover) from [<c05b38f0>] 
(register_framebuffer+0x1c8/0x2d8)
[<c05b38f0>] (register_framebuffer) from [<c06524a4>] 
(__drm_fb_helper_initial_config_and_unlock+0x440/0x65c)
[<c06524a4>] (__drm_fb_helper_initial_config_and_unlock) from 
[<c063dfbc>] (drm_kms_helper_hotplug_event+0x24/0x30)
[<c063dfbc>] (drm_kms_helper_hotplug_event) from [<c0690fb8>] 
(exynos_dsi_host_attach+0x170/0x2a4)
[<c0690fb8>] (exynos_dsi_host_attach) from [<c069d064>] 
(tc358764_probe+0xe8/0x160)
[<c069d064>] (tc358764_probe) from [<c06b6fb0>] (really_probe+0x190/0x450)
[<c06b6fb0>] (really_probe) from [<c06b7314>] 
(__driver_probe_device+0xa4/0x204)
[<c06b7314>] (__driver_probe_device) from [<c06b74a8>] 
(driver_probe_device+0x34/0xd4)
[<c06b74a8>] (driver_probe_device) from [<c06b7884>] 
(__device_attach_driver+0xb0/0x11c)
[<c06b7884>] (__device_attach_driver) from [<c06b5094>] 
(bus_for_each_drv+0x70/0xb4)
[<c06b5094>] (bus_for_each_drv) from [<c06b6d80>] 
(__device_attach+0xe0/0x178)
[<c06b6d80>] (__device_attach) from [<c06b5e0c>] 
(bus_probe_device+0x88/0x90)
[<c06b5e0c>] (bus_probe_device) from [<c06b632c>] 
(deferred_probe_work_func+0x4c/0xe8)
[<c06b632c>] (deferred_probe_work_func) from [<c0148990>] 
(process_one_work+0x2c8/0x7ec)
[<c0148990>] (process_one_work) from [<c0148f04>] (worker_thread+0x50/0x584)
[<c0148f04>] (worker_thread) from [<c0151300>] (kthread+0x13c/0x19c)
[<c0151300>] (kthread) from [<c0100108>] (ret_from_fork+0x14/0x2c)
Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
1fa0:                                     00000000 00000000 00000000 
00000000
1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000
1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
irq event stamp: 24393
hardirqs last  enabled at (24399): [<c01a3b94>] vprintk_emit+0x270/0x2b4
hardirqs last disabled at (24404): [<c01a3b50>] vprintk_emit+0x22c/0x2b4
softirqs last  enabled at (21880): [<c01016fc>] __do_softirq+0x4cc/0x5ec
softirqs last disabled at (21875): [<c01301c8>] irq_exit+0x1cc/0x200
---[ end trace 0fa33551718d6681 ]---
Console: switching to colour frame buffer device 146x42
------------[ cut here ]------------
WARNING: CPU: 0 PID: 7 at drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x60/0x68
Modules linked in:
CPU: 0 PID: 7 Comm: kworker/u4:0 Tainted: G        W 
5.16.0-rc5-next-20211213-00001-gac4117943791 #11072
Hardware name: Samsung Exynos (Flattened Device Tree)
Workqueue: events_unbound deferred_probe_work_func
[<c01110d0>] (unwind_backtrace) from [<c010cab0>] (show_stack+0x10/0x14)
[<c010cab0>] (show_stack) from [<c0b71b58>] (dump_stack_lvl+0x58/0x70)
[<c0b71b58>] (dump_stack_lvl) from [<c0126c9c>] (__warn+0x228/0x22c)
[<c0126c9c>] (__warn) from [<c0126d4c>] (warn_slowpath_fmt+0xac/0xb4)
[<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state+0x60/0x68)
[<c064e844>] (drm_atomic_helper_connector_duplicate_state) from 
[<c06685f4>] (drm_atomic_get_connector_state+0xd8/0x190)
[<c06685f4>] (drm_atomic_get_connector_state) from [<c066960c>] 
(__drm_atomic_helper_set_config+0x2a0/0x368)
[<c066960c>] (__drm_atomic_helper_set_config) from [<c0680a20>] 
(drm_client_modeset_commit_atomic+0x178/0x27c)
[<c0680a20>] (drm_client_modeset_commit_atomic) from [<c0680be0>] 
(drm_client_modeset_commit_locked+0x48/0x1d0)
[<c0680be0>] (drm_client_modeset_commit_locked) from [<c0651c60>] 
(drm_fb_helper_pan_display+0x90/0x1c4)
[<c0651c60>] (drm_fb_helper_pan_display) from [<c05b2ab0>] 
(fb_pan_display+0xcc/0x138)
[<c05b2ab0>] (fb_pan_display) from [<c05bd024>] (bit_update_start+0x14/0x30)
[<c05bd024>] (bit_update_start) from [<c05bac30>] (fbcon_switch+0x2d0/0x3e4)
[<c05bac30>] (fbcon_switch) from [<c0609afc>] (redraw_screen+0x15c/0x22c)
[<c0609afc>] (redraw_screen) from [<c0609e84>] 
(do_bind_con_driver+0x2b8/0x388)
[<c0609e84>] (do_bind_con_driver) from [<c060a2b0>] 
(do_take_over_console+0x13c/0x1c8)
[<c060a2b0>] (do_take_over_console) from [<c05b90e0>] 
(do_fbcon_takeover+0x74/0xcc)
[<c05b90e0>] (do_fbcon_takeover) from [<c05b38f0>] 
(register_framebuffer+0x1c8/0x2d8)
[<c05b38f0>] (register_framebuffer) from [<c06524a4>] 
(__drm_fb_helper_initial_config_and_unlock+0x440/0x65c)
[<c06524a4>] (__drm_fb_helper_initial_config_and_unlock) from 
[<c063dfbc>] (drm_kms_helper_hotplug_event+0x24/0x30)
[<c063dfbc>] (drm_kms_helper_hotplug_event) from [<c0690fb8>] 
(exynos_dsi_host_attach+0x170/0x2a4)
[<c0690fb8>] (exynos_dsi_host_attach) from [<c069d064>] 
(tc358764_probe+0xe8/0x160)
[<c069d064>] (tc358764_probe) from [<c06b6fb0>] (really_probe+0x190/0x450)
[<c06b6fb0>] (really_probe) from [<c06b7314>] 
(__driver_probe_device+0xa4/0x204)
[<c06b7314>] (__driver_probe_device) from [<c06b74a8>] 
(driver_probe_device+0x34/0xd4)
[<c06b74a8>] (driver_probe_device) from [<c06b7884>] 
(__device_attach_driver+0xb0/0x11c)
[<c06b7884>] (__device_attach_driver) from [<c06b5094>] 
(bus_for_each_drv+0x70/0xb4)
[<c06b5094>] (bus_for_each_drv) from [<c06b6d80>] 
(__device_attach+0xe0/0x178)
[<c06b6d80>] (__device_attach) from [<c06b5e0c>] 
(bus_probe_device+0x88/0x90)
[<c06b5e0c>] (bus_probe_device) from [<c06b632c>] 
(deferred_probe_work_func+0x4c/0xe8)
[<c06b632c>] (deferred_probe_work_func) from [<c0148990>] 
(process_one_work+0x2c8/0x7ec)
[<c0148990>] (process_one_work) from [<c0148f04>] (worker_thread+0x50/0x584)
[<c0148f04>] (worker_thread) from [<c0151300>] (kthread+0x13c/0x19c)
[<c0151300>] (kthread) from [<c0100108>] (ret_from_fork+0x14/0x2c)
Exception stack(0xc1cc1fb0 to 0xc1cc1ff8)
1fa0:                                     00000000 00000000 00000000 
00000000
1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
00000000
1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
irq event stamp: 24477
hardirqs last  enabled at (24483): [<c01a3b94>] vprintk_emit+0x270/0x2b4
hardirqs last disabled at (24488): [<c01a3b50>] vprintk_emit+0x22c/0x2b4
softirqs last  enabled at (21880): [<c01016fc>] __do_softirq+0x4cc/0x5ec
softirqs last disabled at (21875): [<c01301c8>] irq_exit+0x1cc/0x200
---[ end trace 0fa33551718d6682 ]---


Again, there is something wrong with connector registration:

# ./modetest -C -Mexynos
[   69.085387] ------------[ cut here ]------------
[   69.088593] WARNING: CPU: 1 PID: 1299 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x60/0x68
[   69.101211] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem 
videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common 
videodev mc
[   69.114158] CPU: 1 PID: 1299 Comm: modetest Tainted: G W         
5.16.0-rc5-next-20211213-00002-ga010c46089fa #11073
[   69.125201] Hardware name: Samsung Exynos (Flattened Device Tree)
[   69.131279] [<c01110d0>] (unwind_backtrace) from [<c010cab0>] 
(show_stack+0x10/0x14)
[   69.139002] [<c010cab0>] (show_stack) from [<c0b71c00>] 
(dump_stack_lvl+0x58/0x70)
[   69.146554] [<c0b71c00>] (dump_stack_lvl) from [<c0126c9c>] 
(__warn+0x228/0x22c)
[   69.153932] [<c0126c9c>] (__warn) from [<c0126d4c>] 
(warn_slowpath_fmt+0xac/0xb4)
[   69.161396] [<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state+0x60/0x68)
[   69.172074] [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state) from [<c06685f4>] 
(drm_atomic_get_connector_state+0xd8/0x190)
[   69.183966] [<c06685f4>] (drm_atomic_get_connector_state) from 
[<c066960c>] (__drm_atomic_helper_set_config+0x2a0/0x368)
[   69.194814] [<c066960c>] (__drm_atomic_helper_set_config) from 
[<c0680a20>] (drm_client_modeset_commit_atomic+0x178/0x27c)
[   69.205839] [<c0680a20>] (drm_client_modeset_commit_atomic) from 
[<c0680be0>] (drm_client_modeset_commit_locked+0x48/0x1d0)
[   69.216949] [<c0680be0>] (drm_client_modeset_commit_locked) from 
[<c0680d8c>] (drm_client_modeset_commit+0x24/0x40)
[   69.227364] [<c0680d8c>] (drm_client_modeset_commit) from 
[<c0652a94>] (__drm_fb_helper_restore_fbdev_mode_unlocked+0x64/0xc8)
[   69.238735] [<c0652a94>] 
(__drm_fb_helper_restore_fbdev_mode_unlocked) from [<c0655ec8>] 
(drm_lastclose+0x30/0x4c)
[   69.249065] [<c0655ec8>] (drm_lastclose) from [<c0655ff4>] 
(drm_release+0x110/0x114)
[   69.256789] [<c0655ff4>] (drm_release) from [<c02e6058>] 
(__fput+0x88/0x258)
[   69.263821] [<c02e6058>] (__fput) from [<c014df0c>] 
(task_work_run+0x8c/0xc8)
[   69.270939] [<c014df0c>] (task_work_run) from [<c010c30c>] 
(do_work_pending+0x534/0x63c)
[   69.279010] [<c010c30c>] (do_work_pending) from [<c0100088>] 
(slow_work_pending+0xc/0x20)
[   69.287169] Exception stack(0xc3e4bfb0 to 0xc3e4bff8)
[   69.292205] bfa0:                                     00000000 
0000001f e4a15400 00000000
[   69.300364] bfc0: 00000001 00000003 00000000 00000006 00022188 
00000000 b6f2c000 00000000
[   69.308523] bfe0: b6e2daa0 bee27a98 0000e7c4 b6e2dac0 60000010 00000003
[   69.315292] irq event stamp: 3229
[   69.318419] hardirqs last  enabled at (3237): [<c01a0cfc>] 
__up_console_sem+0x50/0x60
[   69.326275] hardirqs last disabled at (3252): [<c01a0ce8>] 
__up_console_sem+0x3c/0x60
[   69.334076] softirqs last  enabled at (3250): [<c01016fc>] 
__do_softirq+0x4cc/0x5ec
[   69.341680] softirqs last disabled at (3245): [<c01301c8>] 
irq_exit+0x1cc/0x200
[   69.349066] ---[ end trace ab79782cf462efca ]---
could not get [   69.355098] ------------[ cut here ]------------
[   69.359389] WARNING: CPU: 1 PID: 1299 at 
drivers/gpu/drm/drm_atomic_state_helper.c:494 
drm_atomic_helper_connector_duplicate_state+0x60/0x68
[   69.372111] Modules linked in: s5p_mfc exynos_gsc v4l2_mem2mem 
videobuf2_dma_contig videobuf2_memops videobuf2_v4l2 videobuf2_common 
videodev mc
[   69.384964] CPU: 1 PID: 1299 Comm: modetest Tainted: G W         
5.16.0-rc5-next-20211213-00002-ga010c46089fa #11073
[   69.396017] Hardware name: Samsung Exynos (Flattened Device Tree)
[   69.402094] [<c01110d0>] (unwind_backtrace) from [<c010cab0>] 
(show_stack+0x10/0x14)
[   69.409818] [<c010cab0>] (show_stack) from [<c0b71c00>] 
(dump_stack_lvl+0x58/0x70)
[   69.417370] [<c0b71c00>] (dump_stack_lvl) from [<c0126c9c>] 
(__warn+0x228/0x22c)
[   69.424748] [<c0126c9c>] (__warn) from [<c0126d4c>] 
(warn_slowpath_fmt+0xac/0xb4)
[   69.432213] [<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state+0x60/0x68)
[   69.442889] [<c064e844>] 
(drm_atomic_helper_connector_duplicate_state) from [<c06685f4>] 
(drm_atomic_get_connector_state+0xd8/0x190)
[   69.454781] [<c06685f4>] (drm_atomic_get_connector_state) from 
[<c066960c>] (__drm_atomic_helper_set_config+0x2a0/0x368)
[   69.465630] [<c066960c>] (__drm_atomic_helper_set_config) from 
[<c0680a20>] (drm_client_modeset_commit_atomic+0x178/0x27c)
[   69.476654] [<c0680a20>] (drm_client_modeset_commit_atomic) from 
[<c0680be0>] (drm_client_modeset_commit_locked+0x48/0x1d0)
[   69.487764] [<c0680be0>] (drm_client_modeset_commit_locked) from 
[<c0680d8c>] (drm_client_modeset_commit+0x24/0x40)
[   69.498181] [<c0680d8c>] (drm_client_modeset_commit) from 
[<c0652a94>] (__drm_fb_helper_restore_fbdev_mode_unlocked+0x64/0xc8)
[   69.509551] [<c0652a94>] 
(__drm_fb_helper_restore_fbdev_mode_unlocked) from [<c0655ec8>] 
(drm_lastclose+0x30/0x4c)
[   69.519881] [<c0655ec8>] (drm_lastclose) from [<c0655ff4>] 
(drm_release+0x110/0x114)
[   69.527605] [<c0655ff4>] (drm_release) from [<c02e6058>] 
(__fput+0x88/0x258)
[   69.534636] [<c02e6058>] (__fput) from [<c014df0c>] 
(task_work_run+0x8c/0xc8)
[   69.541754] [<c014df0c>] (task_work_run) from [<c012cb20>] 
(do_exit+0x3f8/0xc1c)
[   69.549133] [<c012cb20>] (do_exit) from [<c012e6b8>] 
(do_group_exit+0x2c/0xa0)
[   69.556337] [<c012e6b8>] (do_group_exit) from [<c013d09c>] 
(get_signal+0x1d0/0xe6c)
[   69.563976] [<c013d09c>] (get_signal) from [<c010bef4>] 
(do_work_pending+0x11c/0x63c)
[   69.571786] [<c010bef4>] (do_work_pending) from [<c0100088>] 
(slow_work_pending+0xc/0x20)
[   69.579945] Exception stack(0xc3e4bfb0 to 0xc3e4bff8)
[   69.584982] bfa0:                                     00000008 
0000005f 00000002 00023388
[   69.593140] bfc0: 00000001 000232a8 00000000 00023398 0000003e 
00000000 00023360 00000000
[   69.601299] bfe0: 00023590 bee27ae8 00009ec0 00009e9c 80000010 ffffffff
[   69.608150] irq event stamp: 3691
[   69.611237] hardirqs last  enabled at (3703): [<c015a6b0>] 
finish_task_switch+0xc4/0x264
[   69.619337] hardirqs last disabled at (3724): [<c01a0ce8>] 
__up_console_sem+0x3c/0x60
[   69.627123] softirqs last  enabled at (3722): [<c01016fc>] 
__do_softirq+0x4cc/0x5ec
[   69.634818] softirqs last disabled at (3711): [<c01301c8>] 
irq_exit+0x1cc/0x200
[   69.642009] ---[ end trace ab79782cf462efcb ]---
connector 62: No such file or directory
Segmentation fault


This reminds me a discussion from last year:

https://lore.kernel.org/all/f22146de-1660-035c-c476-f7b3354de7cb@samsung.com/


Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge
  2021-12-15  6:09                   ` Marek Szyprowski
@ 2021-12-15  6:28                     ` Jagan Teki
  0 siblings, 0 replies; 23+ messages in thread
From: Jagan Teki @ 2021-12-15  6:28 UTC (permalink / raw)
  To: Marek Szyprowski
  Cc: Neil Armstrong, linux-amarula, dri-devel, Robert Foss,
	Laurent Pinchart, Andrzej Hajda, Michael Nazzareno Trimarchi,
	Sam Ravnborg

On Wed, Dec 15, 2021 at 11:39 AM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>
> Hi Jagan,
>
> On 14.12.2021 11:47, Jagan Teki wrote:
> > On Mon, Dec 13, 2021 at 7:42 PM Marek Szyprowski
> > <m.szyprowski@samsung.com> wrote:
> >> On 13.12.2021 14:56, Jagan Teki wrote:
> >>> On Mon, Dec 13, 2021 at 6:51 PM Marek Szyprowski
> >>> <m.szyprowski@samsung.com> wrote:
> >>>> On 13.12.2021 13:31, Jagan Teki wrote:
> >>>>> On Mon, Dec 13, 2021 at 5:42 PM Marek Szyprowski
> >>>>> <m.szyprowski@samsung.com> wrote:
> >>>>>> On 13.12.2021 13:08, Jagan Teki wrote:
> >>>>>>> On Mon, Dec 13, 2021 at 5:34 PM Marek Szyprowski
> >>>>>>> <m.szyprowski@samsung.com> wrote:
> >>>>>>>> On 12.12.2021 19:14, Jagan Teki wrote:
> >>>>>>>>> Updated series about drm bridge conversion of exynos dsi.
> >>>>>>>>>
> >>>>>>>>> Patch 1: panel checker
> >>>>>>>>>
> >>>>>>>>> Patch 2: panel_bridge API
> >>>>>>>>>
> >>>>>>>>> Patch 3: Bridge conversion
> >>>>>>>>>
> >>>>>>>>> Patch 4: pree_enable, post_disable
> >>>>>>>>>
> >>>>>>>>> Patch 5: Atomic functions
> >>>>>>>>>
> >>>>>>>>> Patch 6: atomic_set
> >>>>>>>>>
> >>>>>>>>> Patch 7: DSI init in enable
> >>>>>>>>>
> >>>>>>>>> [1] https://patchwork.kernel.org/project/dri-devel/cover/20211210191922.2367979-1-jagan@amarulasolutions.com/
> >>>>>>>>>
> >>>>>>>>> Any inputs?
> >>>>>>>> I've checked this patchset on Exynos based Trats2 board (the one with
> >>>>>>>> simplest display pipeline: Exynos FIMD -> Exynos DSI -> s6e8aa0 DSI
> >>>>>>>> panel). DRM stops working after the 2nd patch ("[PATCH v3 2/7] drm:
> >>>>>>>> exynos: dsi: Use drm panel_bridge API"):
> >>>>>>>>
> >>>>>>>> > [...]
> >>> Thanks for testing it.
> >>>
> >>> Can you test it on the downstream bridge, tc358764 and post the result?
> >> There were 2 logs in my reply. One from trats2 board (just dsi panel)
> >> and one from arndale (tc bridge + simple panel).
> > Okay. Got it.
> >
> > Can you test this tc358764 panel_bridge patch on linux-next? don't
> > apply this series, apply only below patch and test.
> >
> Yes, sure. Sadly, it also breaks display operation:
>
> OF: graph: no port node found in /soc/hdmi@14530000
> [drm] Exynos DRM: using 14400000.fimd device for DMA mapping operations
> exynos-drm exynos-drm: bound 14400000.fimd (ops fimd_component_ops)
> exynos-drm exynos-drm: bound 14450000.mixer (ops mixer_component_ops)
> OF: graph: no port node found in /soc/dsi@14500000
> exynos-drm exynos-drm: bound 14500000.dsi (ops exynos_dsi_component_ops)
> exynos-drm exynos-drm: bound 14530000.hdmi (ops hdmi_component_ops)
> exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> exynos-drm exynos-drm: [drm] Cannot find any crtc or sizes
> [drm] Initialized exynos 1.1.0 20180330 for exynos-drm on minor 0
> panfrost 11800000.gpu: clock rate = 533000000
> panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor 0x0 status 0x1
> panfrost 11800000.gpu: features: 00000000,10206000, issues:
> 00000000,31b4dfff
> panfrost 11800000.gpu: Features: L2:0x07110206 Shader:0x00000000
> Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
> panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
> [drm] Initialized panfrost 1.2.0 20180908 for 11800000.gpu on minor 1
> ------------[ cut here ]------------
> WARNING: CPU: 1 PID: 23 at drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x60/0x68
> Modules linked in:
> CPU: 1 PID: 23 Comm: kworker/1:1 Not tainted
> 5.16.0-rc5-next-20211213-00001-gac4117943791 #11072
> Hardware name: Samsung Exynos (Flattened Device Tree)
> Workqueue: events output_poll_execute
> [<c01110d0>] (unwind_backtrace) from [<c010cab0>] (show_stack+0x10/0x14)
> [<c010cab0>] (show_stack) from [<c0b71b58>] (dump_stack_lvl+0x58/0x70)
> [<c0b71b58>] (dump_stack_lvl) from [<c0126c9c>] (__warn+0x228/0x22c)
> [<c0126c9c>] (__warn) from [<c0126d4c>] (warn_slowpath_fmt+0xac/0xb4)
> [<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>]
> (drm_atomic_helper_connector_duplicate_state+0x60/0x68)
> [<c064e844>] (drm_atomic_helper_connector_duplicate_state) from
> [<c06685f4>] (drm_atomic_get_connector_state+0xd8/0x190)
> [<c06685f4>] (drm_atomic_get_connector_state) from [<c066960c>]
> (__drm_atomic_helper_set_config+0x2a0/0x368)
> [<c066960c>] (__drm_atomic_helper_set_config) from [<c0680a20>]
> (drm_client_modeset_commit_atomic+0x178/0x27c)
> [<c0680a20>] (drm_client_modeset_commit_atomic) from [<c0680be0>]
> (drm_client_modeset_commit_locked+0x48/0x1d0)
> [<c0680be0>] (drm_client_modeset_commit_locked) from [<c0680d8c>]
> (drm_client_modeset_commit+0x24/0x40)
> [<c0680d8c>] (drm_client_modeset_commit) from [<c0652a94>]
> (__drm_fb_helper_restore_fbdev_mode_unlocked+0x64/0xc8)
> [<c0652a94>] (__drm_fb_helper_restore_fbdev_mode_unlocked) from
> [<c0652b60>] (drm_fb_helper_set_par+0x38/0x64)
> [<c0652b60>] (drm_fb_helper_set_par) from [<c0652c34>]
> (drm_fb_helper_hotplug_event.part.5+0xa8/0xc0)
> [<c0652c34>] (drm_fb_helper_hotplug_event.part.5) from [<c063dfbc>]
> (drm_kms_helper_hotplug_event+0x24/0x30)
> [<c063dfbc>] (drm_kms_helper_hotplug_event) from [<c063e210>]
> (output_poll_execute+0x1ec/0x204)
> [<c063e210>] (output_poll_execute) from [<c0148990>]
> (process_one_work+0x2c8/0x7ec)
> [<c0148990>] (process_one_work) from [<c0148f04>] (worker_thread+0x50/0x584)
> [<c0148f04>] (worker_thread) from [<c0151300>] (kthread+0x13c/0x19c)
> [<c0151300>] (kthread) from [<c0100108>] (ret_from_fork+0x14/0x2c)
> Exception stack(0xc1d35fb0 to 0xc1d35ff8)
> 5fa0:                                     00000000 00000000 00000000
> 00000000
> 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000
> 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000
> irq event stamp: 1287
> hardirqs last  enabled at (1293): [<c01a3b94>] vprintk_emit+0x270/0x2b4
> hardirqs last disabled at (1298): [<c01a3b50>] vprintk_emit+0x22c/0x2b4
> softirqs last  enabled at (1260): [<c01016fc>] __do_softirq+0x4cc/0x5ec
> softirqs last disabled at (1255): [<c01301c8>] irq_exit+0x1cc/0x200
> ---[ end trace 0fa33551718d667f ]---
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 7 at drivers/gpu/drm/drm_atomic_state_helper.c:494
> drm_atomic_helper_connector_duplicate_state+0x60/0x68
> Modules linked in:
> CPU: 0 PID: 7 Comm: kworker/u4:0 Tainted: G        W
> 5.16.0-rc5-next-20211213-00001-gac4117943791 #11072
> Hardware name: Samsung Exynos (Flattened Device Tree)
> Workqueue: events_unbound deferred_probe_work_func
> [<c01110d0>] (unwind_backtrace) from [<c010cab0>] (show_stack+0x10/0x14)
> [<c010cab0>] (show_stack) from [<c0b71b58>] (dump_stack_lvl+0x58/0x70)
> [<c0b71b58>] (dump_stack_lvl) from [<c0126c9c>] (__warn+0x228/0x22c)
> [<c0126c9c>] (__warn) from [<c0126d4c>] (warn_slowpath_fmt+0xac/0xb4)
> [<c0126d4c>] (warn_slowpath_fmt) from [<c064e844>]
> (drm_atomic_helper_connector_duplicate_state+0x60/0x68)
> [<c064e844>] (drm_atomic_helper_connector_duplicate_state) from
> [<c06685f4>] (drm_atomic_get_connector_state+0xd8/0x190)
> [<c06685f4>] (drm_atomic_get_connector_state) from [<c066960c>]
> (__drm_atomic_helper_set_config+0x2a0/0x368)
> [<c066960c>] (__drm_atomic_helper_set_config) from [<c0680a20>]
> (drm_client_modeset_commit_atomic+0x178/0x27c)
> [<c0680a20>] (drm_client_modeset_commit_atomic) from [<c0680be0>]
> (drm_client_modeset_commit_locked+0x48/0x1d0)
> [<c0680be0>] (drm_client_modeset_commit_locked) from [<c0680d8c>]
> (drm_client_modeset_commit+0x24/0x40)
> [<c0680d8c>] (drm_client_modeset_commit) from [<c0652a94>]
> (__drm_fb_helper_restore_fbdev_mode_unlocked+0x64/0xc8)
> [<c0652a94>] (__drm_fb_helper_restore_fbdev_mode_unlocked) from
> [<c0652b60>] (drm_fb_helper_set_par+0x38/0x64)
> [<c0652b60>] (drm_fb_helper_set_par) from [<c05bbf28>]
> (fbcon_init+0x48c/0x510)
> [<c05bbf28>] (fbcon_init) from [<c0608b50>] (visual_init+0xc0/0x108)
> [<c0608b50>] (visual_init) from [<c0609d78>]
> (do_bind_con_driver+0x1ac/0x388)
> [<c0609d78>] (do_bind_con_driver) from [<c060a2b0>]
> (do_take_over_console+0x13c/0x1c8)
> [<c060a2b0>] (do_take_over_console) from [<c05b90e0>]
> (do_fbcon_takeover+0x74/0xcc)
> [<c05b90e0>] (do_fbcon_takeover) from [<c05b38f0>]
> (register_framebuffer+0x1c8/0x2d8)
> [<c05b38f0>] (register_framebuffer) from [<c06524a4>]
> (__drm_fb_helper_initial_config_and_unlock+0x440/0x65c)
> [<c06524a4>] (__drm_fb_helper_initial_config_and_unlock) from
> [<c063dfbc>] (drm_kms_helper_hotplug_event+0x24/0x30)
> [<c063dfbc>] (drm_kms_helper_hotplug_event) from [<c0690fb8>]
> (exynos_dsi_host_attach+0x170/0x2a4)

I think I understand the issue. Please wait for next version patches.

Thanks,
Jagan.

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2021-12-15  6:28 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20211212181442eucas1p2fe9d69d619f7f68be4473b79ddd136b0@eucas1p2.samsung.com>
2021-12-12 18:14 ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Jagan Teki
2021-12-12 18:14   ` [PATCH v3 1/7] drm: exynos: dsi: Check panel for panel helpers Jagan Teki
2021-12-12 18:14   ` [PATCH v3 2/7] drm: exynos: dsi: Use drm panel_bridge API Jagan Teki
2021-12-13  9:08     ` Andrzej Hajda
2021-12-13  9:14       ` Jagan Teki
2021-12-12 18:14   ` [PATCH v3 3/7] drm: exynos: dsi: Convert to bridge driver Jagan Teki
2021-12-13  9:34     ` Andrzej Hajda
2021-12-12 18:14   ` [PATCH v3 4/7] drm: exynos: dsi: Separate pre_enable, post_disable code Jagan Teki
2021-12-13  9:57     ` Andrzej Hajda
2021-12-14 19:01       ` Jagan Teki
2021-12-12 18:14   ` [PATCH v3 5/7] drm: exynos: dsi: Switch to atomic funcs Jagan Teki
2021-12-12 18:14   ` [PATCH v3 6/7] drm: exynos: dsi: Get the mode from bridge Jagan Teki
2021-12-12 18:14   ` [PATCH v3 7/7] drm: exynos: dsi: Move DSI init in bridge enable Jagan Teki
2021-12-13 12:04   ` [PATCH v3 0/7] drm: exynos: dsi: Convert drm bridge Marek Szyprowski
2021-12-13 12:08     ` Jagan Teki
2021-12-13 12:12       ` Marek Szyprowski
2021-12-13 12:31         ` Jagan Teki
2021-12-13 13:21           ` Marek Szyprowski
2021-12-13 13:56             ` Jagan Teki
2021-12-13 14:12               ` Marek Szyprowski
2021-12-14 10:47                 ` Jagan Teki
2021-12-15  6:09                   ` Marek Szyprowski
2021-12-15  6:28                     ` Jagan Teki

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.