diff options
-rw-r--r-- | drivers/net/ethernet/arc/emac_main.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c index 9f45782819ec..9747ddaf6ad2 100644 --- a/drivers/net/ethernet/arc/emac_main.c +++ b/drivers/net/ethernet/arc/emac_main.c | |||
@@ -683,7 +683,7 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
683 | priv->regs = devm_ioremap_resource(&pdev->dev, &res_regs); | 683 | priv->regs = devm_ioremap_resource(&pdev->dev, &res_regs); |
684 | if (IS_ERR(priv->regs)) { | 684 | if (IS_ERR(priv->regs)) { |
685 | err = PTR_ERR(priv->regs); | 685 | err = PTR_ERR(priv->regs); |
686 | goto out; | 686 | goto out_netdev; |
687 | } | 687 | } |
688 | dev_dbg(&pdev->dev, "Registers base address is 0x%p\n", priv->regs); | 688 | dev_dbg(&pdev->dev, "Registers base address is 0x%p\n", priv->regs); |
689 | 689 | ||
@@ -693,7 +693,7 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
693 | if (!(id == 0x0005fd02 || id == 0x0007fd02)) { | 693 | if (!(id == 0x0005fd02 || id == 0x0007fd02)) { |
694 | dev_err(&pdev->dev, "ARC EMAC not detected, id=0x%x\n", id); | 694 | dev_err(&pdev->dev, "ARC EMAC not detected, id=0x%x\n", id); |
695 | err = -ENODEV; | 695 | err = -ENODEV; |
696 | goto out; | 696 | goto out_netdev; |
697 | } | 697 | } |
698 | dev_info(&pdev->dev, "ARC EMAC detected with id: 0x%x\n", id); | 698 | dev_info(&pdev->dev, "ARC EMAC detected with id: 0x%x\n", id); |
699 | 699 | ||
@@ -708,7 +708,7 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
708 | ndev->name, ndev); | 708 | ndev->name, ndev); |
709 | if (err) { | 709 | if (err) { |
710 | dev_err(&pdev->dev, "could not allocate IRQ\n"); | 710 | dev_err(&pdev->dev, "could not allocate IRQ\n"); |
711 | goto out; | 711 | goto out_netdev; |
712 | } | 712 | } |
713 | 713 | ||
714 | /* Get MAC address from device tree */ | 714 | /* Get MAC address from device tree */ |
@@ -729,7 +729,7 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
729 | if (!priv->rxbd) { | 729 | if (!priv->rxbd) { |
730 | dev_err(&pdev->dev, "failed to allocate data buffers\n"); | 730 | dev_err(&pdev->dev, "failed to allocate data buffers\n"); |
731 | err = -ENOMEM; | 731 | err = -ENOMEM; |
732 | goto out; | 732 | goto out_netdev; |
733 | } | 733 | } |
734 | 734 | ||
735 | priv->txbd = priv->rxbd + RX_BD_NUM; | 735 | priv->txbd = priv->rxbd + RX_BD_NUM; |
@@ -741,7 +741,7 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
741 | err = arc_mdio_probe(pdev, priv); | 741 | err = arc_mdio_probe(pdev, priv); |
742 | if (err) { | 742 | if (err) { |
743 | dev_err(&pdev->dev, "failed to probe MII bus\n"); | 743 | dev_err(&pdev->dev, "failed to probe MII bus\n"); |
744 | goto out; | 744 | goto out_netdev; |
745 | } | 745 | } |
746 | 746 | ||
747 | priv->phy_dev = of_phy_connect(ndev, phy_node, arc_emac_adjust_link, 0, | 747 | priv->phy_dev = of_phy_connect(ndev, phy_node, arc_emac_adjust_link, 0, |
@@ -749,7 +749,7 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
749 | if (!priv->phy_dev) { | 749 | if (!priv->phy_dev) { |
750 | dev_err(&pdev->dev, "of_phy_connect() failed\n"); | 750 | dev_err(&pdev->dev, "of_phy_connect() failed\n"); |
751 | err = -ENODEV; | 751 | err = -ENODEV; |
752 | goto out; | 752 | goto out_mdio; |
753 | } | 753 | } |
754 | 754 | ||
755 | dev_info(&pdev->dev, "connected to %s phy with id 0x%x\n", | 755 | dev_info(&pdev->dev, "connected to %s phy with id 0x%x\n", |
@@ -759,14 +759,19 @@ static int arc_emac_probe(struct platform_device *pdev) | |||
759 | 759 | ||
760 | err = register_netdev(ndev); | 760 | err = register_netdev(ndev); |
761 | if (err) { | 761 | if (err) { |
762 | netif_napi_del(&priv->napi); | ||
763 | dev_err(&pdev->dev, "failed to register network device\n"); | 762 | dev_err(&pdev->dev, "failed to register network device\n"); |
764 | goto out; | 763 | goto out_netif_api; |
765 | } | 764 | } |
766 | 765 | ||
767 | return 0; | 766 | return 0; |
768 | 767 | ||
769 | out: | 768 | out_netif_api: |
769 | netif_napi_del(&priv->napi); | ||
770 | phy_disconnect(priv->phy_dev); | ||
771 | priv->phy_dev = NULL; | ||
772 | out_mdio: | ||
773 | arc_mdio_remove(priv); | ||
774 | out_netdev: | ||
770 | free_netdev(ndev); | 775 | free_netdev(ndev); |
771 | return err; | 776 | return err; |
772 | } | 777 | } |