From patchwork Wed Apr 17 11:00:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Bauer X-Patchwork-Id: 1086912 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=none (p=none dis=none) header.from=david-bauer.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44kfRJ3qBKz9s3Z for ; Wed, 17 Apr 2019 21:00:44 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731896AbfDQLAm (ORCPT ); Wed, 17 Apr 2019 07:00:42 -0400 Received: from mars.blocktrron.ovh ([51.254.112.43]:49939 "EHLO mail.blocktrron.ovh" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731594AbfDQLAl (ORCPT ); Wed, 17 Apr 2019 07:00:41 -0400 Received: from dbauer-t470.ffka.space (unknown [IPv6:2001:678:6e3:1050:1d5b:d9ea:42ea:f977]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.blocktrron.ovh (Postfix) with ESMTPSA id 084E822257; Wed, 17 Apr 2019 13:00:39 +0200 (CEST) From: David Bauer To: devicetree@vger.kernel.org, netdev@vger.kernel.org Cc: Andrew Lunn Subject: [PATCH v2 1/3] dt-bindings: net: add PHY reset controller binding Date: Wed, 17 Apr 2019 13:00:30 +0200 Message-Id: <20190417110032.17727-2-mail@david-bauer.net> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417110032.17727-1-mail@david-bauer.net> References: <20190417110032.17727-1-mail@david-bauer.net> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add the documentation for PHY reset lines controlled by a reset controller. Reviewed-by: Andrew Lunn Signed-off-by: David Bauer --- Documentation/devicetree/bindings/net/phy.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/net/phy.txt b/Documentation/devicetree/bindings/net/phy.txt index 17c1d2bd00f6..9b9e5b1765dd 100644 --- a/Documentation/devicetree/bindings/net/phy.txt +++ b/Documentation/devicetree/bindings/net/phy.txt @@ -51,6 +51,10 @@ Optional Properties: to ensure the integrated PHY is used. The absence of this property indicates the muxers should be configured so that the external PHY is used. +- resets: The reset-controller phandle and specifier for the PHY reset signal. + +- reset-names: Must be "phy" for the PHY reset signal. + - reset-gpios: The GPIO phandle and specifier for the PHY reset signal. - reset-assert-us: Delay after the reset was asserted in microseconds. @@ -67,6 +71,8 @@ ethernet-phy@0 { interrupts = <35 IRQ_TYPE_EDGE_RISING>; reg = <0>; + resets = <&rst 8>; + reset-names = "phy"; reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; reset-assert-us = <1000>; reset-deassert-us = <2000>; From patchwork Wed Apr 17 11:00:31 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Bauer X-Patchwork-Id: 1086911 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=none (p=none dis=none) header.from=david-bauer.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44kfRH5C8kz9s4Y for ; Wed, 17 Apr 2019 21:00:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731889AbfDQLAm (ORCPT ); Wed, 17 Apr 2019 07:00:42 -0400 Received: from mars.blocktrron.ovh ([51.254.112.43]:49943 "EHLO mail.blocktrron.ovh" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731810AbfDQLAl (ORCPT ); Wed, 17 Apr 2019 07:00:41 -0400 Received: from dbauer-t470.ffka.space (unknown [IPv6:2001:678:6e3:1050:1d5b:d9ea:42ea:f977]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.blocktrron.ovh (Postfix) with ESMTPSA id 239692225A; Wed, 17 Apr 2019 13:00:39 +0200 (CEST) From: David Bauer To: devicetree@vger.kernel.org, netdev@vger.kernel.org Cc: Andrew Lunn Subject: [PATCH v2 2/3] net: phy: add support for reset-controller Date: Wed, 17 Apr 2019 13:00:31 +0200 Message-Id: <20190417110032.17727-3-mail@david-bauer.net> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417110032.17727-1-mail@david-bauer.net> References: <20190417110032.17727-1-mail@david-bauer.net> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This commit adds support for PHY reset pins handled by a reset controller. Reviewed-by: Andrew Lunn Signed-off-by: David Bauer --- drivers/net/phy/mdio_bus.c | 26 ++++++++++++++++++++++++-- drivers/net/phy/mdio_device.c | 13 +++++++++++-- include/linux/mdio.h | 1 + 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 4be4cc09eb90..e5428951dfe1 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -57,8 +58,23 @@ static int mdiobus_register_gpiod(struct mdio_device *mdiodev) mdiodev->reset = gpiod; - /* Assert the reset signal again */ - mdio_device_reset(mdiodev, 1); + return 0; +} + +static int mdiobus_register_reset(struct mdio_device *mdiodev) +{ + struct reset_control *reset = NULL; + + if (mdiodev->dev.of_node) + reset = devm_reset_control_get_exclusive(&mdiodev->dev, + "phy"); + if (PTR_ERR(reset) == -ENOENT || + PTR_ERR(reset) == -ENOTSUPP) + reset = NULL; + else if (IS_ERR(reset)) + return PTR_ERR(reset); + + mdiodev->reset_ctrl = reset; return 0; } @@ -74,6 +90,12 @@ int mdiobus_register_device(struct mdio_device *mdiodev) err = mdiobus_register_gpiod(mdiodev); if (err) return err; + err = mdiobus_register_reset(mdiodev); + if (err) + return err; + + /* Assert the reset signal */ + mdio_device_reset(mdiodev, 1); } mdiodev->bus->mdio_map[mdiodev->addr] = mdiodev; diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c index 887076292e50..57668e0f9256 100644 --- a/drivers/net/phy/mdio_device.c +++ b/drivers/net/phy/mdio_device.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -116,10 +117,18 @@ void mdio_device_reset(struct mdio_device *mdiodev, int value) { unsigned int d; - if (!mdiodev->reset) + if (!mdiodev->reset && !mdiodev->reset_ctrl) return; - gpiod_set_value(mdiodev->reset, value); + if (mdiodev->reset) + gpiod_set_value(mdiodev->reset, value); + + if (mdiodev->reset_ctrl) { + if (value) + reset_control_assert(mdiodev->reset_ctrl); + else + reset_control_deassert(mdiodev->reset_ctrl); + } d = value ? mdiodev->reset_assert_delay : mdiodev->reset_deassert_delay; if (d) diff --git a/include/linux/mdio.h b/include/linux/mdio.h index 3e99ae3ed87f..6eaf71500ef6 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -40,6 +40,7 @@ struct mdio_device { int addr; int flags; struct gpio_desc *reset; + struct reset_control *reset_ctrl; unsigned int reset_assert_delay; unsigned int reset_deassert_delay; }; From patchwork Wed Apr 17 11:00:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Bauer X-Patchwork-Id: 1086913 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=none (p=none dis=none) header.from=david-bauer.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44kfRM6trhz9s3Z for ; Wed, 17 Apr 2019 21:00:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731902AbfDQLAr (ORCPT ); Wed, 17 Apr 2019 07:00:47 -0400 Received: from mars.blocktrron.ovh ([51.254.112.43]:49945 "EHLO mail.blocktrron.ovh" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731566AbfDQLAm (ORCPT ); Wed, 17 Apr 2019 07:00:42 -0400 Received: from dbauer-t470.ffka.space (unknown [IPv6:2001:678:6e3:1050:1d5b:d9ea:42ea:f977]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.blocktrron.ovh (Postfix) with ESMTPSA id 3E0C72281B; Wed, 17 Apr 2019 13:00:39 +0200 (CEST) From: David Bauer To: devicetree@vger.kernel.org, netdev@vger.kernel.org Cc: Andrew Lunn Subject: [PATCH v2 3/3] net: mdio: rename mdio_device reset to reset_gpio Date: Wed, 17 Apr 2019 13:00:32 +0200 Message-Id: <20190417110032.17727-4-mail@david-bauer.net> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417110032.17727-1-mail@david-bauer.net> References: <20190417110032.17727-1-mail@david-bauer.net> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This renames the GPIO reset of mdio devices from 'reset' to 'reset_gpio' to better differentiate between GPIO and reset-controller driven reset line. Reviewed-by: Andrew Lunn Signed-off-by: David Bauer --- drivers/net/phy/at803x.c | 2 +- drivers/net/phy/mdio_bus.c | 6 +++--- drivers/net/phy/mdio_device.c | 6 +++--- include/linux/mdio.h | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index f3e96191eb6f..16c5a83e2a60 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c @@ -334,7 +334,7 @@ static void at803x_link_change_notify(struct phy_device *phydev) * cannot recover from by software. */ if (phydev->state == PHY_NOLINK) { - if (phydev->mdio.reset && !priv->phy_reset) { + if (phydev->mdio.reset_gpio && !priv->phy_reset) { struct at803x_context context; at803x_context_save(phydev, &context); diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index e5428951dfe1..5fd2295cf621 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -56,7 +56,7 @@ static int mdiobus_register_gpiod(struct mdio_device *mdiodev) return PTR_ERR(gpiod); } - mdiodev->reset = gpiod; + mdiodev->reset_gpio = gpiod; return 0; } @@ -468,8 +468,8 @@ void mdiobus_unregister(struct mii_bus *bus) if (!mdiodev) continue; - if (mdiodev->reset) - gpiod_put(mdiodev->reset); + if (mdiodev->reset_gpio) + gpiod_put(mdiodev->reset_gpio); mdiodev->device_remove(mdiodev); mdiodev->device_free(mdiodev); diff --git a/drivers/net/phy/mdio_device.c b/drivers/net/phy/mdio_device.c index 57668e0f9256..e282600bd83e 100644 --- a/drivers/net/phy/mdio_device.c +++ b/drivers/net/phy/mdio_device.c @@ -117,11 +117,11 @@ void mdio_device_reset(struct mdio_device *mdiodev, int value) { unsigned int d; - if (!mdiodev->reset && !mdiodev->reset_ctrl) + if (!mdiodev->reset_gpio && !mdiodev->reset_ctrl) return; - if (mdiodev->reset) - gpiod_set_value(mdiodev->reset, value); + if (mdiodev->reset_gpio) + gpiod_set_value(mdiodev->reset_gpio, value); if (mdiodev->reset_ctrl) { if (value) diff --git a/include/linux/mdio.h b/include/linux/mdio.h index 6eaf71500ef6..9dc16d5705a1 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h @@ -39,7 +39,7 @@ struct mdio_device { /* Bus address of the MDIO device (0-31) */ int addr; int flags; - struct gpio_desc *reset; + struct gpio_desc *reset_gpio; struct reset_control *reset_ctrl; unsigned int reset_assert_delay; unsigned int reset_deassert_delay;