On 9/23/2025 9:50 AM, Dmitry Baryshkov wrote:

[...]


+       /* One endpoint may correspond to one HPD bridge. */
+       for_each_of_graph_port_endpoint(port, dp_ep) {
+               /* Try to get "port" node of correspond PHY device */
+               struct device_node *phy_ep __free(device_node) =
+                       of_graph_get_remote_endpoint(dp_ep);
+               struct device_node *phy_port __free(device_node) =
+                       of_get_parent(phy_ep);
+
+               if (!phy_port) {
+                       continue;
+               }
+
+               /*
+                * A PHY port may contain two endpoints: USB connector port or 
CDN-DP port.
+                * Try to find the node of USB connector.
And then there can be a retimer between PHY and the USB-C connector. Or
some signal MUX. Or DP-to-HDMI bridge. Please, don't parse DT for other
devices. Instead you can add drm_aux_bridge to your PHY and let DRM core
build the bridge chain following OF graph.

I think building a bridge chain across multiple drm_aux_hpd_bridge may be 
difficult. First, drm_dp_hpd_bridge_register() cannot register the bridge 
immediately; instead, it is deferred until drm_aux_hpd_bridge_probe(). When it 
is added to the bridge_list, it may not yet be attached, and attempting to 
attach it at that point is too late.

But, if I only use drm_aux_bridge on the USB-C connector, and use my own custom 
bridge on the PHY device and managing the alloc and attach bridge process 
myself, then things would become much easier.

--
Best,
Chaoyi

Reply via email to