From patchwork Wed Nov 16 14:41:47 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Crispin X-Patchwork-Id: 125990 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B9C9DB70C1 for ; Thu, 17 Nov 2011 00:42:30 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757515Ab1KPNmW (ORCPT ); Wed, 16 Nov 2011 08:42:22 -0500 Received: from nbd.name ([46.4.11.11]:38277 "EHLO nbd.name" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757115Ab1KPNmV (ORCPT ); Wed, 16 Nov 2011 08:42:21 -0500 From: John Crispin To: netdev@vger.kernel.org Cc: John Crispin Subject: [PATCH 2/3] NET: MIPS: lantiq: non existing phy was not handled gracefully Date: Wed, 16 Nov 2011 15:41:47 +0100 Message-Id: <1321454508-4754-2-git-send-email-blogic@openwrt.org> X-Mailer: git-send-email 1.7.7.1 In-Reply-To: <1321454508-4754-1-git-send-email-blogic@openwrt.org> References: <1321454508-4754-1-git-send-email-blogic@openwrt.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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(-) diff --git a/drivers/net/ethernet/lantiq_etop.c b/drivers/net/ethernet/lantiq_etop.c index d3d4931..9fd6779 100644 --- a/drivers/net/ethernet/lantiq_etop.c +++ b/drivers/net/ethernet/lantiq_etop.c @@ -612,7 +612,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; } @@ -624,7 +625,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]; @@ -770,9 +772,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: @@ -868,7 +871,6 @@ ltq_etop_probe(struct platform_device *pdev) 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->pldata = dev_get_platdata(&pdev->dev);