From patchwork Fri Mar 25 17:22:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 12791981 X-Patchwork-Delegate: kuba@kernel.org 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 A8595C4332F for ; Fri, 25 Mar 2022 19:39:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231127AbiCYTkf (ORCPT ); Fri, 25 Mar 2022 15:40:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232714AbiCYTjK (ORCPT ); Fri, 25 Mar 2022 15:39:10 -0400 Received: from mslow1.mail.gandi.net (mslow1.mail.gandi.net [217.70.178.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1DE121BA6AE; Fri, 25 Mar 2022 12:18:38 -0700 (PDT) Received: from relay6-d.mail.gandi.net (unknown [217.70.183.198]) by mslow1.mail.gandi.net (Postfix) with ESMTP id B8734C1EBF; Fri, 25 Mar 2022 17:25:19 +0000 (UTC) Received: (Authenticated sender: clement.leger@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 7F5BAC0007; Fri, 25 Mar 2022 17:23:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1648229039; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+P/gGiENfYIPA/EqZKPnF3v0HfIcyQP5+PsKzM5cQ+w=; b=AipoZG39iudi8cU6BEpEiCg7RbXt40gwjsqwzIrbaQuh0IhvFSgw1oAhaTeFgnnl1hVLie dwRg0oyl8t9L/ky8n43KuVSj0fZ0op+OPT6oO5NbRsfa10tiyWBht+DJXFx+Of4lSvizoQ RLUuvXI3i+LA1VmshsSlVxNuEf5MSN+IJ6XrSNecNqfkfjQAqHPuQvaLC+dkuGmf++VU6u KVM8oqQCBD+VwP2aLPdyg6lAZFFXnYuaHt7+ouDqRQQES1Oi03OfJuPVLtxO6mqaNjAW7j ruxqlXYwZu2CIgX/Lab0zn+hoVXhtT1d+9nitmwGbiLN+c6uB7YF2PuPSz3HCA== From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Andrew Lunn , Heiner Kallweit , Russell King , "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: Horatiu Vultur , Thomas Petazzoni , Alexandre Belloni , Allan Nielsen , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= Subject: [net-next 1/5] net: mdio: fwnode: add fwnode_mdiobus_register() Date: Fri, 25 Mar 2022 18:22:30 +0100 Message-Id: <20220325172234.1259667-2-clement.leger@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220325172234.1259667-1-clement.leger@bootlin.com> References: <20220325172234.1259667-1-clement.leger@bootlin.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org In order to support software node description transparently, add fwnode support with fwnode_mdiobus_register(). This function behaves exactly like of_mdiobus_register() function but using the fwnode node agnostic API. This support might also be used to merge ACPI mdiobus support which is quite similar to the fwnode one. Some part such as the whitelist matching are kept exclusively for OF nodes since it uses an of_device_id struct and seems tightly coupled with OF. Other parts are generic and will allow to move the existing OF support on top of this fwnode version. Signed-off-by: Clément Léger Reported-by: kernel test robot Reported-by: kernel test robot --- drivers/net/mdio/fwnode_mdio.c | 210 +++++++++++++++++++++++++++++++++ include/linux/fwnode_mdio.h | 13 ++ 2 files changed, 223 insertions(+) diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index 1becb1a731f6..f9ec3818041a 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -11,6 +11,8 @@ #include #include +#define DEFAULT_GPIO_RESET_DELAY 10 /* in microseconds */ + MODULE_AUTHOR("Calvin Johnson "); MODULE_LICENSE("GPL"); @@ -142,3 +144,211 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, return 0; } EXPORT_SYMBOL(fwnode_mdiobus_register_phy); + +/* The following is a list of PHY compatible strings which appear in + * some DTBs. The compatible string is never matched against a PHY + * driver, so is pointless. We only expect devices which are not PHYs + * to have a compatible string, so they can be matched to an MDIO + * driver. Encourage users to upgrade their DT blobs to remove these. + */ +static const struct of_device_id whitelist_phys[] = { + { .compatible = "brcm,40nm-ephy" }, + { .compatible = "broadcom,bcm5241" }, + { .compatible = "marvell,88E1111", }, + { .compatible = "marvell,88e1116", }, + { .compatible = "marvell,88e1118", }, + { .compatible = "marvell,88e1145", }, + { .compatible = "marvell,88e1149r", }, + { .compatible = "marvell,88e1310", }, + { .compatible = "marvell,88E1510", }, + { .compatible = "marvell,88E1514", }, + { .compatible = "moxa,moxart-rtl8201cp", }, + {} +}; + +/* Return true if the child node is for a phy. It must either: + * o Compatible string of "ethernet-phy-idX.X" + * o Compatible string of "ethernet-phy-ieee802.3-c45" + * o Compatible string of "ethernet-phy-ieee802.3-c22" + * o No compatibility string + * + * A device which is not a phy is expected to have a compatible string + * indicating what sort of device it is. + */ +bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child) +{ + u32 phy_id; + + if (fwnode_get_phy_id(child, &phy_id) != -EINVAL) + return true; + + if (fwnode_property_match_string(child, "compatible", + "ethernet-phy-ieee802.3-c45") >= 0) + return true; + + if (fwnode_property_match_string(child, "compatible", + "ethernet-phy-ieee802.3-c22") >= 0) + return true; + + if (is_of_node(child) && + of_match_node(whitelist_phys, to_of_node(child))) { + pr_warn(FW_WARN + "%s: Whitelisted compatible string. Please remove\n", + fwnode_get_name(child)); + return true; + } + + if (!fwnode_property_present(child, "compatible")) + return true; + + return false; +} +EXPORT_SYMBOL(fwnode_mdiobus_child_is_phy); + +static int fwnode_mdiobus_register_device(struct mii_bus *mdio, + struct fwnode_handle *child, + u32 addr) +{ + struct mdio_device *mdiodev; + int rc; + + mdiodev = mdio_device_create(mdio, addr); + if (IS_ERR(mdiodev)) + return PTR_ERR(mdiodev); + + fwnode_handle_get(child); + device_set_node(&mdiodev->dev, child); + + /* All data is now stored in the mdiodev struct; register it. */ + rc = mdio_device_register(mdiodev); + if (rc) { + mdio_device_free(mdiodev); + fwnode_handle_put(child); + return rc; + } + + dev_dbg(&mdio->dev, "registered mdio device %s at address %i\n", + fwnode_get_name(child), addr); + return 0; +} + +static inline int fwnode_mdio_parse_addr(struct device *dev, + const struct fwnode_handle *fwnode) +{ + u32 addr; + int ret; + + ret = fwnode_property_read_u32(fwnode, "reg", &addr); + if (ret < 0) { + dev_err(dev, "%s has invalid PHY address\n", + fwnode_get_name(fwnode)); + return ret; + } + + /* A PHY must have a reg property in the range [0-31] */ + if (addr >= PHY_MAX_ADDR) { + dev_err(dev, "%s PHY address %i is too large\n", + fwnode_get_name(fwnode), addr); + return -EINVAL; + } + + return addr; +} + +/** + * fwnode_mdiobus_register - Register mii_bus and create PHYs from fwnode + * @mdio: pointer to mii_bus structure + * @fwnode: pointer to fwnode of MDIO bus. + * + */ +int fwnode_mdiobus_register(struct mii_bus *mdio, struct fwnode_handle *fwnode) +{ + struct fwnode_handle *child; + bool scanphys = false; + int addr, rc; + + if (!fwnode) + return mdiobus_register(mdio); + + if (!fwnode_device_is_available(fwnode)) + return -ENODEV; + + /* Mask out all PHYs from auto probing. Instead the PHYs listed in + * the device tree are populated after the bus has been registered + */ + mdio->phy_mask = ~0; + + device_set_node(&mdio->dev, fwnode); + + /* Get bus level PHY reset GPIO details */ + mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY; + fwnode_property_read_u32(fwnode, "reset-delay-us", + &mdio->reset_delay_us); + mdio->reset_post_delay_us = 0; + fwnode_property_read_u32(fwnode, "reset-post-delay-us", + &mdio->reset_post_delay_us); + + /* Register the MDIO bus */ + rc = mdiobus_register(mdio); + if (rc) + return rc; + + /* Loop over the child nodes and register a phy_device for each phy */ + fwnode_for_each_available_child_node(fwnode, child) { + addr = fwnode_mdio_parse_addr(&mdio->dev, child); + if (addr < 0) { + scanphys = true; + continue; + } + + if (fwnode_mdiobus_child_is_phy(child)) + rc = fwnode_mdiobus_register_phy(mdio, child, addr); + else + rc = fwnode_mdiobus_register_device(mdio, child, addr); + + if (rc == -ENODEV) + dev_err(&mdio->dev, + "MDIO device at address %d is missing.\n", + addr); + else if (rc) + goto unregister; + } + + if (!scanphys) + return 0; + + /* auto scan for PHYs with empty reg property */ + fwnode_for_each_available_child_node(fwnode, child) { + /* Skip PHYs with reg property set */ + if (fwnode_property_present(child, "reg")) + continue; + + for (addr = 0; addr < PHY_MAX_ADDR; addr++) { + /* skip already registered PHYs */ + if (mdiobus_is_registered_device(mdio, addr)) + continue; + + /* be noisy to encourage people to set reg property */ + dev_info(&mdio->dev, "scan phy %s at address %i\n", + fwnode_get_name(child), addr); + + if (fwnode_mdiobus_child_is_phy(child)) { + /* -ENODEV is the return code that PHYLIB has + * standardized on to indicate that bus + * scanning should continue. + */ + rc = fwnode_mdiobus_register_phy(mdio, child, + addr); + if (!rc) + break; + if (rc != -ENODEV) + goto unregister; + } + } + } + +unregister: + mdiobus_unregister(mdio); + return rc; +} +EXPORT_SYMBOL(fwnode_mdiobus_register); diff --git a/include/linux/fwnode_mdio.h b/include/linux/fwnode_mdio.h index faf603c48c86..ca380050056d 100644 --- a/include/linux/fwnode_mdio.h +++ b/include/linux/fwnode_mdio.h @@ -9,6 +9,7 @@ #include #if IS_ENABLED(CONFIG_FWNODE_MDIO) +bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child); int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, struct fwnode_handle *child, u32 addr); @@ -16,7 +17,13 @@ int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, int fwnode_mdiobus_register_phy(struct mii_bus *bus, struct fwnode_handle *child, u32 addr); +int fwnode_mdiobus_register(struct mii_bus *mdio, struct fwnode_handle *fwnode); #else /* CONFIG_FWNODE_MDIO */ +static inline bool fwnode_mdiobus_child_is_phy(struct fwnode_handle *child) +{ + return false; +} + int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, struct fwnode_handle *child, u32 addr) @@ -30,6 +37,12 @@ static inline int fwnode_mdiobus_register_phy(struct mii_bus *bus, { return -EINVAL; } + +static int fwnode_mdiobus_register(struct mii_bus *mdio, + struct fwnode_handle *fwnode) +{ + return -EINVAL; +} #endif #endif /* __LINUX_FWNODE_MDIO_H */ From patchwork Fri Mar 25 17:22:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 12791883 X-Patchwork-Delegate: kuba@kernel.org 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 00B4BC433F5 for ; Fri, 25 Mar 2022 17:43:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229717AbiCYRo4 (ORCPT ); Fri, 25 Mar 2022 13:44:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229535AbiCYRoy (ORCPT ); Fri, 25 Mar 2022 13:44:54 -0400 Received: from mslow1.mail.gandi.net (mslow1.mail.gandi.net [217.70.178.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D9D6013F80; Fri, 25 Mar 2022 10:43:13 -0700 (PDT) Received: from relay6-d.mail.gandi.net (unknown [IPv6:2001:4b98:dc4:8::226]) by mslow1.mail.gandi.net (Postfix) with ESMTP id 327CFC8431; Fri, 25 Mar 2022 17:25:36 +0000 (UTC) Received: (Authenticated sender: clement.leger@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 8E1B8C0010; Fri, 25 Mar 2022 17:23:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1648229040; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=92YrscYGwPSDZJXybsraG0OvQ2i/KwdGk8nKAr92wok=; b=M/cR+zwuXNK6Z5Mot9h7ILnY0TKSoLfn1JREYexbFsyC338EPSEJT5c8RgkqjFdxywfCBk mZBylyPl2o2uKh+9UgW3ANFYzYXbXzccjY0HckI/QxTbd/VORL4fI1oCuuS2JNnpTpF+uP Cl/cxR6D7U2EKqctR6duvjPHUeAblg2OdL7QNc34YWUDSbSeZ3TTDsE8Ela+JnJHWlxo37 ntNvyXkS8atg/cAx4amUSLpX5UNPXsl74MqNKEA6Ac6rjJcH8k0rXeO3IXZ00NMAIGR9bj DMbZXGS041izTQnAq+Llm+o7OAntnv2oj74KKufEUeN0Kqnb+tcQhLkLoxM3PQ== From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Andrew Lunn , Heiner Kallweit , Russell King , "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: Horatiu Vultur , Thomas Petazzoni , Alexandre Belloni , Allan Nielsen , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= Subject: [net-next 2/5] net: mdio: of: use fwnode_mdiobus_* functions Date: Fri, 25 Mar 2022 18:22:31 +0100 Message-Id: <20220325172234.1259667-3-clement.leger@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220325172234.1259667-1-clement.leger@bootlin.com> References: <20220325172234.1259667-1-clement.leger@bootlin.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Now that fwnode support has been added and implements the same behavior expected by device-tree parsing, directly call fwnode_mdiobus_* functions in of_mdio.c. Eventually, the same will be doable for ACPI in order to use a single parsing method based on fwnode API. Signed-off-by: Clément Léger --- drivers/net/mdio/of_mdio.c | 187 +------------------------------------ 1 file changed, 2 insertions(+), 185 deletions(-) diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index 9e3c815a070f..b53dab9fc78e 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -21,18 +21,9 @@ #include #include -#define DEFAULT_GPIO_RESET_DELAY 10 /* in microseconds */ - MODULE_AUTHOR("Grant Likely "); MODULE_LICENSE("GPL"); -/* Extract the clause 22 phy ID from the compatible string of the form - * ethernet-phy-idAAAA.BBBB */ -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) { @@ -42,98 +33,9 @@ int of_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, } 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); -} - -static int of_mdiobus_register_device(struct mii_bus *mdio, - struct device_node *child, u32 addr) -{ - struct fwnode_handle *fwnode = of_fwnode_handle(child); - struct mdio_device *mdiodev; - int rc; - - mdiodev = mdio_device_create(mdio, addr); - if (IS_ERR(mdiodev)) - return PTR_ERR(mdiodev); - - /* Associate the OF node with the device structure so it - * can be looked up later. - */ - fwnode_handle_get(fwnode); - device_set_node(&mdiodev->dev, fwnode); - - /* All data is now stored in the mdiodev struct; register it. */ - rc = mdio_device_register(mdiodev); - if (rc) { - mdio_device_free(mdiodev); - of_node_put(child); - return rc; - } - - dev_dbg(&mdio->dev, "registered mdio device %pOFn at address %i\n", - child, addr); - return 0; -} - -/* The following is a list of PHY compatible strings which appear in - * some DTBs. The compatible string is never matched against a PHY - * driver, so is pointless. We only expect devices which are not PHYs - * to have a compatible string, so they can be matched to an MDIO - * driver. Encourage users to upgrade their DT blobs to remove these. - */ -static const struct of_device_id whitelist_phys[] = { - { .compatible = "brcm,40nm-ephy" }, - { .compatible = "broadcom,bcm5241" }, - { .compatible = "marvell,88E1111", }, - { .compatible = "marvell,88e1116", }, - { .compatible = "marvell,88e1118", }, - { .compatible = "marvell,88e1145", }, - { .compatible = "marvell,88e1149r", }, - { .compatible = "marvell,88e1310", }, - { .compatible = "marvell,88E1510", }, - { .compatible = "marvell,88E1514", }, - { .compatible = "moxa,moxart-rtl8201cp", }, - {} -}; - -/* - * Return true if the child node is for a phy. It must either: - * o Compatible string of "ethernet-phy-idX.X" - * o Compatible string of "ethernet-phy-ieee802.3-c45" - * o Compatible string of "ethernet-phy-ieee802.3-c22" - * o In the white list above (and issue a warning) - * o No compatibility string - * - * A device which is not a phy is expected to have a compatible string - * indicating what sort of device it is. - */ bool of_mdiobus_child_is_phy(struct device_node *child) { - u32 phy_id; - - if (of_get_phy_id(child, &phy_id) != -EINVAL) - return true; - - if (of_device_is_compatible(child, "ethernet-phy-ieee802.3-c45")) - return true; - - if (of_device_is_compatible(child, "ethernet-phy-ieee802.3-c22")) - return true; - - if (of_match_node(whitelist_phys, child)) { - pr_warn(FW_WARN - "%pOF: Whitelisted compatible string. Please remove\n", - child); - return true; - } - - if (!of_find_property(child, "compatible", NULL)) - return true; - - return false; + return fwnode_mdiobus_child_is_phy(of_fwnode_handle(child)); } EXPORT_SYMBOL(of_mdiobus_child_is_phy); @@ -147,92 +49,7 @@ EXPORT_SYMBOL(of_mdiobus_child_is_phy); */ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) { - struct device_node *child; - bool scanphys = false; - int addr, rc; - - if (!np) - return mdiobus_register(mdio); - - /* Do not continue if the node is disabled */ - if (!of_device_is_available(np)) - return -ENODEV; - - /* Mask out all PHYs from auto probing. Instead the PHYs listed in - * the device tree are populated after the bus has been registered */ - mdio->phy_mask = ~0; - - device_set_node(&mdio->dev, of_fwnode_handle(np)); - - /* Get bus level PHY reset GPIO details */ - mdio->reset_delay_us = DEFAULT_GPIO_RESET_DELAY; - of_property_read_u32(np, "reset-delay-us", &mdio->reset_delay_us); - mdio->reset_post_delay_us = 0; - of_property_read_u32(np, "reset-post-delay-us", &mdio->reset_post_delay_us); - - /* Register the MDIO bus */ - rc = mdiobus_register(mdio); - if (rc) - return rc; - - /* Loop over the child nodes and register a phy_device for each phy */ - for_each_available_child_of_node(np, child) { - addr = of_mdio_parse_addr(&mdio->dev, child); - if (addr < 0) { - scanphys = true; - continue; - } - - if (of_mdiobus_child_is_phy(child)) - rc = of_mdiobus_register_phy(mdio, child, addr); - else - rc = of_mdiobus_register_device(mdio, child, addr); - - if (rc == -ENODEV) - dev_err(&mdio->dev, - "MDIO device at address %d is missing.\n", - addr); - else if (rc) - goto unregister; - } - - if (!scanphys) - return 0; - - /* auto scan for PHYs with empty reg property */ - for_each_available_child_of_node(np, child) { - /* Skip PHYs with reg property set */ - if (of_find_property(child, "reg", NULL)) - continue; - - for (addr = 0; addr < PHY_MAX_ADDR; addr++) { - /* skip already registered PHYs */ - if (mdiobus_is_registered_device(mdio, addr)) - continue; - - /* be noisy to encourage people to set reg property */ - dev_info(&mdio->dev, "scan phy %pOFn at address %i\n", - child, addr); - - if (of_mdiobus_child_is_phy(child)) { - /* -ENODEV is the return code that PHYLIB has - * standardized on to indicate that bus - * scanning should continue. - */ - rc = of_mdiobus_register_phy(mdio, child, addr); - if (!rc) - break; - if (rc != -ENODEV) - goto unregister; - } - } - } - - return 0; - -unregister: - mdiobus_unregister(mdio); - return rc; + return fwnode_mdiobus_register(mdio, of_fwnode_handle(np)); } EXPORT_SYMBOL(of_mdiobus_register); From patchwork Fri Mar 25 17:22:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 12792005 X-Patchwork-Delegate: kuba@kernel.org 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 7E9DBC433F5 for ; Fri, 25 Mar 2022 19:47:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231563AbiCYTtI (ORCPT ); Fri, 25 Mar 2022 15:49:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45372 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232395AbiCYTs2 (ORCPT ); Fri, 25 Mar 2022 15:48:28 -0400 Received: from mslow1.mail.gandi.net (mslow1.mail.gandi.net [217.70.178.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A7B01606BD; Fri, 25 Mar 2022 12:31:47 -0700 (PDT) Received: from relay6-d.mail.gandi.net (unknown [IPv6:2001:4b98:dc4:8::226]) by mslow1.mail.gandi.net (Postfix) with ESMTP id 6ACBCC8C3D; Fri, 25 Mar 2022 17:25:37 +0000 (UTC) Received: (Authenticated sender: clement.leger@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id A8AD5C000D; Fri, 25 Mar 2022 17:24:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1648229041; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=s6zz4MlNUuY9SLiRYskNqpLK7uEvG3j4Z0nthKK5Qvs=; b=iLhIrkr6/rTclCABfUYcpeQXHaKmBZr4hto3uW0jBNSQlylTD7zrlj58LVk05dtRwid8SI cpc3uRzRA8BR0OHQgxEWv9c1NKyGdOE7L7/XX3pN5d3RN6bl2s2bStBXLK7+/Hy+IadJ0I su32KHl52iFIaIieCQGq1ruZvhF+TwuxR4p8TYvqJSrNTzyFBiHte14NswpCPQ+QSwuxDG bi0dvQi1BIeb0pEUQ08iAmORtZ96GKwl+sxfmJ77J8d0IXf5Q/+bPC0uiWIQ9Cetse3+8I lRMRZXc9c9Im70Q0cSj+OGXRiEWF2tSs8/l959Sy4FO6uF+XjKA/a4kEi+BEPQ== From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Andrew Lunn , Heiner Kallweit , Russell King , "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: Horatiu Vultur , Thomas Petazzoni , Alexandre Belloni , Allan Nielsen , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= Subject: [net-next 3/5] net: mdiobus: fwnode: avoid calling of_* functions with non OF nodes Date: Fri, 25 Mar 2022 18:22:32 +0100 Message-Id: <20220325172234.1259667-4-clement.leger@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220325172234.1259667-1-clement.leger@bootlin.com> References: <20220325172234.1259667-1-clement.leger@bootlin.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Without this check, of_parse_phandle_with_fixed_args() will be called with whatever the type of the node. Use !is_of_node() which will work for all node types supported by the fwnode API (ACPI, software nodes). Signed-off-by: Clément Léger --- drivers/net/mdio/fwnode_mdio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index f9ec3818041a..7f71c0700c55 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -22,7 +22,7 @@ fwnode_find_mii_timestamper(struct fwnode_handle *fwnode) struct of_phandle_args arg; int err; - if (is_acpi_node(fwnode)) + if (!is_of_node(fwnode)) return NULL; err = of_parse_phandle_with_fixed_args(to_of_node(fwnode), From patchwork Fri Mar 25 17:22:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 12792009 X-Patchwork-Delegate: kuba@kernel.org 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 BF7FCC433F5 for ; Fri, 25 Mar 2022 19:50:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231608AbiCYTwC (ORCPT ); Fri, 25 Mar 2022 15:52:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231770AbiCYTv3 (ORCPT ); Fri, 25 Mar 2022 15:51:29 -0400 Received: from mslow1.mail.gandi.net (mslow1.mail.gandi.net [217.70.178.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0249725DAB9; Fri, 25 Mar 2022 12:35:23 -0700 (PDT) Received: from relay6-d.mail.gandi.net (unknown [217.70.183.198]) by mslow1.mail.gandi.net (Postfix) with ESMTP id 73246C90C9; Fri, 25 Mar 2022 17:25:38 +0000 (UTC) Received: (Authenticated sender: clement.leger@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id D01EEC000F; Fri, 25 Mar 2022 17:24:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1648229042; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=N4xotwJkkW+qiv9g/qytp5wTklonmR/ZeKGbUvRh3HA=; b=n982tKe1Zy97vbuuRabCQ+9oNB7I5M3BM6wV8YnQq9mj4mol+2PF4OoRsOhY/355dL1P0R /udlkd9o49RumixvsIsbGvtlFg6JQc5iQVk95pssHnHoUnmyi/thrSaC4/ZLDtLFx6+BQ2 QvQ5fQeNMBCHSRFstf2XY2XebRKkEZrbpdV/cZBMkME5bRQGwbV4sPioKmI7VYU2wDY28i 8Iq1UiMhaISdEufJNqASYy9An9Ov1lBpAUBWb1aYyS43mG51puvM4rRTfO3cdAdw7bWpAh zCFJBgA5l8k6eQfqCcHEIeukBh3oU3xRnac4rX5m37L7o8tGHM0BgLRmLwyK2Q== From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Andrew Lunn , Heiner Kallweit , Russell King , "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: Horatiu Vultur , Thomas Petazzoni , Alexandre Belloni , Allan Nielsen , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= Subject: [net-next 4/5] net: mdiobus: fwnode: allow phy device registration with non OF nodes Date: Fri, 25 Mar 2022 18:22:33 +0100 Message-Id: <20220325172234.1259667-5-clement.leger@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220325172234.1259667-1-clement.leger@bootlin.com> References: <20220325172234.1259667-1-clement.leger@bootlin.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org When using a software node, we also want to call fwnode_mdiobus_phy_device_register() which support all nodes type. Remove the is_of_node() check to allow that. Signed-off-by: Clément Léger --- drivers/net/mdio/fwnode_mdio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index 7f71c0700c55..9f9dc56f03aa 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -126,7 +126,7 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, fwnode_handle_put(phy->mdio.dev.fwnode); return rc; } - } else if (is_of_node(child)) { + } else { rc = fwnode_mdiobus_phy_device_register(bus, phy, child, addr); if (rc) { unregister_mii_timestamper(mii_ts); From patchwork Fri Mar 25 17:22:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= X-Patchwork-Id: 12792030 X-Patchwork-Delegate: kuba@kernel.org 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 70F17C433EF for ; Fri, 25 Mar 2022 19:58:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231941AbiCYUAJ (ORCPT ); Fri, 25 Mar 2022 16:00:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231938AbiCYT7z (ORCPT ); Fri, 25 Mar 2022 15:59:55 -0400 Received: from mslow1.mail.gandi.net (mslow1.mail.gandi.net [217.70.178.240]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42FD227381E; Fri, 25 Mar 2022 12:49:57 -0700 (PDT) Received: from relay6-d.mail.gandi.net (unknown [IPv6:2001:4b98:dc4:8::226]) by mslow1.mail.gandi.net (Postfix) with ESMTP id E3AF7C75D4; Fri, 25 Mar 2022 17:26:19 +0000 (UTC) Received: (Authenticated sender: clement.leger@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id 038D8C0005; Fri, 25 Mar 2022 17:24:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1648229043; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=FRdaf3QubwalLgacUcstEdzO4ExbwqJKpfZxmAqvKtk=; b=W5e1McTTjEWKYFTx3lHvohtMmUPM9fZXTmJ6wra32uO5GEMUv358WeMWxqV3GEvkhn8SoB Tg4yK8/yc1gSbaUYenNc5xR1eA9WO+IqqM1of4KlJmg6bFLIMRLpfwdNSlSeE+hIichm6u ZveyiQJdTtzBmitmnpFwNdXO0S2vLEcGlnxPX0Yxkh03hBl4Kkpg0NDhMM3EhebiPmduFQ bXa4ExaWUF9b1m+yI04xkkkBOyM4dGBCfrfqjkpExuA8Bgz/9sQVgeLYosNoG4zAQQ150C OCALX4Vz/yAt9zoh8/Fxx8vEli7kWWyMDMeyrICVdqhLghfbyej5r6LPippfdQ== From: =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= To: Andrew Lunn , Heiner Kallweit , Russell King , "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: Horatiu Vultur , Thomas Petazzoni , Alexandre Belloni , Allan Nielsen , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?b?Q2zDqW1lbnQgTMOpZ2Vy?= Subject: [net-next 5/5] net: mdio: mscc-miim: use fwnode_mdiobus_register() Date: Fri, 25 Mar 2022 18:22:34 +0100 Message-Id: <20220325172234.1259667-6-clement.leger@bootlin.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220325172234.1259667-1-clement.leger@bootlin.com> References: <20220325172234.1259667-1-clement.leger@bootlin.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Use fwnode_mdiobus_register() to be compatible with devices described with fwnode. Signed-off-by: Clément Léger Reported-by: kernel test robot --- drivers/net/mdio/mdio-mscc-miim.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/mdio/mdio-mscc-miim.c b/drivers/net/mdio/mdio-mscc-miim.c index c483ba67c21f..ea79421fcfd4 100644 --- a/drivers/net/mdio/mdio-mscc-miim.c +++ b/drivers/net/mdio/mdio-mscc-miim.c @@ -7,12 +7,12 @@ */ #include +#include #include #include #include #include #include -#include #include #include #include @@ -288,7 +288,7 @@ static int mscc_miim_probe(struct platform_device *pdev) if (!miim->info) return -EINVAL; - ret = of_mdiobus_register(bus, pdev->dev.of_node); + ret = fwnode_mdiobus_register(bus, dev_fwnode(&pdev->dev)); if (ret < 0) { dev_err(&pdev->dev, "Cannot register MDIO bus (%d)\n", ret); return ret;