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

net: altera-tse: Init PCS and phylink before registering netdev

register_netdev() must be done only once all resources are ready, as
they may be used in .ndo_open() immediately upon registration.

Move the lynx PCS and phylink initialisation before registerng the
netdevice. We also remove the call to netif_carrier_off(), as phylink
takes care of that.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20251103104928.58461-5-maxime.chevallier@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Maxime Chevallier and committed by
Jakub Kicinski
055e554b 9350ea63

+20 -20
+20 -20
drivers/net/ethernet/altera/altera_tse_main.c
··· 1386 1386 spin_lock_init(&priv->tx_lock); 1387 1387 spin_lock_init(&priv->rxdma_irq_lock); 1388 1388 1389 - netif_carrier_off(ndev); 1390 - ret = register_netdev(ndev); 1391 - if (ret) { 1392 - dev_err(&pdev->dev, "failed to register TSE net device\n"); 1393 - goto err_register_netdev; 1394 - } 1395 - 1396 - revision = ioread32(&priv->mac_dev->megacore_revision); 1397 - 1398 - if (revision < 0xd00 || revision > 0xe00) 1399 - netdev_warn(ndev, "TSE revision %x\n", revision); 1400 - 1401 - if (netif_msg_probe(priv)) 1402 - dev_info(&pdev->dev, "Altera TSE MAC version %d.%d at 0x%08lx irq %d/%d\n", 1403 - (revision >> 8) & 0xff, revision & 0xff, 1404 - (unsigned long) control_port->start, priv->rx_irq, 1405 - priv->tx_irq); 1406 - 1407 1389 snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii", dev_name(&pdev->dev)); 1408 1390 pcs_bus = devm_mdio_regmap_register(&pdev->dev, &mrc); 1409 1391 if (IS_ERR(pcs_bus)) { ··· 1423 1441 goto err_init_phylink; 1424 1442 } 1425 1443 1444 + ret = register_netdev(ndev); 1445 + if (ret) { 1446 + dev_err(&pdev->dev, "failed to register TSE net device\n"); 1447 + goto err_register_netdev; 1448 + } 1449 + 1450 + revision = ioread32(&priv->mac_dev->megacore_revision); 1451 + 1452 + if (revision < 0xd00 || revision > 0xe00) 1453 + netdev_warn(ndev, "TSE revision %x\n", revision); 1454 + 1455 + if (netif_msg_probe(priv)) 1456 + dev_info(&pdev->dev, "Altera TSE MAC version %d.%d at 0x%08lx irq %d/%d\n", 1457 + (revision >> 8) & 0xff, revision & 0xff, 1458 + (unsigned long)control_port->start, priv->rx_irq, 1459 + priv->tx_irq); 1460 + 1426 1461 return 0; 1462 + 1463 + err_register_netdev: 1464 + phylink_destroy(priv->phylink); 1427 1465 err_init_phylink: 1428 1466 lynx_pcs_destroy(priv->pcs); 1429 1467 err_init_pcs: 1430 - unregister_netdev(ndev); 1431 - err_register_netdev: 1432 1468 netif_napi_del(&priv->napi); 1433 1469 altera_tse_mdio_destroy(ndev); 1434 1470 err_free_netdev: