@@ -1074,8 +1074,11 @@ static struct device_node *rswitch_get_port_node(struct rswitch_device *rdev)
1074
1074
port = NULL ;
1075
1075
goto out ;
1076
1076
}
1077
- if (index == rdev -> etha -> index )
1077
+ if (index == rdev -> etha -> index ) {
1078
+ if (!of_device_is_available (port ))
1079
+ port = NULL ;
1078
1080
break ;
1081
+ }
1079
1082
}
1080
1083
1081
1084
out :
@@ -1106,7 +1109,7 @@ static int rswitch_etha_get_params(struct rswitch_device *rdev)
1106
1109
1107
1110
port = rswitch_get_port_node (rdev );
1108
1111
if (!port )
1109
- return - ENODEV ;
1112
+ return 0 ; /* ignored */
1110
1113
1111
1114
err = of_get_phy_mode (port , & rdev -> etha -> phy_interface );
1112
1115
of_node_put (port );
@@ -1324,13 +1327,13 @@ static int rswitch_ether_port_init_all(struct rswitch_private *priv)
1324
1327
{
1325
1328
int i , err ;
1326
1329
1327
- for ( i = 0 ; i < RSWITCH_NUM_PORTS ; i ++ ) {
1330
+ rswitch_for_each_enabled_port ( priv , i ) {
1328
1331
err = rswitch_ether_port_init_one (priv -> rdev [i ]);
1329
1332
if (err )
1330
1333
goto err_init_one ;
1331
1334
}
1332
1335
1333
- for ( i = 0 ; i < RSWITCH_NUM_PORTS ; i ++ ) {
1336
+ rswitch_for_each_enabled_port ( priv , i ) {
1334
1337
err = rswitch_serdes_init (priv -> rdev [i ]);
1335
1338
if (err )
1336
1339
goto err_serdes ;
@@ -1339,12 +1342,12 @@ static int rswitch_ether_port_init_all(struct rswitch_private *priv)
1339
1342
return 0 ;
1340
1343
1341
1344
err_serdes :
1342
- for ( i -- ; i >= 0 ; i -- )
1345
+ rswitch_for_each_enabled_port_continue_reverse ( priv , i )
1343
1346
rswitch_serdes_deinit (priv -> rdev [i ]);
1344
1347
i = RSWITCH_NUM_PORTS ;
1345
1348
1346
1349
err_init_one :
1347
- for ( i -- ; i >= 0 ; i -- )
1350
+ rswitch_for_each_enabled_port_continue_reverse ( priv , i )
1348
1351
rswitch_ether_port_deinit_one (priv -> rdev [i ]);
1349
1352
1350
1353
return err ;
@@ -1608,6 +1611,7 @@ static int rswitch_device_alloc(struct rswitch_private *priv, int index)
1608
1611
netif_napi_add (ndev , & rdev -> napi , rswitch_poll );
1609
1612
1610
1613
port = rswitch_get_port_node (rdev );
1614
+ rdev -> disabled = !port ;
1611
1615
err = of_get_ethdev_address (port , ndev );
1612
1616
of_node_put (port );
1613
1617
if (err ) {
@@ -1707,16 +1711,16 @@ static int rswitch_init(struct rswitch_private *priv)
1707
1711
if (err )
1708
1712
goto err_ether_port_init_all ;
1709
1713
1710
- for ( i = 0 ; i < RSWITCH_NUM_PORTS ; i ++ ) {
1714
+ rswitch_for_each_enabled_port ( priv , i ) {
1711
1715
err = register_netdev (priv -> rdev [i ]-> ndev );
1712
1716
if (err ) {
1713
- for ( i -- ; i >= 0 ; i -- )
1717
+ rswitch_for_each_enabled_port_continue_reverse ( priv , i )
1714
1718
unregister_netdev (priv -> rdev [i ]-> ndev );
1715
1719
goto err_register_netdev ;
1716
1720
}
1717
1721
}
1718
1722
1719
- for ( i = 0 ; i < RSWITCH_NUM_PORTS ; i ++ )
1723
+ rswitch_for_each_enabled_port ( priv , i )
1720
1724
netdev_info (priv -> rdev [i ]-> ndev , "MAC address %pM\n" ,
1721
1725
priv -> rdev [i ]-> ndev -> dev_addr );
1722
1726
0 commit comments