From patchwork Wed Jun 7 13:51:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Lamparter X-Patchwork-Id: 772435 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 3wjVMb27nqz9sDb for ; Wed, 7 Jun 2017 23:51:23 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlemail.com header.i=@googlemail.com header.b="X5xBBXiU"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751680AbdFGNvW (ORCPT ); Wed, 7 Jun 2017 09:51:22 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:36798 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751576AbdFGNvT (ORCPT ); Wed, 7 Jun 2017 09:51:19 -0400 Received: by mail-wr0-f193.google.com with SMTP id e23so1283591wre.3 for ; Wed, 07 Jun 2017 06:51:19 -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=MUbSUgKONh2M71D6hTXXVVC3uR6nudJ0UV6LdYMoSr8=; b=X5xBBXiUBMpNy8PzqCZLuN4xHo59FvCtNIBdCl9nqmQ7vDtxphC/c5fyZXgEpL+V7R k/cojffNVDttEb8w18sbo+hN1RrTMymR9Pdrp1rOoI2VWP31nFSl7O1qESkVXwQMkLEz TgXsSd6ymvCXoHOiZfHkr4gU3QoqYjyCaCQk0CWcifX0po/f7oF23gp68NrXs7cr/Fph SlueMtHJ06e9a5BzdEFGve3WWbx+K/adw1tsbeLPPWTIz74fYk/wWgqcZxt/Lkl8jPoJ pMPd9vnbhyzg7ZkFdMjkz9rDFI+fQL4+Tf7twsJIlNC+NVyRvTQDhEZA5o2H5UPMumom RQkw== 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=MUbSUgKONh2M71D6hTXXVVC3uR6nudJ0UV6LdYMoSr8=; b=BL1GwZ7CArCKbMA0vZHu8zXn3daqJueLQYSJaGtjCwGs0Ca6TCVrwHrqqZciJbNTVN sTQ+EtSNxNumaGyc7qDhIwk8kbDPIwNors7hLsg1WKrWTIDTJv/m0qy97uaA6LPzWslW eWkpNQkvNMddOvlcmEe6xKFmroJ+el4dwmFmxwd/0vMMgOZLvVKC8tTO8+NXWqf2hpTN GoG22f3zz+jEXfejCXMj+k5C3vI+uCdSwUt/tSwqdOhkno2L7eBjFuELg79g0JlZu1ql 9mSkv1guV2yy74kXKaaz8vdMlsZNJhGkn2TqBNScOVZtSWLFz4EDYQXX4pwW/BNGJUEv T9jA== X-Gm-Message-State: AODbwcCM9i+PbspdX46uHihK3H/m3aeVDZYG+Lrk7OG4B6a4/O6gqlsp tF/5eSVLZmoi6fcz X-Received: by 10.223.171.83 with SMTP id r19mr21401289wrc.7.1496843478038; Wed, 07 Jun 2017 06:51:18 -0700 (PDT) Received: from debian64.daheim (p200300D5FBC1BBFCD63D7EFFFEBDE96E.dip0.t-ipconnect.de. [2003:d5:fbc1:bbfc:d63d:7eff:febd:e96e]) by smtp.gmail.com with ESMTPSA id 9sm2394106wmh.17.2017.06.07.06.51.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 07 Jun 2017 06:51:17 -0700 (PDT) Received: from chuck by debian64.daheim with local (Exim 4.89) (envelope-from ) id 1dIbMi-0000Vg-Aw; Wed, 07 Jun 2017 15:51:16 +0200 From: Christian Lamparter To: netdev@vger.kernel.org Cc: "David S . Miller" , Ivan Mikhaylov , Andrew Lunn Subject: [PATCH v2 2/2] net: emac: fix and unify emac_mdio functions Date: Wed, 7 Jun 2017 15:51:16 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: 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 Reviewed-by: Andrew Lunn --- 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 b6e871bfb659..259e69a52ec5 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); }