Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: nixge: Add support for fixed-link configurations

Add support for fixed-link configurations to nixge driver.

Signed-off-by: Moritz Fischer <mdf@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Moritz Fischer and committed by
David S. Miller
8dc0ae90 dd648818

+20 -7
+20 -7
drivers/net/ethernet/ni/nixge.c
··· 1282 1282 1283 1283 static int nixge_probe(struct platform_device *pdev) 1284 1284 { 1285 + struct device_node *mn, *phy_node; 1285 1286 struct nixge_priv *priv; 1286 1287 struct net_device *ndev; 1287 - struct device_node *mn; 1288 1288 const u8 *mac_addr; 1289 1289 int err; 1290 1290 ··· 1353 1353 goto unregister_mdio; 1354 1354 } 1355 1355 1356 - priv->phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); 1357 - if (!priv->phy_node) { 1358 - netdev_err(ndev, "not find \"phy-handle\" property\n"); 1359 - err = -EINVAL; 1360 - goto unregister_mdio; 1356 + phy_node = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0); 1357 + if (!phy_node && of_phy_is_fixed_link(pdev->dev.of_node)) { 1358 + err = of_phy_register_fixed_link(pdev->dev.of_node); 1359 + if (err < 0) { 1360 + netdev_err(ndev, "broken fixed-link specification\n"); 1361 + goto unregister_mdio; 1362 + } 1363 + phy_node = of_node_get(pdev->dev.of_node); 1361 1364 } 1365 + priv->phy_node = phy_node; 1362 1366 1363 1367 err = register_netdev(priv->ndev); 1364 1368 if (err) { 1365 1369 netdev_err(ndev, "register_netdev() error (%i)\n", err); 1366 - goto unregister_mdio; 1370 + goto free_phy; 1367 1371 } 1368 1372 1369 1373 return 0; 1374 + 1375 + free_phy: 1376 + if (of_phy_is_fixed_link(pdev->dev.of_node)) 1377 + of_phy_deregister_fixed_link(pdev->dev.of_node); 1378 + of_node_put(phy_node); 1370 1379 1371 1380 unregister_mdio: 1372 1381 if (priv->mii_bus) ··· 1393 1384 struct nixge_priv *priv = netdev_priv(ndev); 1394 1385 1395 1386 unregister_netdev(ndev); 1387 + 1388 + if (of_phy_is_fixed_link(pdev->dev.of_node)) 1389 + of_phy_deregister_fixed_link(pdev->dev.of_node); 1390 + of_node_put(priv->phy_node); 1396 1391 1397 1392 if (priv->mii_bus) 1398 1393 mdiobus_unregister(priv->mii_bus);