2012-04-16 20:31:48 +08:00
|
|
|
From d6a9d52bfcc2d8f163e95920cf3678847bb97f18 Mon Sep 17 00:00:00 2001
|
|
|
|
From: John Crispin <blogic@openwrt.org>
|
|
|
|
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 <blogic@openwrt.org>
|
|
|
|
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:
|
2012-04-17 20:51:02 +08:00
|
|
|
@@ -870,7 +873,6 @@ ltq_etop_probe(struct platform_device *p
|
2012-04-16 20:31:48 +08:00
|
|
|
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;
|