From patchwork Fri Dec 14 14:17:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Tjernlund X-Patchwork-Id: 1013546 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=infinera.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43GXgJ13Vrz9s3q for ; Sat, 15 Dec 2018 01:17:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730007AbeLNORO (ORCPT ); Fri, 14 Dec 2018 09:17:14 -0500 Received: from smtp.transmode.se ([31.15.61.139]:62293 "EHLO smtp.transmode.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726554AbeLNORO (ORCPT ); Fri, 14 Dec 2018 09:17:14 -0500 Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [10.210.73.31]) by smtp.transmode.se (Postfix) with ESMTP id 1E92A118710F; Fri, 14 Dec 2018 15:17:11 +0100 (CET) Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [127.0.0.1]) by gentoo-jocke.infinera.com (8.14.9/8.14.9) with ESMTP id wBEEHBGW021494; Fri, 14 Dec 2018 15:17:11 +0100 Received: (from jocke@localhost) by gentoo-jocke.infinera.com (8.14.9/8.14.9/Submit) id wBEEHA9i021493; Fri, 14 Dec 2018 15:17:10 +0100 From: Joakim Tjernlund To: netdev@vger.kernel.org, Florian Fainelli , Andrew Lunn , claudiu.manoil@nxp.com, madalin.bucur@nxp.com, leoyang.li@nxp.com Cc: Joakim Tjernlund Subject: [PATCH v4 1/4] Fixed PHY: Add fixed_phy_change_carrier() Date: Fri, 14 Dec 2018 15:17:05 +0100 Message-Id: <20181214141708.21439-1-joakim.tjernlund@infinera.com> X-Mailer: git-send-email 2.18.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Drivers can use this as .ndo_change_carrier() to change carrier via /sys/class/net/ethX/carrier. Signed-off-by: Joakim Tjernlund --- v4 - format fixes. v3 - Moved the logic into fixed PHY to minimize eth driver impact v2 - Only allow carrier changes for Fixed PHYs drivers/net/phy/fixed_phy.c | 24 +++++++++++++++++++++++- include/linux/phy_fixed.h | 5 +++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c index 67b260877f30..37f732b5a532 100644 --- a/drivers/net/phy/fixed_phy.c +++ b/drivers/net/phy/fixed_phy.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "swphy.h" @@ -38,6 +39,7 @@ struct fixed_phy { struct phy_device *phydev; seqcount_t seqcount; struct fixed_phy_status status; + bool no_carrier; int (*link_update)(struct net_device *, struct fixed_phy_status *); struct list_head node; int link_gpio; @@ -48,9 +50,28 @@ static struct fixed_mdio_bus platform_fmb = { .phys = LIST_HEAD_INIT(platform_fmb.phys), }; +int fixed_phy_change_carrier(struct net_device *dev, bool new_carrier) +{ + struct fixed_mdio_bus *fmb = &platform_fmb; + struct phy_device *phydev = dev->phydev; + struct fixed_phy *fp; + + if (!phydev || !phydev->mdio.bus) + return -EINVAL; + + list_for_each_entry(fp, &fmb->phys, node) { + if (fp->addr == phydev->mdio.addr) { + fp->no_carrier = !new_carrier; + return 0; + } + } + return -EINVAL; +} +EXPORT_SYMBOL_GPL(fixed_phy_change_carrier); + static void fixed_phy_update(struct fixed_phy *fp) { - if (gpio_is_valid(fp->link_gpio)) + if (!fp->no_carrier && gpio_is_valid(fp->link_gpio)) fp->status.link = !!gpio_get_value_cansleep(fp->link_gpio); } @@ -66,6 +87,7 @@ static int fixed_mdio_read(struct mii_bus *bus, int phy_addr, int reg_num) do { s = read_seqcount_begin(&fp->seqcount); + fp->status.link = !fp->no_carrier; /* Issue callback if user registered it. */ if (fp->link_update) { fp->link_update(fp->phydev->attached_dev, diff --git a/include/linux/phy_fixed.h b/include/linux/phy_fixed.h index ee54453a40a0..9525567b1951 100644 --- a/include/linux/phy_fixed.h +++ b/include/linux/phy_fixed.h @@ -13,6 +13,7 @@ struct fixed_phy_status { struct device_node; #if IS_ENABLED(CONFIG_FIXED_PHY) +extern int fixed_phy_change_carrier(struct net_device *dev, bool new_carrier); extern int fixed_phy_add(unsigned int irq, int phy_id, struct fixed_phy_status *status, int link_gpio); @@ -47,6 +48,10 @@ static inline int fixed_phy_set_link_update(struct phy_device *phydev, { return -ENODEV; } +static inline int fixed_phy_change_carrier(struct net_device *dev, bool new_carrier) +{ + return -EINVAL; +} #endif /* CONFIG_FIXED_PHY */ #endif /* __PHY_FIXED_H */ From patchwork Fri Dec 14 14:17:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Tjernlund X-Patchwork-Id: 1013547 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=infinera.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43GXgV2bzyz9s3q for ; Sat, 15 Dec 2018 01:17:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730053AbeLNORZ (ORCPT ); Fri, 14 Dec 2018 09:17:25 -0500 Received: from smtp.transmode.se ([31.15.61.139]:60816 "EHLO smtp.transmode.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726554AbeLNORY (ORCPT ); Fri, 14 Dec 2018 09:17:24 -0500 Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [10.210.73.31]) by smtp.transmode.se (Postfix) with ESMTP id 1E0D21187126; Fri, 14 Dec 2018 15:17:23 +0100 (CET) Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [127.0.0.1]) by gentoo-jocke.infinera.com (8.14.9/8.14.9) with ESMTP id wBEEHNpW021500; Fri, 14 Dec 2018 15:17:23 +0100 Received: (from jocke@localhost) by gentoo-jocke.infinera.com (8.14.9/8.14.9/Submit) id wBEEHNmr021499; Fri, 14 Dec 2018 15:17:23 +0100 From: Joakim Tjernlund To: netdev@vger.kernel.org, Florian Fainelli , Andrew Lunn , claudiu.manoil@nxp.com, madalin.bucur@nxp.com, leoyang.li@nxp.com Cc: Joakim Tjernlund Subject: [PATCH v4 2/4] dpaa_eth: Add change_carrier() for Fixed PHYs Date: Fri, 14 Dec 2018 15:17:06 +0100 Message-Id: <20181214141708.21439-2-joakim.tjernlund@infinera.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181214141708.21439-1-joakim.tjernlund@infinera.com> References: <20181214141708.21439-1-joakim.tjernlund@infinera.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This allows to control carrier from /sys/class/net/ethX/carrier for Fixed PHYs. Signed-off-by: Joakim Tjernlund --- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index 6e0f47f2c8a3..5ba3c3b040b1 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -51,9 +51,9 @@ #include #include #include +#include #include #include - #include "fman.h" #include "fman_port.h" #include "mac.h" @@ -2613,6 +2613,7 @@ static const struct net_device_ops dpaa_ops = { .ndo_stop = dpaa_eth_stop, .ndo_tx_timeout = dpaa_tx_timeout, .ndo_get_stats64 = dpaa_get_stats64, + .ndo_change_carrier = fixed_phy_change_carrier, .ndo_set_mac_address = dpaa_set_mac_address, .ndo_validate_addr = eth_validate_addr, .ndo_set_rx_mode = dpaa_set_rx_mode, From patchwork Fri Dec 14 14:17:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Tjernlund X-Patchwork-Id: 1013549 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=infinera.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43GXgZ3vkSz9sB5 for ; Sat, 15 Dec 2018 01:17:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730102AbeLNOR1 (ORCPT ); Fri, 14 Dec 2018 09:17:27 -0500 Received: from smtp.transmode.se ([31.15.61.139]:56441 "EHLO smtp.transmode.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729731AbeLNOR0 (ORCPT ); Fri, 14 Dec 2018 09:17:26 -0500 Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [10.210.73.31]) by smtp.transmode.se (Postfix) with ESMTP id 4EA8F1187108; Fri, 14 Dec 2018 15:17:24 +0100 (CET) Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [127.0.0.1]) by gentoo-jocke.infinera.com (8.14.9/8.14.9) with ESMTP id wBEEHOhY021504; Fri, 14 Dec 2018 15:17:24 +0100 Received: (from jocke@localhost) by gentoo-jocke.infinera.com (8.14.9/8.14.9/Submit) id wBEEHOg2021503; Fri, 14 Dec 2018 15:17:24 +0100 From: Joakim Tjernlund To: netdev@vger.kernel.org, Florian Fainelli , Andrew Lunn , claudiu.manoil@nxp.com, madalin.bucur@nxp.com, leoyang.li@nxp.com Cc: Joakim Tjernlund Subject: [PATCH v4 3/4] gianfar: Add change_carrier() for Fixed PHYs Date: Fri, 14 Dec 2018 15:17:07 +0100 Message-Id: <20181214141708.21439-3-joakim.tjernlund@infinera.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181214141708.21439-1-joakim.tjernlund@infinera.com> References: <20181214141708.21439-1-joakim.tjernlund@infinera.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This allows to control carrier from /sys/class/net/ethX/carrier for Fixed PHYs. Signed-off-by: Joakim Tjernlund --- drivers/net/ethernet/freescale/gianfar.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 3c8da1a18ba0..d6df15ae165a 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c @@ -500,6 +500,7 @@ static const struct net_device_ops gfar_netdev_ops = { .ndo_tx_timeout = gfar_timeout, .ndo_do_ioctl = gfar_ioctl, .ndo_get_stats = gfar_get_stats, + .ndo_change_carrier = fixed_phy_change_carrier, .ndo_set_mac_address = gfar_set_mac_addr, .ndo_validate_addr = eth_validate_addr, #ifdef CONFIG_NET_POLL_CONTROLLER From patchwork Fri Dec 14 14:17:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joakim Tjernlund X-Patchwork-Id: 1013548 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=infinera.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43GXgY0k1Dz9sB5 for ; Sat, 15 Dec 2018 01:17:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730117AbeLNOR2 (ORCPT ); Fri, 14 Dec 2018 09:17:28 -0500 Received: from smtp.transmode.se ([31.15.61.139]:61684 "EHLO smtp.transmode.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726554AbeLNOR0 (ORCPT ); Fri, 14 Dec 2018 09:17:26 -0500 Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [10.210.73.31]) by smtp.transmode.se (Postfix) with ESMTP id 40F4F118710F; Fri, 14 Dec 2018 15:17:25 +0100 (CET) Received: from gentoo-jocke.infinera.com (gentoo-jocke.infinera.com [127.0.0.1]) by gentoo-jocke.infinera.com (8.14.9/8.14.9) with ESMTP id wBEEHPv5021508; Fri, 14 Dec 2018 15:17:25 +0100 Received: (from jocke@localhost) by gentoo-jocke.infinera.com (8.14.9/8.14.9/Submit) id wBEEHPGl021507; Fri, 14 Dec 2018 15:17:25 +0100 From: Joakim Tjernlund To: netdev@vger.kernel.org, Florian Fainelli , Andrew Lunn , claudiu.manoil@nxp.com, madalin.bucur@nxp.com, leoyang.li@nxp.com Cc: Joakim Tjernlund Subject: [PATCH v4 4/4] ucc_geth: Add change_carrier() for Fixed PHYs Date: Fri, 14 Dec 2018 15:17:08 +0100 Message-Id: <20181214141708.21439-4-joakim.tjernlund@infinera.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181214141708.21439-1-joakim.tjernlund@infinera.com> References: <20181214141708.21439-1-joakim.tjernlund@infinera.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This allows to control carrier from /sys/class/net/ethX/carrier for Fixed PHYs. Signed-off-by: Joakim Tjernlund --- drivers/net/ethernet/freescale/ucc_geth.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c index 32e02700feaa..ad8023557668 100644 --- a/drivers/net/ethernet/freescale/ucc_geth.c +++ b/drivers/net/ethernet/freescale/ucc_geth.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -3681,6 +3682,7 @@ static const struct net_device_ops ucc_geth_netdev_ops = { .ndo_stop = ucc_geth_close, .ndo_start_xmit = ucc_geth_start_xmit, .ndo_validate_addr = eth_validate_addr, + .ndo_change_carrier = fixed_phy_change_carrier, .ndo_set_mac_address = ucc_geth_set_mac_addr, .ndo_set_rx_mode = ucc_geth_set_multi, .ndo_tx_timeout = ucc_geth_timeout,