Re: [PATCH v4 3/3] drm/tidss: Add OLDI bridge support

Sverdlin, Alexander
2025-03-18T13:35:17Z

Hi Aradhya!

On Sun, 2024-11-24 at 20:06 +0530, Aradhya Bhatia wrote:
> From: Aradhya Bhatia <a-bhatia1@ti.com>
>
> The AM62x and AM62Px SoCs feature 2 OLDI TXes each, which makes it
> possible to connect them in dual-link or cloned single-link OLDI display
> modes. The current OLDI support in tidss_dispc.c can only support for
> a single OLDI TX, connected to a VP and doesn't really support
> configuration of OLDIs in the other modes. The current OLDI support in
> tidss_dispc.c also works on the principle that the OLDI output can only
> be served by one, and only one, DSS video-port. This isn't the case in
> the AM62Px SoC, where there are 2 DSS controllers present that share the
> OLDI TXes.
>
> Having their own devicetree and their own bridge entity will help
> support the various display modes and sharing possiblilities of the OLDI
> hardware.
>
> For all these reasons, add support for the OLDI TXes as DRM bridges.

...

> +int tidss_oldi_init(struct tidss_device *tidss)
> +{
> + struct tidss_oldi *oldi;
> + struct device_node *child;
> + struct drm_bridge *bridge;
> + u32 parent_vp, oldi_instance, companion_instance;
> + enum tidss_oldi_link_type link_type = OLDI_MODE_UNSUPPORTED;
> + struct device_node *oldi_parent;
> + int ret = 0;
> +
> + tidss->num_oldis = 0;
> +
> + oldi_parent = of_get_child_by_name(tidss->dev->of_node, "oldi-transmitters");
> + if (!oldi_parent)
> + /* Return gracefully */
> + return 0;
> +
> + for_each_child_of_node(oldi_parent, child) {

Would for_each_available_child_of_node() make sense here so that
k3-am62-main.dtsi would have both ports with status = "disabled" and
the users will enable one or another?

> + ret = get_parent_dss_vp(child, &parent_vp);
> + if (ret) {
> + if (ret == -ENODEV) {
> + /*
> + * ENODEV means that this particular OLDI node
> + * is not connected with the DSS, which is not
> + * a harmful case. There could be another OLDI
> + * which may still be connected.
> + * Continue to search for that.
> + */
> + ret = 0;
> + continue;
> + }
> + goto err_put_node;
> + }

--
Alexander Sverdlin
Siemens AG