Skip to contentSkip to conversation

drm/tilcdc: Add bridge support and sync-lost flood recovery

PATCH In review Jyri Sarha 3 participants 11 messages Nov 25, 2016 – Nov 29, 2016

Subsystems (6)
lore
Share & tools
lore

Jyri Sarha

author
#0 lore raw

v5 cover drm/tilcdc: Add bridge support and sync-lost flood recovery

Changes since v4:
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- Put i2c behind #if IS_ENABLED(CONFIG_I2C)
- "drm/tilcdc: Add drm bridge support for attaching drm bridge drivers"
- Use exsisting infrastructure to hookup crtc mode validation code to newly connected connector, whether that came from componentized driver or trough an attached bridge

Changes since v3:
- "drm/tilcdc: Enable sync lost error and recovery handling for rev 1 LCDC"
- Fix broken irq enable/disble code for LCDC rev 1
- Add: "dt-bindings: Move "ti,tfp410.txt" from display/ti to display/bridge"
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- Don't fail if either i2c or platform driver register succeeds
- ftp410 -> tfp410
- Merge the old display/ti,tfp410.txt document with my addition

Changes since v2:
- "drm/tilcdc: Recover from sync lost error flood by resetting the LCDC"
- no change
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- Fix deveice-tree document
- "driver node" -> "device node"
- remove "(the current implementation does not yet support this)"
- Add dummy i2c support. The driver probe works also if placed under i2c controller node, but there is no actual i2c probing.
- "drm/tilcdc: Add drm bridge support for attaching drm bridge drivers"
- no change

Changes since first version of the series:
- "drm/tilcdc: Recover from sync lost error flood by resetting the LCDC"
- no change
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- HDMI -> DVI
- DT Binding document
- Prepare for tfp410 connected trough i2c by optional reg property
- Require two port nodes
- Implementation
- Implement connector node functionality with in tfp410 bridge drive, but follow generic connector binding by pulling the ddc-i2c-bus property from the connector node.
- "drm/tilcdc: Add drm bridge support for attaching drm bridge drivers"
- Remove earlier change in TD binding document. There is no need to mention DRM implementation details, like bridge support, in DT binding.

The first patch is an independent on and I've been testing it for quite a while now.

The tfp410 bridge driver and the tilcdc bridge support are tested with BeagleBone DVI-D Cape Rev A3. The tfp410 bridge driver is missing a lot of features, because the DVI-D cape does not have too many wires connected. The missing features can be added later when they are needed.

Jyri Sarha (4):
drm/tilcdc: Recover from sync lost error flood by resetting the LCDC
dt-bindings: Move "ti,tfp410.txt" from display/ti to display/bridge drm/bridge: Add ti-tfp410 DVI transmitter driver drm/tilcdc: Add drm bridge support for attaching drm bridge drivers

 .../bindings/display/{ti => bridge}/ti,tfp410.txt  |   9 +-
 drivers/gpu/drm/bridge/Kconfig                     |   7 +
 drivers/gpu/drm/bridge/Makefile                    |   1 +
 drivers/gpu/drm/bridge/ti-tfp410.c                 | 317 +++++++++++++++++++++
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c               |  26 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c                |  11 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.h                |   5 +-
 drivers/gpu/drm/tilcdc/tilcdc_external.c           | 260 ++++++++++++-----
 drivers/gpu/drm/tilcdc/tilcdc_external.h           |   5 +-
 9 files changed, 564 insertions(+), 77 deletions(-)
 rename Documentation/devicetree/bindings/display/{ti => bridge}/ti,tfp410.txt (65%)
 create mode 100644 drivers/gpu/drm/bridge/ti-tfp410.c
Signature · 6 lines
1.9.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
author
#1 lore raw

PATCH v5 1/4 drm/tilcdc: Recover from sync lost error flood by resetting the LCDC

