@@ -331,7 +331,7 @@ static int graph_lnk_is_multi(struct device_node *lnk)
331
331
return __graph_get_type (lnk ) == GRAPH_MULTI ;
332
332
}
333
333
334
- static struct device_node * graph_get_next_multi_ep (struct device_node * * port )
334
+ static struct device_node * graph_get_next_multi_ep (struct device_node * * port , int idx )
335
335
{
336
336
struct device_node * ports __free (device_node ) = port_to_ports (* port );
337
337
struct device_node * rep = NULL ;
@@ -351,7 +351,16 @@ static struct device_node *graph_get_next_multi_ep(struct device_node **port)
351
351
* port@1 { rep1 };
352
352
* };
353
353
*/
354
- * port = of_graph_get_next_port (ports , * port );
354
+
355
+ /*
356
+ * Don't use of_graph_get_next_port() here
357
+ *
358
+ * In overlay case, "port" are not necessarily in order. So we need to use
359
+ * of_graph_get_port_by_id() instead
360
+ */
361
+ of_node_put (* port );
362
+
363
+ * port = of_graph_get_port_by_id (ports , idx );
355
364
if (* port ) {
356
365
struct device_node * ep __free (device_node ) = of_graph_get_next_port_endpoint (* port , NULL );
357
366
@@ -614,7 +623,7 @@ static int graph_parse_node_multi(struct simple_util_priv *priv,
614
623
* };
615
624
* };
616
625
*/
617
- struct device_node * ep __free (device_node ) = graph_get_next_multi_ep (& port );
626
+ struct device_node * ep __free (device_node ) = graph_get_next_multi_ep (& port , idx + 1 );
618
627
if (!ep )
619
628
break ;
620
629
@@ -729,7 +738,7 @@ static void graph_link_init(struct simple_util_priv *priv,
729
738
730
739
of_node_get (port_cpu );
731
740
if (graph_lnk_is_multi (port_cpu )) {
732
- ep_cpu = graph_get_next_multi_ep (& port_cpu );
741
+ ep_cpu = graph_get_next_multi_ep (& port_cpu , 1 );
733
742
of_node_put (port_cpu );
734
743
port_cpu = ep_to_port (ep_cpu );
735
744
} else {
@@ -739,7 +748,7 @@ static void graph_link_init(struct simple_util_priv *priv,
739
748
740
749
of_node_get (port_codec );
741
750
if (graph_lnk_is_multi (port_codec )) {
742
- ep_codec = graph_get_next_multi_ep (& port_codec );
751
+ ep_codec = graph_get_next_multi_ep (& port_codec , 1 );
743
752
of_node_put (port_codec );
744
753
port_codec = ep_to_port (ep_codec );
745
754
} else {
0 commit comments