Received: by 2002:a05:6a10:a852:0:0:0:0 with SMTP id d18csp297123pxy; Wed, 5 May 2021 02:24:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxMc7EnGgmgaDqyiC2gCfLn4z/ksqFh2fI28Eatd047eNCnijDKvTcIchMP/rXP+5wUSuqB X-Received: by 2002:aa7:d950:: with SMTP id l16mr31151193eds.374.1620206697090; Wed, 05 May 2021 02:24:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620206697; cv=none; d=google.com; s=arc-20160816; b=m4i9o8+RWQOjYa+lcgAg0/btATOzG8/9tcEmvvtMmT8RN2PsNo3R0Z3dTvMOO6tFD8 ICrQluiDWEXfkhcITBGH577zmbWSu6meoOdoeWSS78evTntQ45EBal+yqBoVha9tcfv3 W3ef2QEiO2Q5OBGbB0QNrqtEYVYlszk6esfBo3STbfNcFT62yXkteDasAQN8tZmvQBn7 8sT/7BNmide56GI/NtuAUKbdOihUwAFMyJ+8RUFtuFOjuA9J1CNR1GfGWBdiXV22ePSs ISrz0ZvyVMgZCznX1egJKaQfk9gs6LGCfPgQ0zxJ7edz+VUShw4cOCxkTDl9/lI0z8MB KspA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=bkt81mYA9YTEQWWphpqEBCbghIaEDGdI87ipLmDWGYE=; b=Ph/DItR/UMIWGs5I9gUpzsECcvzA0Aw8gwKbVtkY/sVw5Tr5dwf0B9rDotjK+dL9/b FgwgXDqyEqOwTTWUTRSwMBPJI+9DmlwndH7XefjARLXPLWmx1bX+BiwkmSaAzKolp5DX SYHbEr2YW5d/AofE/cNv4Radt+2KueYA4AT8olMlMQhPuYzzmr9HeOiJBZyYsOTa0Hpb 8bHniFR6M6HeShg373sLvMG4qzE7yTt+PLazJsSQv6OR5B3OCQ6zQmwi/UISbyfUhmXI 8sT/iKchF6UnVPbWA8XuNMLVhE6Q5g/i2L8TnXsrYFqvMcBJLNj90Oys5wjD1Q6v8rIH QhwQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r19si4837510ejz.474.2021.05.05.02.24.34; Wed, 05 May 2021 02:24:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232591AbhEEJXi (ORCPT + 99 others); Wed, 5 May 2021 05:23:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232735AbhEEJW6 (ORCPT ); Wed, 5 May 2021 05:22:58 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DAAC9C06137B for ; Wed, 5 May 2021 02:20:40 -0700 (PDT) Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1leDhn-0005Xk-1s; Wed, 05 May 2021 11:20:31 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1leDhk-0002kU-2j; Wed, 05 May 2021 11:20:28 +0200 From: Oleksij Rempel To: Woojung Huh , UNGLinuxDriver@microchip.com, Andrew Lunn , Florian Fainelli , Vivien Didelot , Vladimir Oltean , "David S. Miller" , Jakub Kicinski Cc: Michael Grzeschik , kernel@pengutronix.de, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Russell King Subject: [RFC PATCH v1 9/9] net: phy: micrel: add patch for erratas on port1 Date: Wed, 5 May 2021 11:20:25 +0200 Message-Id: <20210505092025.8785-10-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210505092025.8785-1-o.rempel@pengutronix.de> References: <20210505092025.8785-1-o.rempel@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michael Grzeschik The micrel switch ksz8873 has the following errata [1]: * Module 1: LinkMD does not work on Port 1 * Module 4: Port 1 does not respond to received flow control PAUSE frames This patch disables the support on the defective port. [1] http://ww1.microchip.com/downloads/en/DeviceDoc/KSZ8873-Errata-DS80000830A.pdf Signed-off-by: Michael Grzeschik --- drivers/net/dsa/microchip/ksz8795.c | 13 +++++++++++++ drivers/net/phy/micrel.c | 3 +++ drivers/net/phy/phylink.c | 2 +- include/linux/micrel_phy.h | 1 + net/dsa/slave.c | 4 ++++ 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c index fb47be0c2154..42b7ef36f24f 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -966,6 +966,18 @@ static enum dsa_tag_protocol ksz8_get_tag_protocol(struct dsa_switch *ds, DSA_TAG_PROTO_KSZ9893 : DSA_TAG_PROTO_KSZ8795; } +static u32 ksz8_sw_get_phy_flags(struct dsa_switch *ds, int port) +{ + /* Silicon Errata Sheet (DS80000830A): + * Port 1 does not work with LinkMD Cable-Testing. + * Port 1 does not respond to received PAUSE control frames. + */ + if (!port) + return MICREL_KSZ8_P1_ERRATA; + + return 0; +} + static void ksz8_get_strings(struct dsa_switch *ds, int port, u32 stringset, uint8_t *buf) { @@ -1516,6 +1528,7 @@ static void ksz_validate(struct dsa_switch *ds, int port, static const struct dsa_switch_ops ksz8_switch_ops = { .get_tag_protocol = ksz8_get_tag_protocol, + .get_phy_flags = ksz8_sw_get_phy_flags, .setup = ksz8_setup, .phy_read = ksz_phy_read16, .phy_write = ksz_phy_write16, diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index f0ca7b53bcf9..dbdc0926386e 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -1414,6 +1414,9 @@ static int kszphy_probe(struct phy_device *phydev) static int ksz886x_cable_test_start(struct phy_device *phydev) { + if (phydev->dev_flags & MICREL_KSZ8_P1_ERRATA) + return -ENOTSUPP; + /* If autoneg is enabled, we won't be able to test cross pair * short. In this case, the PHY will "detect" a link and * confuse the internal state machine - disable auto neg here. diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 96d8e88b4e46..167c2277814f 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -1029,7 +1029,7 @@ static int phylink_attach_phy(struct phylink *pl, struct phy_device *phy, if (pl->phydev) return -EBUSY; - return phy_attach_direct(pl->netdev, phy, 0, interface); + return phy_attach_direct(pl->netdev, phy, phy->dev_flags, interface); } /** diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h index ee23acc4d551..0117a2c126eb 100644 --- a/include/linux/micrel_phy.h +++ b/include/linux/micrel_phy.h @@ -39,6 +39,7 @@ /* struct phy_device dev_flags definitions */ #define MICREL_PHY_50MHZ_CLK 0x00000001 #define MICREL_PHY_FXEN 0x00000002 +#define MICREL_KSZ8_P1_ERRATA 0x00000003 #define MICREL_KSZ9021_EXTREG_CTRL 0xB #define MICREL_KSZ9021_EXTREG_DATA_WRITE 0xC diff --git a/net/dsa/slave.c b/net/dsa/slave.c index 8c0f3c6ab365..7e208f16f006 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -1758,6 +1758,10 @@ static int dsa_slave_phy_connect(struct net_device *slave_dev, int addr) return -ENODEV; } + if (ds->ops->get_phy_flags) + slave_dev->phydev->dev_flags |= + ds->ops->get_phy_flags(ds, dp->index); + return phylink_connect_phy(dp->pl, slave_dev->phydev); } -- 2.29.2