Recover from sync lost error flood by resetting the LCDC instead of turning off the SYNC_LOST error IRQ. When LCDC starves on limited memory bandwidth it may sometimes result an error situation when the picture may have shifted couple of pixels to right and SYNC_LOST interrupt is generated on every frame. LCDC main reset recovers from this situation and causes a brief blanking on the screen.

---
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
drivers/gpu/drm/tilcdc/tilcdc_crtc.c +25 -1
index 0d09acc..c787349 100644
@@ -55,6 +55,7 @@ struct tilcdc_crtc {
 
 	int sync_lost_count;
 	bool frame_intact;
+	struct work_struct recover_work;
 };
 #define to_tilcdc_crtc(x) container_of(x, struct tilcdc_crtc, base)
 
@@ -252,6 +253,25 @@ static bool tilcdc_crtc_is_on(struct drm_crtc *crtc)
 	return crtc->state && crtc->state->enable && crtc->state->active;
 }
 
+static void tilcdc_crtc_recover_work(struct work_struct *work)
+{
+	struct tilcdc_crtc *tilcdc_crtc =
+		container_of(work, struct tilcdc_crtc, recover_work);
+	struct drm_crtc *crtc = &tilcdc_crtc->base;
+
+	dev_info(crtc->dev->dev, "%s: Reset CRTC", __func__);
+
+	drm_modeset_lock_crtc(crtc, NULL);
+
+	if (!tilcdc_crtc_is_on(crtc))
+		goto out;
+
+	tilcdc_crtc_disable(crtc);
+	tilcdc_crtc_enable(crtc);
+out:
+	drm_modeset_unlock_crtc(crtc);
+}
+
 static void tilcdc_crtc_destroy(struct drm_crtc *crtc)
 {
 	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
@@ -838,9 +858,12 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
 			tilcdc_crtc->frame_intact = false;
 			if (tilcdc_crtc->sync_lost_count++ >
 			    SYNC_LOST_COUNT_LIMIT) {
-				dev_err(dev->dev, "%s(0x%08x): Sync lost flood detected, disabling the interrupt", __func__, stat);
+				dev_err(dev->dev, "%s(0x%08x): Sync lost flood detected, recovering", __func__, stat);
+				queue_work(system_wq,
+					   &tilcdc_crtc->recover_work);
 				tilcdc_write(dev, LCDC_INT_ENABLE_CLR_REG,
 					     LCDC_SYNC_LOST);
+				tilcdc_crtc->sync_lost_count = 0;
 			}
 		}
 
@@ -880,6 +903,7 @@ struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev)
 			"unref", unref_worker);
 
 	spin_lock_init(&tilcdc_crtc->irq_lock);
