| .. | .. |
|---|
| 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"); |
|---|