.. | .. |
---|
890 | 890 | |
---|
891 | 891 | if (iost & BGMAC_BCMA_IOST_ATTACHED) { |
---|
892 | 892 | flags = BGMAC_BCMA_IOCTL_SW_CLKEN; |
---|
893 | | - if (!bgmac->has_robosw) |
---|
| 893 | + if (bgmac->in_init || !bgmac->has_robosw) |
---|
894 | 894 | flags |= BGMAC_BCMA_IOCTL_SW_RESET; |
---|
895 | 895 | } |
---|
896 | 896 | bgmac_clk_enable(bgmac, flags); |
---|
897 | 897 | } |
---|
898 | 898 | |
---|
899 | | - if (iost & BGMAC_BCMA_IOST_ATTACHED && !bgmac->has_robosw) |
---|
| 899 | + if (iost & BGMAC_BCMA_IOST_ATTACHED && (bgmac->in_init || !bgmac->has_robosw)) |
---|
900 | 900 | bgmac_idm_write(bgmac, BCMA_IOCTL, |
---|
901 | 901 | bgmac_idm_read(bgmac, BCMA_IOCTL) & |
---|
902 | 902 | ~BGMAC_BCMA_IOCTL_SW_RESET); |
---|
.. | .. |
---|
1448 | 1448 | int err; |
---|
1449 | 1449 | |
---|
1450 | 1450 | phy_dev = fixed_phy_register(PHY_POLL, &fphy_status, NULL); |
---|
1451 | | - if (!phy_dev || IS_ERR(phy_dev)) { |
---|
| 1451 | + if (IS_ERR(phy_dev)) { |
---|
1452 | 1452 | dev_err(bgmac->dev, "Failed to register fixed PHY device\n"); |
---|
1453 | 1453 | return -ENODEV; |
---|
1454 | 1454 | } |
---|
.. | .. |
---|
1490 | 1490 | struct net_device *net_dev = bgmac->net_dev; |
---|
1491 | 1491 | int err; |
---|
1492 | 1492 | |
---|
1493 | | - bgmac_chip_intrs_off(bgmac); |
---|
| 1493 | + bgmac->in_init = true; |
---|
1494 | 1494 | |
---|
1495 | 1495 | net_dev->irq = bgmac->irq; |
---|
1496 | 1496 | SET_NETDEV_DEV(net_dev, bgmac->dev); |
---|
.. | .. |
---|
1508 | 1508 | * Broadcom does it in arch PCI code when enabling fake PCI device. |
---|
1509 | 1509 | */ |
---|
1510 | 1510 | bgmac_clk_enable(bgmac, 0); |
---|
| 1511 | + |
---|
| 1512 | + bgmac_chip_intrs_off(bgmac); |
---|
1511 | 1513 | |
---|
1512 | 1514 | /* This seems to be fixing IRQ by assigning OOB #6 to the core */ |
---|
1513 | 1515 | if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) { |
---|
.. | .. |
---|
1542 | 1544 | /* Omit FCS from max MTU size */ |
---|
1543 | 1545 | net_dev->max_mtu = BGMAC_RX_MAX_FRAME_SIZE - ETH_FCS_LEN; |
---|
1544 | 1546 | |
---|
| 1547 | + bgmac->in_init = false; |
---|
| 1548 | + |
---|
1545 | 1549 | err = register_netdev(bgmac->net_dev); |
---|
1546 | 1550 | if (err) { |
---|
1547 | 1551 | dev_err(bgmac->dev, "Cannot register net device\n"); |
---|