From d6a9d52bfcc2d8f163e95920cf3678847bb97f18 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 15 Nov 2011 14:52:21 +0100 Subject: [PATCH 16/70] NET: MIPS: lantiq: non existing phy was not handled gracefully The code blindly assumed that that a PHY device was present causing a BadVA. In addition the driver should not fail to load incase no PHY was found. Instead we print the following line and continue with no attached PHY. etop: mdio probe failed Signed-off-by: John Crispin Cc: netdev@vger.kernel.org --- drivers/net/ethernet/lantiq_etop.c | 14 ++++++++------ 1 files changed, 8 insertions(+), 6 deletions(-) --- a/drivers/net/ethernet/lantiq_etop.c +++ b/drivers/net/ethernet/lantiq_etop.c @@ -614,7 +614,8 @@ ltq_etop_open(struct net_device *dev) ltq_dma_open(&ch->dma); napi_enable(&ch->napi); } - phy_start(priv->phydev); + if (priv->phydev) + phy_start(priv->phydev); netif_tx_start_all_queues(dev); return 0; } @@ -626,7 +627,8 @@ ltq_etop_stop(struct net_device *dev) int i; netif_tx_stop_all_queues(dev); - phy_stop(priv->phydev); + if (priv->phydev) + phy_stop(priv->phydev); for (i = 0; i < MAX_DMA_CHAN; i++) { struct ltq_etop_chan *ch = &priv->ch[i]; @@ -772,9 +774,10 @@ ltq_etop_init(struct net_device *dev) if (err) goto err_netdev; ltq_etop_set_multicast_list(dev); - err = ltq_etop_mdio_init(dev); - if (err) - goto err_netdev; + if (!ltq_etop_mdio_init(dev)) + dev->ethtool_ops = <q_etop_ethtool_ops; + else + pr_warn("etop: mdio probe failed\n");; return 0; err_netdev: @@ -870,7 +873,6 @@ ltq_etop_probe(struct platform_device *p dev = alloc_etherdev_mq(sizeof(struct ltq_etop_priv), 4); strcpy(dev->name, "eth%d"); dev->netdev_ops = <q_eth_netdev_ops; - dev->ethtool_ops = <q_etop_ethtool_ops; priv = netdev_priv(dev); priv->res = res; priv->pdev = pdev;