From patchwork Wed Dec 13 17:37:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Stach X-Patchwork-Id: 848066 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yxkRp4Vmhz9s83 for ; Thu, 14 Dec 2017 04:37:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753699AbdLMRh4 (ORCPT ); Wed, 13 Dec 2017 12:37:56 -0500 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:43011 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753311AbdLMRhx (ORCPT ); Wed, 13 Dec 2017 12:37:53 -0500 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7] helo=dude.pengutronix.de.) by metis.ext.pengutronix.de with esmtp (Exim 4.84_2) (envelope-from ) id 1ePAyd-0004wv-Sz; Wed, 13 Dec 2017 18:37:51 +0100 From: Lucas Stach To: Andrew Lunn , Florian Fainelli Cc: netdev@vger.kernel.org, kernel@pengutronix.de, patchwork-lst@pengutronix.de Subject: [PATCH 1/3] net: phy: add support to detect 100BASE-T1 capability Date: Wed, 13 Dec 2017 18:37:49 +0100 Message-Id: <20171213173751.12722-1-l.stach@pengutronix.de> X-Mailer: git-send-email 2.11.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: netdev@vger.kernel.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 100BASE-T1 is the automotive ethernet standard 802.3bw-2015. Currently we don't detect any valid modes for PHYs, which only support this standard. Add support to detect the common 100Mbit full-duplex mode. Signed-off-by: Lucas Stach --- drivers/net/phy/phy_device.c | 2 ++ include/uapi/linux/mii.h | 1 + 2 files changed, 3 insertions(+) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 67f25ac29025..8ef48b38d97b 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1607,6 +1607,8 @@ int genphy_config_init(struct phy_device *phydev) if (val < 0) return val; + if (val & ESTATUS_100T1_FULL) + features |= SUPPORTED_100baseT_Full; if (val & ESTATUS_1000_TFULL) features |= SUPPORTED_1000baseT_Full; if (val & ESTATUS_1000_THALF) diff --git a/include/uapi/linux/mii.h b/include/uapi/linux/mii.h index b5c2fdcf23fd..eb5cc45d23fb 100644 --- a/include/uapi/linux/mii.h +++ b/include/uapi/linux/mii.h @@ -121,6 +121,7 @@ #define EXPANSION_MFAULTS 0x0010 /* Multiple faults detected */ #define EXPANSION_RESV 0xffe0 /* Unused... */ +#define ESTATUS_100T1_FULL 0x0080 /* Can do 100BASE-T1 Full */ #define ESTATUS_1000_TFULL 0x2000 /* Can do 1000BT Full */ #define ESTATUS_1000_THALF 0x1000 /* Can do 1000BT Half */ From patchwork Wed Dec 13 17:37:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Stach X-Patchwork-Id: 848067 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yxkRs5lb8z9ryr for ; Thu, 14 Dec 2017 04:38:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753714AbdLMRh7 (ORCPT ); Wed, 13 Dec 2017 12:37:59 -0500 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:40867 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753356AbdLMRhx (ORCPT ); Wed, 13 Dec 2017 12:37:53 -0500 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7] helo=dude.pengutronix.de.) by metis.ext.pengutronix.de with esmtp (Exim 4.84_2) (envelope-from ) id 1ePAyd-0004wv-Uy; Wed, 13 Dec 2017 18:37:51 +0100 From: Lucas Stach To: Andrew Lunn , Florian Fainelli Cc: netdev@vger.kernel.org, kernel@pengutronix.de, patchwork-lst@pengutronix.de Subject: [PATCH 2/3] net: phy: select sensible mode for non-autoneg PHYs on startup Date: Wed, 13 Dec 2017 18:37:50 +0100 Message-Id: <20171213173751.12722-2-l.stach@pengutronix.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171213173751.12722-1-l.stach@pengutronix.de> References: <20171213173751.12722-1-l.stach@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: netdev@vger.kernel.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Init speed and duplex to unknown, so phy_lookup_setting() knows that it should select the mode only based on the PHY allowed link modes. Signed-off-by: Lucas Stach --- drivers/net/phy/phy-core.c | 5 +++++ drivers/net/phy/phy_device.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c index 21f75ae244b3..149a4bab1e6f 100644 --- a/drivers/net/phy/phy-core.c +++ b/drivers/net/phy/phy-core.c @@ -149,6 +149,11 @@ phy_lookup_setting(int speed, int duplex, const unsigned long *mask, const struct phy_setting *p, *match = NULL, *last = NULL; int i; + if (!exact && speed == SPEED_UNKNOWN) + speed = INT_MAX; + if (!exact && duplex == DUPLEX_UNKNOWN) + duplex = DUPLEX_FULL; + for (i = 0, p = settings; i < ARRAY_SIZE(settings); i++, p++) { if (p->bit < maxbit && test_bit(p->bit, mask)) { last = p; diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 8ef48b38d97b..35278282259a 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1785,6 +1785,8 @@ static int phy_probe(struct device *dev) phydev->supported = phydrv->features; of_set_phy_supported(phydev); phydev->advertising = phydev->supported; + phydev->speed = SPEED_UNKNOWN; + phydev->duplex = DUPLEX_UNKNOWN; /* Get the EEE modes we want to prohibit. We will ask * the PHY stop advertising these mode later on From patchwork Wed Dec 13 17:37:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Stach X-Patchwork-Id: 848065 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yxkRn2Tmhz9ryr for ; Thu, 14 Dec 2017 04:37:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753448AbdLMRhz (ORCPT ); Wed, 13 Dec 2017 12:37:55 -0500 Received: from metis.ext.4.pengutronix.de ([92.198.50.35]:52161 "EHLO metis.ext.4.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753332AbdLMRhx (ORCPT ); Wed, 13 Dec 2017 12:37:53 -0500 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7] helo=dude.pengutronix.de.) by metis.ext.pengutronix.de with esmtp (Exim 4.84_2) (envelope-from ) id 1ePAyd-0004wv-VZ; Wed, 13 Dec 2017 18:37:52 +0100 From: Lucas Stach To: Andrew Lunn , Florian Fainelli Cc: netdev@vger.kernel.org, kernel@pengutronix.de, patchwork-lst@pengutronix.de Subject: [PATCH 3/3] net: phy: sanitize autoneg in phy_start_aneg_priv Date: Wed, 13 Dec 2017 18:37:51 +0100 Message-Id: <20171213173751.12722-3-l.stach@pengutronix.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171213173751.12722-1-l.stach@pengutronix.de> References: <20171213173751.12722-1-l.stach@pengutronix.de> X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: netdev@vger.kernel.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org phy_sanitize_settings() is only called when autonegotiation has been explicitly disabled. This breaks PHYs without any autonegotiation capability, as the check for the capability happens inside this function. Move the check out to the caller, so it is properly applied for those PHYs. Signed-off-by: Lucas Stach --- drivers/net/phy/phy.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 2b1e67bc1e73..433d859b6955 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -226,10 +226,6 @@ static void phy_sanitize_settings(struct phy_device *phydev) const struct phy_setting *setting; u32 features = phydev->supported; - /* Sanitize settings based on PHY capabilities */ - if ((features & SUPPORTED_Autoneg) == 0) - phydev->autoneg = AUTONEG_DISABLE; - setting = phy_find_valid(phydev->speed, phydev->duplex, features); if (setting) { phydev->speed = setting->speed; @@ -487,6 +483,10 @@ static int phy_start_aneg_priv(struct phy_device *phydev, bool sync) mutex_lock(&phydev->lock); + /* Sanitize settings based on PHY capabilities */ + if ((phydev->supported & SUPPORTED_Autoneg) == 0) + phydev->autoneg = AUTONEG_DISABLE; + if (AUTONEG_DISABLE == phydev->autoneg) phy_sanitize_settings(phydev);