+	INIT_WORK(&tilcdc_crtc->recover_work, tilcdc_crtc_recover_work);
 
 	ret = drm_crtc_init_with_planes(dev, crtc,
 					&tilcdc_crtc->primary,
Signature · 6 lines
1.9.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
author
#2 lore raw

PATCH v5 2/4 dt-bindings: Move "ti, tfp410.txt" from display/ti to display/bridge

In reply to Jyri Sarha

Move "ti,tfp410.txt" from display/ti to display/bridge before adding generic (non omapdrm/dss specific) implementation and new features.

---
 Documentation/devicetree/bindings/display/{ti => bridge}/ti,tfp410.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename Documentation/devicetree/bindings/display/{ti => bridge}/ti,tfp410.txt (100%)
Documentation/devicetree/bindings/display/bridge/ti,tfp410.txt renamed from Documentation/devicetree/bindings/display/ti/ti,tfp410.txt +0 -0
similarity index 100%
rename from Documentation/devicetree/bindings/display/ti/ti,tfp410.txt
rename to Documentation/devicetree/bindings/display/bridge/ti,tfp410.txt
Signature · 6 lines
1.9.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
author
#3 lore raw

PATCH v5 3/4 drm/bridge: Add ti-tfp410 DVI transmitter driver

In reply to Jyri Sarha

Add very basic ti-tfp410 DVI transmitter driver. The only feature separating this from a completely dummy bridge is the EDID read support trough DDC I2C. Even that functionality should be in a separate generic connector driver. However, because of missing DRM infrastructure support the connector is implemented within the bridge driver. Some tfp410 HW specific features may be added later if needed, because there is a set of registers behind i2c if it is connected.

This implementation is tested against my new tilcdc bridge support and it works with BeagleBone DVI-D Cape Rev A3. A DT binding document is also updated.

---
 .../bindings/display/bridge/ti,tfp410.txt          |   9 +-
 drivers/gpu/drm/bridge/Kconfig                     |   7 +
 drivers/gpu/drm/bridge/Makefile                    |   1 +
 drivers/gpu/drm/bridge/ti-tfp410.c                 | 317 +++++++++++++++++++++
 4 files changed, 332 insertions(+), 2 deletions(-)
 create mode 100644 drivers/gpu/drm/bridge/ti-tfp410.c
Documentation/devicetree/bindings/display/bridge/ti,tfp410.txt +7 -2
index 2cbe32a..54d7e31 100644
@@ -6,10 +6,15 @@ Required properties:
 
 Optional properties:
 - powerdown-gpios: power-down gpio
+- reg: I2C address. If and only if present the device node
+       should be placed into the i2c controller node where the
+       tfp410 i2c is connected to.
 
 Required nodes:
-- Video port 0 for DPI input
-- Video port 1 for DVI output
+- Video port 0 for DPI input [1].
+- Video port 1 for DVI output [1].
+
+[1]: Documentation/devicetree/bindings/media/video-interfaces.txt
 
 Example
 -------
drivers/gpu/drm/bridge/Kconfig +7 -0
index bd6acc8..a424e03 100644
@@ -81,6 +81,13 @@ config DRM_TOSHIBA_TC358767
 	---help---
 	  Toshiba TC358767 eDP bridge chip driver.
 
+config DRM_TI_TFP410
+	tristate "TI TFP410 DVI/HDMI bridge"
+	depends on OF
+	select DRM_KMS_HELPER
+	---help---
+	  Texas Instruments TFP410 DVI/HDMI Transmitter driver
+
 source "drivers/gpu/drm/bridge/analogix/Kconfig"
 
 source "drivers/gpu/drm/bridge/adv7511/Kconfig"
drivers/gpu/drm/bridge/Makefile +1 -0
index 97ed1a5..8b065d9 100644
@@ -11,3 +11,4 @@ obj-$(CONFIG_DRM_SII902X) += sii902x.o
 obj-$(CONFIG_DRM_TOSHIBA_TC358767) += tc358767.o
 obj-$(CONFIG_DRM_ANALOGIX_DP) += analogix/
 obj-$(CONFIG_DRM_I2C_ADV7511) += adv7511/
+obj-$(CONFIG_DRM_TI_TFP410) += ti-tfp410.o
drivers/gpu/drm/bridge/ti-tfp410.c new file +317 -0

317 lines not on this page · raw message

Signature · 6 lines
1.9.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
author
#4 lore raw

Re: [PATCH v5 3/4] drm/bridge: Add ti-tfp410 DVI transmitter driver

The module unload should not be allowed while the bridge is attached. So still need to add these:

drivers/gpu/drm/bridge/ti-tfp410.c line 103

Quoted 6 lines · Jyri Sarha
drivers/gpu/drm/bridge/ti-tfp410.c new file +6 -0
+
+static int tfp410_attach(struct drm_bridge *bridge)
+{
+	struct tfp410 *dvi = drm_bridge_to_tfp410(bridge);
+	int ret;
+

+ if (!try_module_get(THIS_MODULE)) {
+ dev_err(dvi->dev, "Module unloading\n");
+ return -ENODEV;
+ }
+

Quoted 9 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +9 -0
+	if (!bridge->encoder) {
+		dev_err(dvi->dev, "Missing encoder\n");
+		return -ENODEV;
+	}
+
+	drm_connector_helper_add(&dvi->connector,
+				 &tfp410_con_helper_funcs);
+	ret = drm_connector_init(bridge->dev, &dvi->connector,
+				 &tfp410_con_funcs, DRM_MODE_CONNECTOR_HDMIA);

drivers/gpu/drm/bridge/ti-tfp410.c line 122

Quoted 10 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +10 -0
+	if (ret) {
+		dev_err(dvi->dev, "drm_connector_init() failed: %d\n", ret);
+		return ret;
+	}
+
+	drm_mode_connector_attach_encoder(&dvi->connector,
+					  bridge->encoder);
+
+	return 0;
+}

+static void tfp410_detach(struct drm_bridge *bridge) +{
+ module_put(THIS_MODULE);
+}
+

drivers/gpu/drm/bridge/ti-tfp410.c line 125

Quoted 3 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +3 -0
+
+static const struct drm_bridge_funcs tfp410_bridge_funcs = {
+	.attach		= tfp410_attach,

+ .detach = tfp410_detach,

Review

Quoted 2 lines
(quoted diff) +2 -0
+};
+

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

#5 lore raw

Re: [PATCH v5 3/4] drm/bridge: Add ti-tfp410 DVI transmitter driver

Hi Jyri,

Quoted 11 lines · On Tuesday 29 Nov 2016 22:18:25 Jyri Sarha wrote:

The module unload should not be allowed while the bridge is attached. So still need to add these:

Quoted 6 lines · Jyri Sarha
drivers/gpu/drm/bridge/ti-tfp410.c new file +6 -0
+
+static int tfp410_attach(struct drm_bridge *bridge)
+{
+	struct tfp410 *dvi = drm_bridge_to_tfp410(bridge);
+	int ret;
+

drivers/gpu/drm/bridge/ti-tfp410.c line 108

Quoted 5 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +5 -0
+       if (!try_module_get(THIS_MODULE)) {
+               dev_err(dvi->dev, "Module unloading\n");
+               return -ENODEV;
+       }
+

Shouldn't this be done in core code ?

Quoted 34 lines
Quoted 19 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +19 -0
+	if (!bridge->encoder) {
+		dev_err(dvi->dev, "Missing encoder\n");
+		return -ENODEV;
+	}
+
+	drm_connector_helper_add(&dvi->connector,
+				 &tfp410_con_helper_funcs);
+	ret = drm_connector_init(bridge->dev, &dvi->connector,
+				 &tfp410_con_funcs, DRM_MODE_CONNECTOR_HDMIA);
+	if (ret) {
+		dev_err(dvi->dev, "drm_connector_init() failed: %d\n", ret);
+		return ret;
+	}
+
+	drm_mode_connector_attach_encoder(&dvi->connector,
+					  bridge->encoder);
+
+	return 0;
+}
drivers/gpu/drm/bridge/ti-tfp410.c new file +5 -0
+static void tfp410_detach(struct drm_bridge *bridge)
+{
+       module_put(THIS_MODULE);
+}
+

drivers/gpu/drm/bridge/ti-tfp410.c line 125

Quoted 4 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +3 -0
+
+static const struct drm_bridge_funcs tfp410_bridge_funcs = {
+	.attach		= tfp410_attach,

+ .detach = tfp410_detach,

Quoted 2 lines
(quoted diff) +2 -0
+};
+
Signature · 8 lines
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
author
#6 lore raw

Re: [PATCH v5 3/4] drm/bridge: Add ti-tfp410 DVI transmitter driver

Quoted 19 lines · Laurent Pinchart

Hi Jyri,

Quoted 4 lines · On Tuesday 29 Nov 2016 22:18:25 Jyri Sarha wrote:
Quoted 4 lines

The module unload should not be allowed while the bridge is attached. So still need to add these:

On 11/25/16 11:02, Jyri Sarha wrote:

Quoted 12 lines

drivers/gpu/drm/bridge/ti-tfp410.c line 108

Quoted 12 lines
Quoted 6 lines
Quoted 6 lines
drivers/gpu/drm/bridge/ti-tfp410.c new file +6 -0
+
+static int tfp410_attach(struct drm_bridge *bridge)
+{
+	struct tfp410 *dvi = drm_bridge_to_tfp410(bridge);
+	int ret;
+
drivers/gpu/drm/bridge/ti-tfp410.c new file +5 -0
+       if (!try_module_get(THIS_MODULE)) {
+               dev_err(dvi->dev, "Module unloading\n");
+               return -ENODEV;
+       }
+
Quoted 2 lines

Shouldn't this be done in core code ?

Hmmm, probably. I'll send a patch shortly.

Cheers,
Jyri
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

author
#7 lore raw

PATCH v5 4/4 drm/tilcdc: Add drm bridge support for attaching drm bridge drivers

In reply to Jyri Sarha

Adds drm bride support for attaching drm bridge drivers to tilcdc. The decision whether a video port leads to an external encoder or bridge is made simply based on remote device's compatible string. The code has been tested with BeagleBone-Black with and without BeagleBone DVI-D Cape Rev A3 using ti-tfp410 driver.

---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c      |  11 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.h      |   5 +-
 drivers/gpu/drm/tilcdc/tilcdc_external.c | 260 +++++++++++++++++++++++--------
 drivers/gpu/drm/tilcdc/tilcdc_external.h |   5 +-
 4 files changed, 207 insertions(+), 74 deletions(-)
drivers/gpu/drm/tilcdc/tilcdc_drv.c +8 -3
index 3d2cea0..7f4d3bc 100644
@@ -209,7 +209,7 @@ static void tilcdc_fini(struct drm_device *dev)
 
 	drm_irq_uninstall(dev);
 	drm_mode_config_cleanup(dev);
-	tilcdc_remove_external_encoders(dev);
+	tilcdc_remove_external_device(dev);
 
 #ifdef CONFIG_CPU_FREQ
 	if (priv->freq_transition.notifier_call)
@@ -381,12 +381,17 @@ static int tilcdc_init(struct drm_driver *ddrv, struct device *dev)
 		if (ret < 0)
 			goto init_failed;
 
-		ret = tilcdc_add_external_encoders(ddev);
+		ret = tilcdc_add_component_encoder(ddev);
 		if (ret < 0)
 			goto init_failed;
+	} else {
+		ret = tilcdc_attach_external_device(ddev);
+		if (ret)
+			goto init_failed;
 	}
 
-	if ((priv->num_encoders == 0) || (priv->num_connectors == 0)) {
+	if (!priv->external_connector &&
+	    ((priv->num_encoders == 0) || (priv->num_connectors == 0))) {
 		dev_err(dev, "no encoders/connectors found\n");
 		ret = -ENXIO;
 		goto init_failed;
drivers/gpu/drm/tilcdc/tilcdc_drv.h +4 -1
index d31fe5d..411f8a8 100644
@@ -88,7 +88,10 @@ struct tilcdc_drm_private {
 
 	unsigned int num_connectors;
 	struct drm_connector *connectors[8];
-	const struct drm_connector_helper_funcs *connector_funcs[8];
+
+	struct drm_encoder *external_encoder;
+	struct drm_connector *external_connector;
+	const struct drm_connector_helper_funcs *connector_funcs;
 
 	bool is_registered;
 	bool is_componentized;
drivers/gpu/drm/tilcdc/tilcdc_external.c +192 -68

325 lines not on this page · raw message

drivers/gpu/drm/tilcdc/tilcdc_external.h +3 -2
index c700e0c..763d18f 100644
@@ -18,8 +18,9 @@
 #ifndef __TILCDC_EXTERNAL_H__
 #define __TILCDC_EXTERNAL_H__
 
-int tilcdc_add_external_encoders(struct drm_device *dev);
-void tilcdc_remove_external_encoders(struct drm_device *dev);
+int tilcdc_add_component_encoder(struct drm_device *dev);
+void tilcdc_remove_external_device(struct drm_device *dev);
 int tilcdc_get_external_components(struct device *dev,
 				   struct component_match **match);
+int tilcdc_attach_external_device(struct drm_device *ddev);
 #endif /* __TILCDC_SLAVE_H__ */
Signature · 6 lines
1.9.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
author
#8 lore raw

Re: [PATCH v5 4/4] drm/tilcdc: Add drm bridge support for attaching drm bridge drivers

Quoted 8 lines · Jyri Sarha
drivers/gpu/drm/tilcdc/tilcdc_external.c +1 -3
-void tilcdc_remove_external_encoders(struct drm_device *dev)
+void tilcdc_remove_external_device(struct drm_device *dev)
 {
 	struct tilcdc_drm_private *priv = dev->dev_private;
-	int i;
 
 	/* Restore the original helper functions, if any. */
-	for (i = 0; i < priv->num_connectors; i++)

drivers/gpu/drm/tilcdc/tilcdc_external.c static int tilcdc_add_external_encoder(struct drm_device *dev, · line 155

Quoted 10 lines
drivers/gpu/drm/tilcdc/tilcdc_external.c +5 -5
-		if (IS_ERR(priv->connector_funcs[i]))
-			drm_connector_helper_add(priv->connectors[i], NULL);
-		else if (priv->connector_funcs[i])
-			drm_connector_helper_add(priv->connectors[i],
-						 priv->connector_funcs[i]);
+	if (IS_ERR(priv->connector_funcs))
+		drm_connector_helper_add(priv->external_connector, NULL);
+	else if (priv->connector_funcs)
+		drm_connector_helper_add(priv->external_connector,
+					 priv->connector_funcs);

I still need to add:
+
+ if (priv->external_encoder && priv->external_encoder->bridge)
+ drm_bridge_detach(priv->external_encoder->bridge);

Quoted 1 line

+}

... and reorder the tilcdc_fini() a bit. I need to put tilcdc_remove_external_device() before drm_mode_config_cleanup() for drm_bridge_detach() to be called before whole mode config is teared apart.

There is also a bug in tearing down drm debugfs that had to be fixed before I got module unload and reload to work properly. I'll send a patch shortly.
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

#9 lore raw

Re: [PATCH v5 4/4] drm/tilcdc: Add drm bridge support for attaching drm bridge drivers

Hi Jyri,

Quoted 21 lines · On Tuesday 29 Nov 2016 22:18:56 Jyri Sarha wrote:
Quoted 8 lines · Jyri Sarha
drivers/gpu/drm/tilcdc/tilcdc_external.c +1 -3
-void tilcdc_remove_external_encoders(struct drm_device *dev)
+void tilcdc_remove_external_device(struct drm_device *dev)
 {
 	struct tilcdc_drm_private *priv = dev->dev_private;
-	int i;
 
 	/* Restore the original helper functions, if any. */
-	for (i = 0; i < priv->num_connectors; i++)

drivers/gpu/drm/tilcdc/tilcdc_external.c static int tilcdc_add_external_encoder(struct drm_device *dev, · line 155

Quoted 10 lines
drivers/gpu/drm/tilcdc/tilcdc_external.c +5 -5
-		if (IS_ERR(priv->connector_funcs[i]))
-			drm_connector_helper_add(priv->connectors[i], NULL);
-		else if (priv->connector_funcs[i])
-			drm_connector_helper_add(priv->connectors[i],
-						 priv->connector_funcs[i]);
+	if (IS_ERR(priv->connector_funcs))
+		drm_connector_helper_add(priv->external_connector, NULL);
+	else if (priv->connector_funcs)
+		drm_connector_helper_add(priv->external_connector,
+					 priv->connector_funcs);

I still need to add:

Review

Quoted 3 lines
(quoted diff) +3 -0
+
+       if (priv->external_encoder && priv->external_encoder->bridge)
+               drm_bridge_detach(priv->external_encoder->bridge);

"drm: bridge: Detach bridge from encoder at encoder cleanup time" :-)

Quoted 10 lines
Quoted 1 line

+}

... and reorder the tilcdc_fini() a bit. I need to put tilcdc_remove_external_device() before drm_mode_config_cleanup() for drm_bridge_detach() to be called before whole mode config is teared apart.

There is also a bug in tearing down drm debugfs that had to be fixed before I got module unload and reload to work properly. I'll send a patch shortly.

Signature · 8 lines
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Tested-by on the v5 series
#10 lore raw
In reply to Jyri Sarha

2016-11-25 10:02 GMT+01:00 Jyri Sarha <[email protected]>:

Quoted 74 lines

Changes since v4:
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- Put i2c behind #if IS_ENABLED(CONFIG_I2C)
- "drm/tilcdc: Add drm bridge support for attaching drm bridge drivers"
- Use exsisting infrastructure to hookup crtc mode validation code to newly connected connector, whether that came from componentized driver or trough an attached bridge

Changes since v3:
- "drm/tilcdc: Enable sync lost error and recovery handling for rev 1 LCDC"
- Fix broken irq enable/disble code for LCDC rev 1
- Add: "dt-bindings: Move "ti,tfp410.txt" from display/ti to display/bridge"
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- Don't fail if either i2c or platform driver register succeeds
- ftp410 -> tfp410
- Merge the old display/ti,tfp410.txt document with my addition

Changes since v2:
- "drm/tilcdc: Recover from sync lost error flood by resetting the LCDC"
- no change
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- Fix deveice-tree document
- "driver node" -> "device node"
- remove "(the current implementation does not yet support this)"
- Add dummy i2c support. The driver probe works also if placed under i2c controller node, but there is no actual i2c probing.
- "drm/tilcdc: Add drm bridge support for attaching drm bridge drivers"
- no change

Changes since first version of the series:
- "drm/tilcdc: Recover from sync lost error flood by resetting the LCDC"
- no change
- "drm/bridge: Add ti-tfp410 DVI transmitter driver"
- HDMI -> DVI
- DT Binding document
- Prepare for tfp410 connected trough i2c by optional reg property
- Require two port nodes
- Implementation
- Implement connector node functionality with in tfp410 bridge drive, but follow generic connector binding by pulling the ddc-i2c-bus property from the connector node.
- "drm/tilcdc: Add drm bridge support for attaching drm bridge drivers"
- Remove earlier change in TD binding document. There is no need to mention DRM implementation details, like bridge support, in DT binding.

The first patch is an independent on and I've been testing it for quite a while now.

The tfp410 bridge driver and the tilcdc bridge support are tested with BeagleBone DVI-D Cape Rev A3. The tfp410 bridge driver is missing a lot of features, because the DVI-D cape does not have too many wires connected. The missing features can be added later when they are needed.

Jyri Sarha (4):
drm/tilcdc: Recover from sync lost error flood by resetting the LCDC
dt-bindings: Move "ti,tfp410.txt" from display/ti to display/bridge drm/bridge: Add ti-tfp410 DVI transmitter driver drm/tilcdc: Add drm bridge support for attaching drm bridge drivers

 .../bindings/display/{ti => bridge}/ti,tfp410.txt  |   9 +-
 drivers/gpu/drm/bridge/Kconfig                     |   7 +
 drivers/gpu/drm/bridge/Makefile                    |   1 +
 drivers/gpu/drm/bridge/ti-tfp410.c                 | 317 +++++++++++++++++++++
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c               |  26 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.c                |  11 +-
 drivers/gpu/drm/tilcdc/tilcdc_drv.h                |   5 +-
 drivers/gpu/drm/tilcdc/tilcdc_external.c           | 260 ++++++++++++-----
 drivers/gpu/drm/tilcdc/tilcdc_external.h           |   5 +-
 9 files changed, 564 insertions(+), 77 deletions(-)
 rename Documentation/devicetree/bindings/display/{ti => bridge}/ti,tfp410.txt (65%)
 create mode 100644 drivers/gpu/drm/bridge/ti-tfp410.c
Quoted 3 lines

--
1.9.1

For 1/4 and 4/4:

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel