hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/broadcom/bgmac.c
....@@ -890,13 +890,13 @@
890890
891891 if (iost & BGMAC_BCMA_IOST_ATTACHED) {
892892 flags = BGMAC_BCMA_IOCTL_SW_CLKEN;
893
- if (!bgmac->has_robosw)
893
+ if (bgmac->in_init || !bgmac->has_robosw)
894894 flags |= BGMAC_BCMA_IOCTL_SW_RESET;
895895 }
896896 bgmac_clk_enable(bgmac, flags);
897897 }
898898
899
- if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw)
899
+ if (iost & BGMAC_BCMA_IOST_ATTACHED && (bgmac->in_init || !bgmac->has_robosw))
900900 bgmac_idm_write(bgmac, BCMA_IOCTL,
901901 bgmac_idm_read(bgmac, BCMA_IOCTL) &
902902 ~BGMAC_BCMA_IOCTL_SW_RESET);
....@@ -1448,7 +1448,7 @@
14481448 int err;
14491449
14501450 phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, NULL);
1451
- if (!phy_dev || IS_ERR(phy_dev)) {
1451
+ if (IS_ERR(phy_dev)) {
14521452 dev_err(bgmac->dev, "Failed to register fixed PHY device\n");
14531453 return -ENODEV;
14541454 }
....@@ -1490,7 +1490,7 @@
14901490 struct net_device *net_dev = bgmac->net_dev;
14911491 int err;
14921492
1493
- bgmac_chip_intrs_off(bgmac);
1493
+ bgmac->in_init = true;
14941494
14951495 net_dev->irq = bgmac->irq;
14961496 SET_NETDEV_DEV(net_dev, bgmac->dev);
....@@ -1508,6 +1508,8 @@
15081508 * Broadcom does it in arch PCI code when enabling fake PCI device.
15091509 */
15101510 bgmac_clk_enable(bgmac, 0);
1511
+
1512
+ bgmac_chip_intrs_off(bgmac);
15111513
15121514 /* This seems to be fixing IRQ by assigning OOB #6 to the core */
15131515 if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
....@@ -1542,6 +1544,8 @@
15421544 /* Omit FCS from max MTU size */
15431545 net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN;
15441546
1547
+ bgmac->in_init = false;
1548
+
15451549 err = register_netdev(bgmac->net_dev);
15461550 if (err) {
15471551 dev_err(bgmac->dev, "Cannot register net device\n");