From patchwork Mon Jun 5 20:49:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Lamparter X-Patchwork-Id: 771467 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 3whRlR4RGkz9s5L for ; Tue, 6 Jun 2017 06:49:55 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlemail.com header.i=@googlemail.com header.b="qqivPvrT"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751237AbdFEUto (ORCPT ); Mon, 5 Jun 2017 16:49:44 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:36567 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751180AbdFEUtn (ORCPT ); Mon, 5 Jun 2017 16:49:43 -0400 Received: by mail-wm0-f65.google.com with SMTP id k15so31785178wmh.3 for ; Mon, 05 Jun 2017 13:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=8V49bToytqYpb6VXBQnVgMJZVYXZsMqDb7AqJdCpTDw=; b=qqivPvrTw4ayJhvA4cXv6yx+1a8Lqhr08lScKP8yipQOgRqnxpii6uICDc0YLoVgq2 3wIOYFF47LCnSlQhWHoNH7iHdYRJhMeILwKAWDVDorXYSighcg2fQT/x8V1Tog65jMqu wvT1ckkRnfGF/qe/ichbIcRRllnoI9IkxaEvKY67gAWhcFaaXXdYOJVb0BCvBmwWhAIb kCm4F2inYCWRxn7jJl3MNlFrY9VHla3aQDgxCKcr4avyd3jklLkgB7SZAq0tsaPBCrq2 VB5Rkx22icRSpxWPSMO5BEFuLhLCvmbZXfVU3RYDNxEjZX1n3h98RnbHhav9eprJkyi2 kmnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=8V49bToytqYpb6VXBQnVgMJZVYXZsMqDb7AqJdCpTDw=; b=SbLw22G6g1IlMi+E2dO674cwF05fRiRk01ptqJ+QPY4IofR5JuRfzjlavt7i6trFSG RnM2kjc9Ih2w8C0ZqFxV4mv5Um6pDg9aG+QlKerF8ajQHcQUzUMgNjlyfrl0ymokC60e qE8qo+BiL08F+e1ROqxyrUmTsL3QNINXyvjC2JY1qPTHpTNUTCjDaqBzC5j2LrKnFRhi 7FcLB11T0pgyyQ9kj0W3sGf52l2uUpLCMxxiAeOyHmCEALFZ7bI2kQhgGQ3apuW8Ps2i emw4qvHkxuefL0egBaXWQ6+9K6CNFgz85+GQvVGu4U/pXJNruAPR11gq6twP/NAG3TbP MlWg== X-Gm-Message-State: AODbwcCsKs5RwThQ0OmIBIj5LARO+5GHETuaIzgXM7g+55iUmBUmJQkz mb6jNRq0CrPdqifW X-Received: by 10.28.107.87 with SMTP id g84mr1252069wmc.63.1496695781801; Mon, 05 Jun 2017 13:49:41 -0700 (PDT) Received: from debian64.daheim (p200300D5FBC16BFCD63D7EFFFEBDE96E.dip0.t-ipconnect.de. [2003:d5:fbc1:6bfc:d63d:7eff:febd:e96e]) by smtp.gmail.com with ESMTPSA id v22sm14441494wrd.38.2017.06.05.13.49.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 05 Jun 2017 13:49:41 -0700 (PDT) Received: from chuck by debian64.daheim with local (Exim 4.89) (envelope-from ) id 1dHywW-00047w-CW; Mon, 05 Jun 2017 22:49:40 +0200 From: Christian Lamparter To: netdev@vger.kernel.org Cc: "David S . Miller" , Ivan Mikhaylov Subject: [PATCH v1 2/2] net: emac: fix and unify emac_mdio functions Date: Mon, 5 Jun 2017 22:49:40 +0200 Message-Id: <18472d9a6bde3edaab7dcda301ccaebd437ea0dc.1496695540.git.chunkeey@googlemail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <635dd014238af6f48c4169439b7ac161e80de1b7.1496695540.git.chunkeey@googlemail.com> References: <635dd014238af6f48c4169439b7ac161e80de1b7.1496695540.git.chunkeey@googlemail.com> In-Reply-To: <635dd014238af6f48c4169439b7ac161e80de1b7.1496695540.git.chunkeey@googlemail.com> References: <635dd014238af6f48c4169439b7ac161e80de1b7.1496695540.git.chunkeey@googlemail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org emac_mdio_read_link() was not copying the requested phy settings back into the emac driver's own phy api. This has caused a link speed mismatch issue for the AR8035 as the emac driver kept trying to connect with 10/100MBps on a 1GBit/s link. This patch also unifies shared code between emac_setup_aneg() and emac_mdio_setup_forced(). And furthermore it removes a chunk of emac_mdio_init_phy(), that was copying the same data into itself. Signed-off-by: Christian Lamparter --- drivers/net/ethernet/ibm/emac/core.c | 41 ++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c index 18af1116fa1d..8cfb148cfdb0 100644 --- a/drivers/net/ethernet/ibm/emac/core.c +++ b/drivers/net/ethernet/ibm/emac/core.c @@ -2478,20 +2478,24 @@ static int emac_mii_bus_reset(struct mii_bus *bus) return emac_reset(dev); } +static int emac_mdio_phy_start_aneg(struct mii_phy *phy, + struct phy_device *phy_dev) +{ + phy_dev->autoneg = phy->autoneg; + phy_dev->speed = phy->speed; + phy_dev->duplex = phy->duplex; + phy_dev->advertising = phy->advertising; + return phy_start_aneg(phy_dev); +} + static int emac_mdio_setup_aneg(struct mii_phy *phy, u32 advertise) { struct net_device *ndev = phy->dev; struct emac_instance *dev = netdev_priv(ndev); - dev->phy.autoneg = AUTONEG_ENABLE; - dev->phy.speed = SPEED_1000; - dev->phy.duplex = DUPLEX_FULL; - dev->phy.advertising = advertise; phy->autoneg = AUTONEG_ENABLE; - phy->speed = dev->phy.speed; - phy->duplex = dev->phy.duplex; phy->advertising = advertise; - return phy_start_aneg(dev->phy_dev); + return emac_mdio_phy_start_aneg(phy, dev->phy_dev); } static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd) @@ -2499,13 +2503,10 @@ static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd) struct net_device *ndev = phy->dev; struct emac_instance *dev = netdev_priv(ndev); - dev->phy.autoneg = AUTONEG_DISABLE; - dev->phy.speed = speed; - dev->phy.duplex = fd; phy->autoneg = AUTONEG_DISABLE; phy->speed = speed; phy->duplex = fd; - return phy_start_aneg(dev->phy_dev); + return emac_mdio_phy_start_aneg(phy, dev->phy_dev); } static int emac_mdio_poll_link(struct mii_phy *phy) @@ -2527,16 +2528,17 @@ static int emac_mdio_read_link(struct mii_phy *phy) { struct net_device *ndev = phy->dev; struct emac_instance *dev = netdev_priv(ndev); + struct phy_device *phy_dev = dev->phy_dev; int res; - res = phy_read_status(dev->phy_dev); + res = phy_read_status(phy_dev); if (res) return res; - dev->phy.speed = phy->speed; - dev->phy.duplex = phy->duplex; - dev->phy.pause = phy->pause; - dev->phy.asym_pause = phy->asym_pause; + phy->speed = phy_dev->speed; + phy->duplex = phy_dev->duplex; + phy->pause = phy_dev->pause; + phy->asym_pause = phy_dev->asym_pause; return 0; } @@ -2546,13 +2548,6 @@ static int emac_mdio_init_phy(struct mii_phy *phy) struct emac_instance *dev = netdev_priv(ndev); phy_start(dev->phy_dev); - dev->phy.autoneg = phy->autoneg; - dev->phy.speed = phy->speed; - dev->phy.duplex = phy->duplex; - dev->phy.advertising = phy->advertising; - dev->phy.pause = phy->pause; - dev->phy.asym_pause = phy->asym_pause; - return phy_init_hw(dev->phy_dev); }