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

Merge branch 'net-altera-tse-cleanup-init-sequence'

Maxime Chevallier says:

====================
net: altera-tse: Cleanup init sequence

Altera TSE cleanup to make sure everything is properly intialized
before registering the netdev.

When Altera TSE was converted to phylink, the PCS and phylink creation
were added after register_netdev(), which is wrong as this may race
with .ndo_open() once the netdev is registered.

This series makes so that we register the netdev once all resources are
cleanly initialised, that includes PCS and phylink creation as well as a
few other operations such as reading the IP version.

No errors were found in the wild, so this series doesn't target net, but
given that we fix some racy-ness, a point could be made to send that to
net.

This series doesn't introduce functional changes, however the internal
mii_bus for PCS configuration is renamed.

v1: https://lore.kernel.org/20251030102418.114518-1-maxime.chevallier@bootlin.com
====================

Link: https://patch.msgid.link/20251103104928.58461-1-maxime.chevallier@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+23 -27
-3
drivers/net/ethernet/altera/altera_tse.h
··· 401 401 /* MAC address space */ 402 402 struct altera_tse_mac __iomem *mac_dev; 403 403 404 - /* TSE Revision */ 405 - u32 revision; 406 - 407 404 /* mSGDMA Rx Dispatcher address space */ 408 405 void __iomem *rx_dma_csr; 409 406 void __iomem *rx_dma_desc;
+23 -24
drivers/net/ethernet/altera/altera_tse_main.c
··· 892 892 netdev_warn(dev, "device MAC address %pM\n", 893 893 dev->dev_addr); 894 894 895 - if ((priv->revision < 0xd00) || (priv->revision > 0xe00)) 896 - netdev_warn(dev, "TSE revision %x\n", priv->revision); 897 - 898 895 spin_lock(&priv->mac_cfg_lock); 899 896 900 897 ret = reset_mac(priv); ··· 1139 1142 struct net_device *ndev; 1140 1143 void __iomem *descmap; 1141 1144 int ret = -ENODEV; 1145 + u32 revision; 1142 1146 1143 1147 ndev = alloc_etherdev(sizeof(struct altera_tse_private)); 1144 1148 if (!ndev) { ··· 1148 1150 } 1149 1151 1150 1152 SET_NETDEV_DEV(ndev, &pdev->dev); 1153 + platform_set_drvdata(pdev, ndev); 1151 1154 1152 1155 priv = netdev_priv(ndev); 1153 1156 priv->device = &pdev->dev; ··· 1386 1387 spin_lock_init(&priv->tx_lock); 1387 1388 spin_lock_init(&priv->rxdma_irq_lock); 1388 1389 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 - platform_set_drvdata(pdev, ndev); 1397 - 1398 - priv->revision = ioread32(&priv->mac_dev->megacore_revision); 1399 - 1400 - if (netif_msg_probe(priv)) 1401 - dev_info(&pdev->dev, "Altera TSE MAC version %d.%d at 0x%08lx irq %d/%d\n", 1402 - (priv->revision >> 8) & 0xff, 1403 - priv->revision & 0xff, 1404 - (unsigned long) control_port->start, priv->rx_irq, 1405 - priv->tx_irq); 1406 - 1407 - snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii", ndev->name); 1390 + snprintf(mrc.name, MII_BUS_ID_SIZE, "%s-pcs-mii", dev_name(&pdev->dev)); 1408 1391 pcs_bus = devm_mdio_regmap_register(&pdev->dev, &mrc); 1409 1392 if (IS_ERR(pcs_bus)) { 1410 1393 ret = PTR_ERR(pcs_bus); ··· 1423 1442 goto err_init_phylink; 1424 1443 } 1425 1444 1445 + ret = register_netdev(ndev); 1446 + if (ret) { 1447 + dev_err(&pdev->dev, "failed to register TSE net device\n"); 1448 + goto err_register_netdev; 1449 + } 1450 + 1451 + revision = ioread32(&priv->mac_dev->megacore_revision); 1452 + 1453 + if (revision < 0xd00 || revision > 0xe00) 1454 + netdev_warn(ndev, "TSE revision %x\n", revision); 1455 + 1456 + if (netif_msg_probe(priv)) 1457 + dev_info(&pdev->dev, "Altera TSE MAC version %d.%d at 0x%08lx irq %d/%d\n", 1458 + (revision >> 8) & 0xff, revision & 0xff, 1459 + (unsigned long)control_port->start, priv->rx_irq, 1460 + priv->tx_irq); 1461 + 1426 1462 return 0; 1463 + 1464 + err_register_netdev: 1465 + phylink_destroy(priv->phylink); 1427 1466 err_init_phylink: 1428 1467 lynx_pcs_destroy(priv->pcs); 1429 1468 err_init_pcs: 1430 - unregister_netdev(ndev); 1431 - err_register_netdev: 1432 1469 netif_napi_del(&priv->napi); 1433 1470 altera_tse_mdio_destroy(ndev); 1434 1471 err_free_netdev: