From patchwork Wed Apr 5 09:26:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Felsch X-Patchwork-Id: 670604 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AEEE2C76188 for ; Wed, 5 Apr 2023 09:27:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237216AbjDEJ1L (ORCPT ); Wed, 5 Apr 2023 05:27:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237012AbjDEJ1K (ORCPT ); Wed, 5 Apr 2023 05:27:10 -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 6719E468F for ; Wed, 5 Apr 2023 02:27:09 -0700 (PDT) Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pjzPz-0004pA-Ue; Wed, 05 Apr 2023 11:27:03 +0200 From: Marco Felsch Date: Wed, 05 Apr 2023 11:26:53 +0200 Subject: [PATCH 02/12] net: phy: refactor get_phy_device function MIME-Version: 1.0 Message-Id: <20230405-net-next-topic-net-phy-reset-v1-2-7e5329f08002@pengutronix.de> References: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> In-Reply-To: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Florian Fainelli , Broadcom internal kernel review list , Richard Cochran , Radu Pirea , Shyam Sundar S K , Yisen Zhuang , Salil Mehta , Jassi Brar , Ilias Apalodimas , Iyappan Subramanian , Keyur Chudgar , Quan Nguyen , "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de X-Mailer: b4 0.12.1 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Split get_phy_device() into local helper function. This commit is in preparation of fixing the phy reset handling. No functional changes for the public API users. Signed-off-by: Marco Felsch --- drivers/net/phy/phy_device.c | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index dd0aaa866d17..64292e47e3fc 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -938,6 +938,32 @@ int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id) } EXPORT_SYMBOL(fwnode_get_phy_id); +static int phy_device_detect(struct mii_bus *bus, int addr, bool *is_c45, + u32 *phy_id, struct phy_c45_device_ids *c45_ids) +{ + int r; + + if (*is_c45) + r = get_phy_c45_ids(bus, addr, c45_ids); + else + r = get_phy_c22_id(bus, addr, phy_id); + + if (r) + return r; + + /* PHY device such as the Marvell Alaska 88E2110 will return a PHY ID + * of 0 when probed using get_phy_c22_id() with no error. Proceed to + * probe with C45 to see if we're able to get a valid PHY ID in the C45 + * space, if successful, create the C45 PHY device. + */ + if (!*is_c45 && *phy_id == 0 && bus->read_c45) { + *is_c45 = true; + return get_phy_c45_ids(bus, addr, c45_ids); + } + + return 0; +} + /** * get_phy_device - reads the specified PHY device and returns its @phy_device * struct @@ -967,26 +993,10 @@ struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) c45_ids.mmds_present = 0; memset(c45_ids.device_ids, 0xff, sizeof(c45_ids.device_ids)); - if (is_c45) - r = get_phy_c45_ids(bus, addr, &c45_ids); - else - r = get_phy_c22_id(bus, addr, &phy_id); - + r = phy_device_detect(bus, addr, &is_c45, &phy_id, &c45_ids); if (r) return ERR_PTR(r); - /* PHY device such as the Marvell Alaska 88E2110 will return a PHY ID - * of 0 when probed using get_phy_c22_id() with no error. Proceed to - * probe with C45 to see if we're able to get a valid PHY ID in the C45 - * space, if successful, create the C45 PHY device. - */ - if (!is_c45 && phy_id == 0 && bus->read_c45) { - r = get_phy_c45_ids(bus, addr, &c45_ids); - if (!r) - return phy_device_create(bus, addr, phy_id, - true, &c45_ids); - } - return phy_device_create(bus, addr, phy_id, is_c45, &c45_ids); } EXPORT_SYMBOL(get_phy_device); From patchwork Wed Apr 5 09:26:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Felsch X-Patchwork-Id: 670603 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B41CFC76188 for ; Wed, 5 Apr 2023 09:27:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237340AbjDEJ1P (ORCPT ); Wed, 5 Apr 2023 05:27:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51752 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237012AbjDEJ1O (ORCPT ); Wed, 5 Apr 2023 05:27:14 -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 B8A38449C for ; Wed, 5 Apr 2023 02:27:13 -0700 (PDT) Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pjzQ3-0004pA-Fk; Wed, 05 Apr 2023 11:27:07 +0200 From: Marco Felsch Date: Wed, 05 Apr 2023 11:26:56 +0200 Subject: [PATCH 05/12] net: phy: add phy_id_broken support MIME-Version: 1.0 Message-Id: <20230405-net-next-topic-net-phy-reset-v1-5-7e5329f08002@pengutronix.de> References: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> In-Reply-To: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Florian Fainelli , Broadcom internal kernel review list , Richard Cochran , Radu Pirea , Shyam Sundar S K , Yisen Zhuang , Salil Mehta , Jassi Brar , Ilias Apalodimas , Iyappan Subramanian , Keyur Chudgar , Quan Nguyen , "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de X-Mailer: b4 0.12.1 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Some phy's don't report the correct phy-id, e.g. the TJA1102 dual-port report 0 for the 2nd port. To fix this a driver needs to supply the phyid instead and tell the phy framework to not try to readout the phyid. The latter case is done via the new 'phy_id_broken' flag which tells the phy framework to skip phyid readout for the corresponding phy. Signed-off-by: Marco Felsch --- drivers/net/phy/nxp-tja11xx.c | 1 + drivers/net/phy/phy_device.c | 3 +++ include/linux/phy.h | 3 +++ 3 files changed, 7 insertions(+) diff --git a/drivers/net/phy/nxp-tja11xx.c b/drivers/net/phy/nxp-tja11xx.c index b5e03d66b7f5..2a4c0f6d74eb 100644 --- a/drivers/net/phy/nxp-tja11xx.c +++ b/drivers/net/phy/nxp-tja11xx.c @@ -560,6 +560,7 @@ static void tja1102_p1_register(struct work_struct *work) .mii_bus = bus, /* Real PHY ID of Port 1 is 0 */ .phy_id = PHY_ID_TJA1102, + .phy_id_broken = true, }; struct phy_device *phy; diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index bb465a324eef..7e4b3b3caba9 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -969,6 +969,9 @@ static int phy_device_detect(struct phy_device_config *config) int addr = config->phy_addr; int r; + if (config->phy_id_broken) + return 0; + if (is_c45) r = get_phy_c45_ids(bus, addr, c45_ids); else diff --git a/include/linux/phy.h b/include/linux/phy.h index 498f4dc7669d..0f0cb72a08ab 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -764,6 +764,8 @@ static inline struct phy_device *to_phy_device(const struct device *dev) * @phy_id: UID for this device found during discovery * @c45_ids: 802.3-c45 Device Identifiers if is_c45. * @is_c45: If true the PHY uses the 802.3 clause 45 protocol + * @phy_id_broken: Skip the phy_id detection instead use the supplied phy_id or + * c45_ids. * * The struct contain possible configuration parameters for a PHY device which * are used to setup the struct phy_device. @@ -775,6 +777,7 @@ struct phy_device_config { u32 phy_id; struct phy_c45_device_ids c45_ids; bool is_c45; + bool phy_id_broken; }; /** From patchwork Wed Apr 5 09:26:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Felsch X-Patchwork-Id: 670602 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8BC9C76188 for ; Wed, 5 Apr 2023 09:27:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236556AbjDEJ1S (ORCPT ); Wed, 5 Apr 2023 05:27:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51826 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236888AbjDEJ1Q (ORCPT ); Wed, 5 Apr 2023 05:27:16 -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 2FF8B4C20 for ; Wed, 5 Apr 2023 02:27:14 -0700 (PDT) Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pjzQ5-0004pA-Mh; Wed, 05 Apr 2023 11:27:09 +0200 From: Marco Felsch Date: Wed, 05 Apr 2023 11:26:58 +0200 Subject: [PATCH 07/12] net: mdio: make use of phy_device_atomic_register helper MIME-Version: 1.0 Message-Id: <20230405-net-next-topic-net-phy-reset-v1-7-7e5329f08002@pengutronix.de> References: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> In-Reply-To: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Florian Fainelli , Broadcom internal kernel review list , Richard Cochran , Radu Pirea , Shyam Sundar S K , Yisen Zhuang , Salil Mehta , Jassi Brar , Ilias Apalodimas , Iyappan Subramanian , Keyur Chudgar , Quan Nguyen , "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de X-Mailer: b4 0.12.1 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org The current fwnode_mdiobus_register_phy() implementation assume that the phy is accessible to read the PHYID register values first which isn't the case in some cases. Fix this by using the new phy_device_atomic_register() helper which ensures that the prerequisites are fulfilled before accessing the PHYID registers. Signed-off-by: Marco Felsch --- Documentation/firmware-guide/acpi/dsd/phy.rst | 2 +- drivers/net/mdio/acpi_mdio.c | 18 ++++++++++++------ drivers/net/mdio/of_mdio.c | 13 ++++++++++++- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/Documentation/firmware-guide/acpi/dsd/phy.rst b/Documentation/firmware-guide/acpi/dsd/phy.rst index 673ac374f92a..489e978c7412 100644 --- a/Documentation/firmware-guide/acpi/dsd/phy.rst +++ b/Documentation/firmware-guide/acpi/dsd/phy.rst @@ -5,7 +5,7 @@ MDIO bus and PHYs in ACPI ========================= The PHYs on an MDIO bus [phy] are probed and registered using -fwnode_mdiobus_register_phy(). +phy_device_atomic_register(). Later, for connecting these PHYs to their respective MACs, the PHYs registered on the MDIO bus have to be referenced. diff --git a/drivers/net/mdio/acpi_mdio.c b/drivers/net/mdio/acpi_mdio.c index 4630dde01974..25feb571bd1f 100644 --- a/drivers/net/mdio/acpi_mdio.c +++ b/drivers/net/mdio/acpi_mdio.c @@ -31,8 +31,10 @@ MODULE_LICENSE("GPL"); int __acpi_mdiobus_register(struct mii_bus *mdio, struct fwnode_handle *fwnode, struct module *owner) { + struct phy_device_config config = { + .mii_bus = mdio, + }; struct fwnode_handle *child; - u32 addr; int ret; /* Mask out all PHYs from auto probing. */ @@ -45,15 +47,19 @@ int __acpi_mdiobus_register(struct mii_bus *mdio, struct fwnode_handle *fwnode, /* Loop over the child nodes and register a phy_device for each PHY */ fwnode_for_each_child_node(fwnode, child) { - ret = acpi_get_local_address(ACPI_HANDLE_FWNODE(child), &addr); - if (ret || addr >= PHY_MAX_ADDR) + struct phy_device *phy; + + ret = acpi_get_local_address(ACPI_HANDLE_FWNODE(child), + &config.phy_addr); + if (ret || config.phy_addr >= PHY_MAX_ADDR) continue; - ret = fwnode_mdiobus_register_phy(mdio, child, addr); - if (ret == -ENODEV) + config.fwnode = child; + phy = phy_device_atomic_register(&config); + if (PTR_ERR(phy) == -ENODEV) dev_err(&mdio->dev, "MDIO device at address %d is missing.\n", - addr); + config.phy_addr); } return 0; } diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index 7eb32ebb846d..10dd45c3bde0 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -45,7 +45,18 @@ EXPORT_SYMBOL(of_mdiobus_phy_device_register); static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *child, u32 addr) { - return fwnode_mdiobus_register_phy(mdio, of_fwnode_handle(child), addr); + struct phy_device_config config = { + .mii_bus = mdio, + .phy_addr = addr, + .fwnode = of_fwnode_handle(child), + }; + struct phy_device *phy; + + phy = phy_device_atomic_register(&config); + if (IS_ERR(phy)) + return PTR_ERR(phy); + + return 0; } static int of_mdiobus_register_device(struct mii_bus *mdio, From patchwork Wed Apr 5 09:26:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Felsch X-Patchwork-Id: 670601 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 40B91C77B6C for ; Wed, 5 Apr 2023 09:27:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237051AbjDEJ1T (ORCPT ); Wed, 5 Apr 2023 05:27:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237318AbjDEJ1S (ORCPT ); Wed, 5 Apr 2023 05:27:18 -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 508BC46B4 for ; Wed, 5 Apr 2023 02:27:16 -0700 (PDT) Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pjzQ6-0004pA-Oy; Wed, 05 Apr 2023 11:27:10 +0200 From: Marco Felsch Date: Wed, 05 Apr 2023 11:26:59 +0200 Subject: [PATCH 08/12] net: phy: add possibility to specify mdio device parent MIME-Version: 1.0 Message-Id: <20230405-net-next-topic-net-phy-reset-v1-8-7e5329f08002@pengutronix.de> References: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> In-Reply-To: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Florian Fainelli , Broadcom internal kernel review list , Richard Cochran , Radu Pirea , Shyam Sundar S K , Yisen Zhuang , Salil Mehta , Jassi Brar , Ilias Apalodimas , Iyappan Subramanian , Keyur Chudgar , Quan Nguyen , "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de X-Mailer: b4 0.12.1 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Add the possibility to override the mdiodev parent device. This is required for the TJA1102 dual-port phy where the 2nd port uses the first port device. Signed-off-by: Marco Felsch --- drivers/net/phy/phy_device.c | 2 +- include/linux/phy.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index a784ac06e6a9..30b3ac9818b1 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -642,7 +642,7 @@ static struct phy_device *phy_device_alloc(struct phy_device_config *config) return ERR_PTR(-ENOMEM); mdiodev = &dev->mdio; - mdiodev->dev.parent = &bus->dev; + mdiodev->dev.parent = config->parent_mdiodev ? : &bus->dev; mdiodev->dev.bus = &mdio_bus_type; mdiodev->dev.type = &mdio_bus_phy_type; mdiodev->bus = bus; diff --git a/include/linux/phy.h b/include/linux/phy.h index bdf6d27faefb..d7aea8622a95 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -760,6 +760,8 @@ static inline struct phy_device *to_phy_device(const struct device *dev) * struct phy_device_config - Configuration of a PHY * * @mii_bus: The target MII bus the PHY is connected to + * @parent_mdiodev: Set the MDIO device parent if specified else mii_bus->dev is + * used as parent. * @phy_addr: PHY address on the MII bus * @fwnode: The PHY firmware handle * @phy_id: UID for this device found during discovery @@ -774,6 +776,7 @@ static inline struct phy_device *to_phy_device(const struct device *dev) struct phy_device_config { struct mii_bus *mii_bus; + struct device *parent_mdiodev; int phy_addr; struct fwnode_handle *fwnode; u32 phy_id; From patchwork Wed Apr 5 09:27:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Felsch X-Patchwork-Id: 670600 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57CBFC76188 for ; Wed, 5 Apr 2023 09:27:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237350AbjDEJ1U (ORCPT ); Wed, 5 Apr 2023 05:27:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51928 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237376AbjDEJ1T (ORCPT ); Wed, 5 Apr 2023 05:27:19 -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 618AB4ECB for ; Wed, 5 Apr 2023 02:27:18 -0700 (PDT) Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pjzQ8-0004pA-UM; Wed, 05 Apr 2023 11:27:12 +0200 From: Marco Felsch Date: Wed, 05 Apr 2023 11:27:01 +0200 Subject: [PATCH 10/12] of: mdio: remove now unused of_mdiobus_phy_device_register() MIME-Version: 1.0 Message-Id: <20230405-net-next-topic-net-phy-reset-v1-10-7e5329f08002@pengutronix.de> References: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> In-Reply-To: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Florian Fainelli , Broadcom internal kernel review list , Richard Cochran , Radu Pirea , Shyam Sundar S K , Yisen Zhuang , Salil Mehta , Jassi Brar , Ilias Apalodimas , Iyappan Subramanian , Keyur Chudgar , Quan Nguyen , "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de X-Mailer: b4 0.12.1 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org There are no references to of_mdiobus_phy_device_register() anymore so we can remove the code. Signed-off-by: Marco Felsch --- drivers/net/mdio/of_mdio.c | 9 --------- include/linux/of_mdio.h | 8 -------- 2 files changed, 17 deletions(-) diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index 10dd45c3bde0..e85be8a72978 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -33,15 +33,6 @@ static int of_get_phy_id(struct device_node *device, u32 *phy_id) return fwnode_get_phy_id(of_fwnode_handle(device), phy_id); } -int of_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, - struct device_node *child, u32 addr) -{ - return fwnode_mdiobus_phy_device_register(mdio, phy, - of_fwnode_handle(child), - addr); -} -EXPORT_SYMBOL(of_mdiobus_phy_device_register); - static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *child, u32 addr) { diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h index 8a52ef2e6fa6..ee1fe034f3fe 100644 --- a/include/linux/of_mdio.h +++ b/include/linux/of_mdio.h @@ -47,8 +47,6 @@ struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); int of_phy_register_fixed_link(struct device_node *np); void of_phy_deregister_fixed_link(struct device_node *np); bool of_phy_is_fixed_link(struct device_node *np); -int of_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, - struct device_node *child, u32 addr); static inline int of_mdio_parse_addr(struct device *dev, const struct device_node *np) @@ -142,12 +140,6 @@ static inline bool of_phy_is_fixed_link(struct device_node *np) return false; } -static inline int of_mdiobus_phy_device_register(struct mii_bus *mdio, - struct phy_device *phy, - struct device_node *child, u32 addr) -{ - return -ENOSYS; -} #endif From patchwork Wed Apr 5 09:27:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Felsch X-Patchwork-Id: 670599 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D5F8C7619A for ; Wed, 5 Apr 2023 09:27:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237398AbjDEJ1X (ORCPT ); Wed, 5 Apr 2023 05:27:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237345AbjDEJ1W (ORCPT ); Wed, 5 Apr 2023 05:27:22 -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 B166F4C0E for ; Wed, 5 Apr 2023 02:27:19 -0700 (PDT) Received: from dude02.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::28]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1pjzQA-0004pA-0y; Wed, 05 Apr 2023 11:27:14 +0200 From: Marco Felsch Date: Wed, 05 Apr 2023 11:27:02 +0200 Subject: [PATCH 11/12] net: mdiobus: remove now unused fwnode helpers MIME-Version: 1.0 Message-Id: <20230405-net-next-topic-net-phy-reset-v1-11-7e5329f08002@pengutronix.de> References: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> In-Reply-To: <20230405-net-next-topic-net-phy-reset-v1-0-7e5329f08002@pengutronix.de> To: Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Florian Fainelli , Broadcom internal kernel review list , Richard Cochran , Radu Pirea , Shyam Sundar S K , Yisen Zhuang , Salil Mehta , Jassi Brar , Ilias Apalodimas , Iyappan Subramanian , Keyur Chudgar , Quan Nguyen , "Rafael J. Wysocki" , Len Brown , Rob Herring , Frank Rowand Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, kernel@pengutronix.de X-Mailer: b4 0.12.1 X-SA-Exim-Connect-IP: 2a0a:edc0:0:1101:1d::28 X-SA-Exim-Mail-From: m.felsch@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org These APIs are broken since the very first day because they assume that the phy is accessible to read the PHYID registers. If this requirement is not meet the code fails to add the required phys. The newly added phy_device_atomic_register() API have fixed this and supports firmware parsing as well. After we switched all in kernel users of the fwnode API we now can remove this part from the kernel. Signed-off-by: Marco Felsch --- MAINTAINERS | 1 - drivers/net/mdio/Kconfig | 7 -- drivers/net/mdio/Makefile | 1 - drivers/net/mdio/acpi_mdio.c | 2 +- drivers/net/mdio/fwnode_mdio.c | 186 ----------------------------------------- drivers/net/mdio/of_mdio.c | 1 - include/linux/fwnode_mdio.h | 35 -------- 7 files changed, 1 insertion(+), 232 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 7812f0e251ad..2894b456c0a3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7666,7 +7666,6 @@ F: Documentation/devicetree/bindings/net/qca,ar803x.yaml F: Documentation/networking/phy.rst F: drivers/net/mdio/ F: drivers/net/mdio/acpi_mdio.c -F: drivers/net/mdio/fwnode_mdio.c F: drivers/net/mdio/of_mdio.c F: drivers/net/pcs/ F: drivers/net/phy/ diff --git a/drivers/net/mdio/Kconfig b/drivers/net/mdio/Kconfig index 90309980686e..d0d19666f099 100644 --- a/drivers/net/mdio/Kconfig +++ b/drivers/net/mdio/Kconfig @@ -19,13 +19,6 @@ config MDIO_BUS reflects whether the mdio_bus/mdio_device code is built as a loadable module or built-in. -config FWNODE_MDIO - def_tristate PHYLIB - depends on (ACPI || OF) || COMPILE_TEST - select FIXED_PHY - help - FWNODE MDIO bus (Ethernet PHY) accessors - config OF_MDIO def_tristate PHYLIB depends on OF diff --git a/drivers/net/mdio/Makefile b/drivers/net/mdio/Makefile index 7d4cb4c11e4e..798ede184766 100644 --- a/drivers/net/mdio/Makefile +++ b/drivers/net/mdio/Makefile @@ -2,7 +2,6 @@ # Makefile for Linux MDIO bus drivers obj-$(CONFIG_ACPI_MDIO) += acpi_mdio.o -obj-$(CONFIG_FWNODE_MDIO) += fwnode_mdio.o obj-$(CONFIG_OF_MDIO) += of_mdio.o obj-$(CONFIG_MDIO_ASPEED) += mdio-aspeed.o diff --git a/drivers/net/mdio/acpi_mdio.c b/drivers/net/mdio/acpi_mdio.c index 25feb571bd1f..727b83bf3a15 100644 --- a/drivers/net/mdio/acpi_mdio.c +++ b/drivers/net/mdio/acpi_mdio.c @@ -10,8 +10,8 @@ #include #include #include -#include #include +#include #include MODULE_AUTHOR("Calvin Johnson "); diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c deleted file mode 100644 index 47ef702d4ffd..000000000000 --- a/drivers/net/mdio/fwnode_mdio.c +++ /dev/null @@ -1,186 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * fwnode helpers for the MDIO (Ethernet PHY) API - * - * This file provides helper functions for extracting PHY device information - * out of the fwnode and using it to populate an mii_bus. - */ - -#include -#include -#include -#include -#include - -MODULE_AUTHOR("Calvin Johnson "); -MODULE_LICENSE("GPL"); - -static struct pse_control * -fwnode_find_pse_control(struct fwnode_handle *fwnode) -{ - struct pse_control *psec; - struct device_node *np; - - if (!IS_ENABLED(CONFIG_PSE_CONTROLLER)) - return NULL; - - np = to_of_node(fwnode); - if (!np) - return NULL; - - psec = of_pse_control_get(np); - if (PTR_ERR(psec) == -ENOENT) - return NULL; - - return psec; -} - -static struct mii_timestamper * -fwnode_find_mii_timestamper(struct fwnode_handle *fwnode) -{ - struct of_phandle_args arg; - int err; - - if (is_acpi_node(fwnode)) - return NULL; - - err = of_parse_phandle_with_fixed_args(to_of_node(fwnode), - "timestamper", 1, 0, &arg); - if (err == -ENOENT) - return NULL; - else if (err) - return ERR_PTR(err); - - if (arg.args_count != 1) - return ERR_PTR(-EINVAL); - - return register_mii_timestamper(arg.np, arg.args[0]); -} - -int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, - struct phy_device *phy, - struct fwnode_handle *child, u32 addr) -{ - int rc; - - rc = fwnode_irq_get(child, 0); - /* Don't wait forever if the IRQ provider doesn't become available, - * just fall back to poll mode - */ - if (rc == -EPROBE_DEFER) - rc = driver_deferred_probe_check_state(&phy->mdio.dev); - if (rc == -EPROBE_DEFER) - return rc; - - if (rc > 0) { - phy->irq = rc; - mdio->irq[addr] = rc; - } else { - phy->irq = mdio->irq[addr]; - } - - if (fwnode_property_read_bool(child, "broken-turn-around")) - mdio->phy_ignore_ta_mask |= 1 << addr; - - fwnode_property_read_u32(child, "reset-assert-us", - &phy->mdio.reset_assert_delay); - fwnode_property_read_u32(child, "reset-deassert-us", - &phy->mdio.reset_deassert_delay); - - /* Associate the fwnode with the device structure so it - * can be looked up later - */ - fwnode_handle_get(child); - device_set_node(&phy->mdio.dev, child); - - /* All data is now stored in the phy struct; - * register it - */ - rc = phy_device_register(phy); - if (rc) { - device_set_node(&phy->mdio.dev, NULL); - fwnode_handle_put(child); - return rc; - } - - dev_dbg(&mdio->dev, "registered phy %p fwnode at address %i\n", - child, addr); - return 0; -} -EXPORT_SYMBOL(fwnode_mdiobus_phy_device_register); - -int fwnode_mdiobus_register_phy(struct mii_bus *bus, - struct fwnode_handle *child, u32 addr) -{ - struct phy_device_config config = { - .mii_bus = bus, - .phy_addr = addr, - }; - struct mii_timestamper *mii_ts = NULL; - struct pse_control *psec = NULL; - struct phy_device *phy; - u32 phy_id; - int rc; - - psec = fwnode_find_pse_control(child); - if (IS_ERR(psec)) - return PTR_ERR(psec); - - mii_ts = fwnode_find_mii_timestamper(child); - if (IS_ERR(mii_ts)) { - rc = PTR_ERR(mii_ts); - goto clean_pse; - } - - config.is_c45 = fwnode_device_is_compatible(child, "ethernet-phy-ieee802.3-c45"); - if (config.is_c45 || fwnode_get_phy_id(child, &config.phy_id)) - phy = get_phy_device(&config); - else - phy = phy_device_create(&config); - if (IS_ERR(phy)) { - rc = PTR_ERR(phy); - goto clean_mii_ts; - } - - if (is_acpi_node(child)) { - phy->irq = bus->irq[addr]; - - /* Associate the fwnode with the device structure so it - * can be looked up later. - */ - phy->mdio.dev.fwnode = fwnode_handle_get(child); - - /* All data is now stored in the phy struct, so register it */ - rc = phy_device_register(phy); - if (rc) { - phy->mdio.dev.fwnode = NULL; - fwnode_handle_put(child); - goto clean_phy; - } - } else if (is_of_node(child)) { - rc = fwnode_mdiobus_phy_device_register(bus, phy, child, addr); - if (rc) - goto clean_phy; - } - - phy->psec = psec; - - /* phy->mii_ts may already be defined by the PHY driver. A - * mii_timestamper probed via the device tree will still have - * precedence. - */ - if (mii_ts) - phy->mii_ts = mii_ts; - - return 0; - -clean_phy: - phy_device_free(phy); -clean_mii_ts: - unregister_mii_timestamper(mii_ts); -clean_pse: - pse_control_put(psec); - - return rc; -} -EXPORT_SYMBOL(fwnode_mdiobus_register_phy); diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index e85be8a72978..15ae968ef186 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -10,7 +10,6 @@ #include #include -#include #include #include #include diff --git a/include/linux/fwnode_mdio.h b/include/linux/fwnode_mdio.h deleted file mode 100644 index faf603c48c86..000000000000 --- a/include/linux/fwnode_mdio.h +++ /dev/null @@ -1,35 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * FWNODE helper for the MDIO (Ethernet PHY) API - */ - -#ifndef __LINUX_FWNODE_MDIO_H -#define __LINUX_FWNODE_MDIO_H - -#include - -#if IS_ENABLED(CONFIG_FWNODE_MDIO) -int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, - struct phy_device *phy, - struct fwnode_handle *child, u32 addr); - -int fwnode_mdiobus_register_phy(struct mii_bus *bus, - struct fwnode_handle *child, u32 addr); - -#else /* CONFIG_FWNODE_MDIO */ -int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, - struct phy_device *phy, - struct fwnode_handle *child, u32 addr) -{ - return -EINVAL; -} - -static inline int fwnode_mdiobus_register_phy(struct mii_bus *bus, - struct fwnode_handle *child, - u32 addr) -{ - return -EINVAL; -} -#endif - -#endif /* __LINUX_FWNODE_MDIO_H */