From patchwork Mon Jan 16 17:34:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643449 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 98D39C54EBE for ; Mon, 16 Jan 2023 17:53:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232579AbjAPRxA (ORCPT ); Mon, 16 Jan 2023 12:53:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234358AbjAPRwX (ORCPT ); Mon, 16 Jan 2023 12:52:23 -0500 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15A773B3F6 for ; Mon, 16 Jan 2023 09:35:00 -0800 (PST) Received: by mail-lj1-x22c.google.com with SMTP id y18so27131560ljk.11 for ; Mon, 16 Jan 2023 09:34:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zEb4lOT+O4pg8nXGe0kZqRkEJZCgvHhijruZskMfGvU=; b=dlmINt9wdDatqcnTccEZ9/hR53OWh+oxXX5cJLeZo1u/d6bJ+UNoZEHgBgmogD2WM8 66VKndzb2dX6JsroREQjsRE6SPWlTACzrUSE+jcDUdhYDF/I2iVrfIaGK+Vj65P5SvZC NfRT/Vw19FSIPXHj2IjulhCaQSQQJaNNeKAHP4+2ZofTPVjLVBfgGFq4y8kPKP9f+drF 9ET7i3oehoHRk5d707PX3l0B2ep3UDVoadZ7RSozuqBhGa0nHrt8S2kfJoVAEwKMqmGA 3SNq4hJ29rhHfeFmVkjtB4tY6wL4nWrAY+HegdmzdOmMQ7VMIlglnpmoQMjyXn3SXpgx Vihw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zEb4lOT+O4pg8nXGe0kZqRkEJZCgvHhijruZskMfGvU=; b=gdgmp/Es/DwT/V+R7XUjI1LG2d0R8eWzjjRmJFmhL7RnA0rSKwm59wmbGC5kZDzcuq uqMefQLQPoTDGhS7K+VpPAKcZ8J38UiHyVPpZ0HiZYdRsF2slQX85SMpBmqs2x4CJnlC 4kVS8s6jG1LX4dGlFSv/1avtPC+eimPpXywVLw/yVWj2oIn6BhMK5kCdqZz8E6ox3T7y 6DQ7UEqWbd35IrZ23g+73lJrPKp9uucAH+hdzcYLbXF6trWPCE+ReURk8ypqG6IbPuNp v0Y2wibZ79MgL3GLP397Zn+BOF000bvA8bg03lJpyNfHm0YjdOPjc6ZVM/vj8Od2hKoz bUIQ== X-Gm-Message-State: AFqh2krPfUspR3SBVfb1+5wkHTBkuv9GO8u+E1AlpO8QuWo7cuLHfQvu sxie3MbOsfhyC7M1nBs+2ugpsw== X-Google-Smtp-Source: AMrXdXsEOa+Vzqq3OenNeL3qmLI1gI2AEgLe399qXt7MFvh/gXSieRTo+VZPpvXMF3DKfZvSP+/hSQ== X-Received: by 2002:a2e:868e:0:b0:280:2c4e:3d3e with SMTP id l14-20020a2e868e000000b002802c4e3d3emr3321703lji.41.1673890498322; Mon, 16 Jan 2023 09:34:58 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.34.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:34:57 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 1/8] net: phy: fixed_phy: switch to fwnode_ API Date: Mon, 16 Jan 2023 18:34:13 +0100 Message-Id: <20230116173420.1278704-2-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Allow to use fixed_phy driver and its helper functions without Device Tree dependency, by swtiching from of_ to fwnode_ API. Signed-off-by: Marcin Wojtas Reviewed-by: Florian Fainelli --- include/linux/phy_fixed.h | 6 +-- drivers/net/mdio/of_mdio.c | 2 +- drivers/net/phy/fixed_phy.c | 39 +++++++------------- 3 files changed, 18 insertions(+), 29 deletions(-) diff --git a/include/linux/phy_fixed.h b/include/linux/phy_fixed.h index 1acafd86ab13..b3edf0c7c687 100644 --- a/include/linux/phy_fixed.h +++ b/include/linux/phy_fixed.h @@ -12,7 +12,7 @@ struct fixed_phy_status { int asym_pause; }; -struct device_node; +struct fwnode_handle; struct gpio_desc; struct net_device; @@ -22,7 +22,7 @@ extern int fixed_phy_add(unsigned int irq, int phy_id, struct fixed_phy_status *status); extern struct phy_device *fixed_phy_register(unsigned int irq, struct fixed_phy_status *status, - struct device_node *np); + struct fwnode_handle *fwnode); extern struct phy_device * fixed_phy_register_with_gpiod(unsigned int irq, @@ -41,7 +41,7 @@ static inline int fixed_phy_add(unsigned int irq, int phy_id, } static inline struct phy_device *fixed_phy_register(unsigned int irq, struct fixed_phy_status *status, - struct device_node *np) + struct fwnode_handle *fwnode) { return ERR_PTR(-ENODEV); } diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index 510822d6d0d9..ba22b7110cdc 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -423,7 +423,7 @@ int of_phy_register_fixed_link(struct device_node *np) return -ENODEV; register_phy: - return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, np)); + return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, of_fwnode_handle(np))); } EXPORT_SYMBOL(of_phy_register_fixed_link); diff --git a/drivers/net/phy/fixed_phy.c b/drivers/net/phy/fixed_phy.c index aef739c20ac4..e59d186f78e6 100644 --- a/drivers/net/phy/fixed_phy.c +++ b/drivers/net/phy/fixed_phy.c @@ -15,9 +15,9 @@ #include #include #include +#include #include #include -#include #include #include #include @@ -186,16 +186,12 @@ static void fixed_phy_del(int phy_addr) } } -#ifdef CONFIG_OF_GPIO -static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np) +static struct gpio_desc *fixed_phy_get_gpiod(struct fwnode_handle *fwnode) { - struct device_node *fixed_link_node; + struct fwnode_handle *fixed_link_node; struct gpio_desc *gpiod; - if (!np) - return NULL; - - fixed_link_node = of_get_child_by_name(np, "fixed-link"); + fixed_link_node = fwnode_get_named_child_node(fwnode, "fixed-link"); if (!fixed_link_node) return NULL; @@ -204,28 +200,21 @@ static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np) * Linux device associated with it, we simply have obtain * the GPIO descriptor from the device tree like this. */ - gpiod = fwnode_gpiod_get_index(of_fwnode_handle(fixed_link_node), - "link", 0, GPIOD_IN, "mdio"); + gpiod = fwnode_gpiod_get_index(fixed_link_node, "link", 0, GPIOD_IN, "mdio"); if (IS_ERR(gpiod) && PTR_ERR(gpiod) != -EPROBE_DEFER) { if (PTR_ERR(gpiod) != -ENOENT) pr_err("error getting GPIO for fixed link %pOF, proceed without\n", fixed_link_node); gpiod = NULL; } - of_node_put(fixed_link_node); + fwnode_handle_put(fixed_link_node); return gpiod; } -#else -static struct gpio_desc *fixed_phy_get_gpiod(struct device_node *np) -{ - return NULL; -} -#endif static struct phy_device *__fixed_phy_register(unsigned int irq, struct fixed_phy_status *status, - struct device_node *np, + struct fwnode_handle *fwnode, struct gpio_desc *gpiod) { struct fixed_mdio_bus *fmb = &platform_fmb; @@ -238,7 +227,7 @@ static struct phy_device *__fixed_phy_register(unsigned int irq, /* Check if we have a GPIO associated with this fixed phy */ if (!gpiod) { - gpiod = fixed_phy_get_gpiod(np); + gpiod = fixed_phy_get_gpiod(fwnode); if (IS_ERR(gpiod)) return ERR_CAST(gpiod); } @@ -269,8 +258,8 @@ static struct phy_device *__fixed_phy_register(unsigned int irq, phy->asym_pause = status->asym_pause; } - of_node_get(np); - phy->mdio.dev.of_node = np; + fwnode_handle_get(fwnode); + device_set_node(&phy->mdio.dev, fwnode); phy->is_pseudo_fixed_link = true; switch (status->speed) { @@ -299,7 +288,7 @@ static struct phy_device *__fixed_phy_register(unsigned int irq, ret = phy_device_register(phy); if (ret) { phy_device_free(phy); - of_node_put(np); + fwnode_handle_put(fwnode); fixed_phy_del(phy_addr); return ERR_PTR(ret); } @@ -309,9 +298,9 @@ static struct phy_device *__fixed_phy_register(unsigned int irq, struct phy_device *fixed_phy_register(unsigned int irq, struct fixed_phy_status *status, - struct device_node *np) + struct fwnode_handle *fwnode) { - return __fixed_phy_register(irq, status, np, NULL); + return __fixed_phy_register(irq, status, fwnode, NULL); } EXPORT_SYMBOL_GPL(fixed_phy_register); @@ -327,7 +316,7 @@ EXPORT_SYMBOL_GPL(fixed_phy_register_with_gpiod); void fixed_phy_unregister(struct phy_device *phy) { phy_device_remove(phy); - of_node_put(phy->mdio.dev.of_node); + fwnode_handle_put(dev_fwnode(&phy->mdio.dev)); fixed_phy_del(phy->mdio.addr); } EXPORT_SYMBOL_GPL(fixed_phy_unregister); From patchwork Mon Jan 16 17:34:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643119 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 61637C678D4 for ; Mon, 16 Jan 2023 17:53:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235140AbjAPRxB (ORCPT ); Mon, 16 Jan 2023 12:53:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38562 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232754AbjAPRwa (ORCPT ); Mon, 16 Jan 2023 12:52:30 -0500 Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A1DB33B3FF for ; Mon, 16 Jan 2023 09:35:01 -0800 (PST) Received: by mail-lj1-x22f.google.com with SMTP id p25so24499857ljn.12 for ; Mon, 16 Jan 2023 09:35:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=p7zRzIvSvAnePdgerXrTk1rkO3KZL7nxc+XvMTxQPhY=; b=Xw/fj4+FQpuzGP7EaLIXAVXbJxMPn0Ykf3JEyIVvh0e4CzvpJ+Ly0jSQ3R8nTXqfzg VJGosRKpmExhQ9GpsUvmDtQWbOHyRkh5QTYCstCk04Rt4pkYX0ma0fOiQcPnskzbcRJL /gXJNwOBsx1qqirgcQ1+ghYY1A9aNvklPV3uqw8rsqrbN5J6fqLdwuBgwkGtHVjG5xXh UjpZbwI3W8mHWLpQaDCUMqXYCweFwB+cv2KJAV2xSc9lzC27lMd7ha/3jy/6nDiXGfRs wl4xkixjqViuR8690NymFAvdA+n3U759J6sArzAcVTCri00qP0eYxpdBX5C3t9kbNfXx N8WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=p7zRzIvSvAnePdgerXrTk1rkO3KZL7nxc+XvMTxQPhY=; b=0iXp+FlCvgN6QdpPVhSvWvsqAuoOWaiZKJSFslimGUnnLVh+7aY3ZYq19nPr+xSXYg itgH+KZgi2rvnMq4JWRdMeolMZhbFpvLLO0ff89FcoAeEFiQ4PtfTBKx+6rffZa7aB8s e4g9vcWWL5TSQsTS/g14VnqeRdEu0ASDqf2gASOrjy5Eitr9ovZosCF+7ti/XVPFx4rM mKhKVD1YTqjrJl1EobixW5qKAMIlG1Fi66e3wEv/6lnUJmVrYwsrk/3EZr4RwKw84Ew5 kUaGC+45JnpTLFlvu41WUpv9WWueLvJ6E/bxZQPS8b34cCOI5jKi0i4vZmENn00agiPQ J1uw== X-Gm-Message-State: AFqh2kqn2w/zzy3e4krIaA/+EDqiLScOSW/P1jPX6iMuYy4fXTtdTPyY S6izUXyk/b/1ZtjmZ9eTEVy1Yw== X-Google-Smtp-Source: AMrXdXvNYSPJXM5gb+VT2fXLJrPCPxJy38bDlYjViAKETboBghKQPve9JtUslr/FnDDbMt26+/vwHg== X-Received: by 2002:a2e:838b:0:b0:285:478a:7f2c with SMTP id x11-20020a2e838b000000b00285478a7f2cmr164267ljg.38.1673890499896; Mon, 16 Jan 2023 09:34:59 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.34.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:34:59 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 2/8] net: mdio: switch fixed-link PHYs API to fwnode_ Date: Mon, 16 Jan 2023 18:34:14 +0100 Message-Id: <20230116173420.1278704-3-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org fixed-link PHYs API is used by DSA and a number of drivers and was depending on of_. Switch to fwnode_ so to make it hardware description agnostic and allow to be used in ACPI world as well. Signed-off-by: Marcin Wojtas --- include/linux/fwnode_mdio.h | 19 ++++ drivers/net/mdio/fwnode_mdio.c | 96 ++++++++++++++++++++ drivers/net/mdio/of_mdio.c | 79 +--------------- 3 files changed, 118 insertions(+), 76 deletions(-) diff --git a/include/linux/fwnode_mdio.h b/include/linux/fwnode_mdio.h index faf603c48c86..98755b8c6c8a 100644 --- a/include/linux/fwnode_mdio.h +++ b/include/linux/fwnode_mdio.h @@ -16,6 +16,11 @@ 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_phy_register_fixed_link(struct fwnode_handle *fwnode); + +void fwnode_phy_deregister_fixed_link(struct fwnode_handle *fwnode); + +bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode); #else /* CONFIG_FWNODE_MDIO */ int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, struct phy_device *phy, @@ -30,6 +35,20 @@ static inline int fwnode_mdiobus_register_phy(struct mii_bus *bus, { return -EINVAL; } + +static inline int fwnode_phy_register_fixed_link(struct fwnode_handle *fwnode) +{ + return -ENODEV; +} + +static inline void fwnode_phy_deregister_fixed_link(struct fwnode_handle *fwnode) +{ +} + +static inline bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode) +{ + return false; +} #endif #endif /* __LINUX_FWNODE_MDIO_H */ diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index b782c35c4ac1..56f57381ae69 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -10,6 +10,7 @@ #include #include #include +#include #include MODULE_AUTHOR("Calvin Johnson "); @@ -185,3 +186,98 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, return rc; } EXPORT_SYMBOL(fwnode_mdiobus_register_phy); + +/* + * fwnode_phy_is_fixed_link() and fwnode_phy_register_fixed_link() must + * support two bindings: + * - the old binding, where 'fixed-link' was a property with 5 + * cells encoding various information about the fixed PHY + * - the new binding, where 'fixed-link' is a sub-node of the + * Ethernet device. + */ +bool fwnode_phy_is_fixed_link(struct fwnode_handle *fwnode) +{ + struct fwnode_handle *fixed_link_node; + const char *managed; + + /* New binding */ + fixed_link_node = fwnode_get_named_child_node(fwnode, "fixed-link"); + if (fixed_link_node) { + fwnode_handle_put(fixed_link_node); + return true; + } + + if (fwnode_property_read_string(fwnode, "managed", &managed) == 0 && + strcmp(managed, "auto") != 0) + return true; + + /* Old binding */ + return fwnode_property_count_u32(fwnode, "fixed-link") == 5; +} +EXPORT_SYMBOL(fwnode_phy_is_fixed_link); + +int fwnode_phy_register_fixed_link(struct fwnode_handle *fwnode) +{ + struct fixed_phy_status status = {}; + struct fwnode_handle *fixed_link_node; + u32 fixed_link_prop[5]; + const char *managed; + int rc; + + if (fwnode_property_read_string(fwnode, "managed", &managed) == 0 && + strcmp(managed, "in-band-status") == 0) { + /* status is zeroed, namely its .link member */ + goto register_phy; + } + + /* New binding */ + fixed_link_node = fwnode_get_named_child_node(fwnode, "fixed-link"); + if (fixed_link_node) { + status.link = 1; + status.duplex = fwnode_property_present(fixed_link_node, + "full-duplex"); + rc = fwnode_property_read_u32(fixed_link_node, "speed", + &status.speed); + if (rc) { + fwnode_handle_put(fixed_link_node); + return rc; + } + status.pause = fwnode_property_present(fixed_link_node, "pause"); + status.asym_pause = fwnode_property_present(fixed_link_node, + "asym-pause"); + fwnode_handle_put(fixed_link_node); + + goto register_phy; + } + + /* Old binding */ + rc = fwnode_property_read_u32_array(fwnode, "fixed-link", fixed_link_prop, + ARRAY_SIZE(fixed_link_prop)); + if (rc) + return rc; + + status.link = 1; + status.duplex = fixed_link_prop[1]; + status.speed = fixed_link_prop[2]; + status.pause = fixed_link_prop[3]; + status.asym_pause = fixed_link_prop[4]; + +register_phy: + return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, fwnode)); +} +EXPORT_SYMBOL(fwnode_phy_register_fixed_link); + +void fwnode_phy_deregister_fixed_link(struct fwnode_handle *fwnode) +{ + struct phy_device *phydev; + + phydev = fwnode_phy_find_device(fwnode); + if (!phydev) + return; + + fixed_phy_unregister(phydev); + + put_device(&phydev->mdio.dev); /* fwnode_phy_find_device() */ + phy_device_free(phydev); /* fixed_phy_register() */ +} +EXPORT_SYMBOL(fwnode_phy_deregister_fixed_link); diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index ba22b7110cdc..e6b3a4e251a1 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -353,91 +353,18 @@ EXPORT_SYMBOL(of_phy_get_and_connect); */ bool of_phy_is_fixed_link(struct device_node *np) { - struct device_node *dn; - int len, err; - const char *managed; - - /* New binding */ - dn = of_get_child_by_name(np, "fixed-link"); - if (dn) { - of_node_put(dn); - return true; - } - - err = of_property_read_string(np, "managed", &managed); - if (err == 0 && strcmp(managed, "auto") != 0) - return true; - - /* Old binding */ - if (of_get_property(np, "fixed-link", &len) && - len == (5 * sizeof(__be32))) - return true; - - return false; + return fwnode_phy_is_fixed_link(of_fwnode_handle(np)); } EXPORT_SYMBOL(of_phy_is_fixed_link); int of_phy_register_fixed_link(struct device_node *np) { - struct fixed_phy_status status = {}; - struct device_node *fixed_link_node; - u32 fixed_link_prop[5]; - const char *managed; - - if (of_property_read_string(np, "managed", &managed) == 0 && - strcmp(managed, "in-band-status") == 0) { - /* status is zeroed, namely its .link member */ - goto register_phy; - } - - /* New binding */ - fixed_link_node = of_get_child_by_name(np, "fixed-link"); - if (fixed_link_node) { - status.link = 1; - status.duplex = of_property_read_bool(fixed_link_node, - "full-duplex"); - if (of_property_read_u32(fixed_link_node, "speed", - &status.speed)) { - of_node_put(fixed_link_node); - return -EINVAL; - } - status.pause = of_property_read_bool(fixed_link_node, "pause"); - status.asym_pause = of_property_read_bool(fixed_link_node, - "asym-pause"); - of_node_put(fixed_link_node); - - goto register_phy; - } - - /* Old binding */ - if (of_property_read_u32_array(np, "fixed-link", fixed_link_prop, - ARRAY_SIZE(fixed_link_prop)) == 0) { - status.link = 1; - status.duplex = fixed_link_prop[1]; - status.speed = fixed_link_prop[2]; - status.pause = fixed_link_prop[3]; - status.asym_pause = fixed_link_prop[4]; - goto register_phy; - } - - return -ENODEV; - -register_phy: - return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, of_fwnode_handle(np))); + return fwnode_phy_register_fixed_link(of_fwnode_handle(np)); } EXPORT_SYMBOL(of_phy_register_fixed_link); void of_phy_deregister_fixed_link(struct device_node *np) { - struct phy_device *phydev; - - phydev = of_phy_find_device(np); - if (!phydev) - return; - - fixed_phy_unregister(phydev); - - put_device(&phydev->mdio.dev); /* of_phy_find_device() */ - phy_device_free(phydev); /* fixed_phy_register() */ + fwnode_phy_deregister_fixed_link(of_fwnode_handle(np)); } EXPORT_SYMBOL(of_phy_deregister_fixed_link); From patchwork Mon Jan 16 17:34:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643448 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 9C18BC67871 for ; Mon, 16 Jan 2023 17:53:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233847AbjAPRxD (ORCPT ); Mon, 16 Jan 2023 12:53:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234858AbjAPRwe (ORCPT ); Mon, 16 Jan 2023 12:52:34 -0500 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3E3CB3B64D for ; Mon, 16 Jan 2023 09:35:03 -0800 (PST) Received: by mail-lj1-x22c.google.com with SMTP id bn6so30688213ljb.13 for ; Mon, 16 Jan 2023 09:35:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2mmk9wI3+C8ssmxR+DpT3SDJM6QGPsI0pDiXXE/Ux+4=; b=mVSJR9izrtn8REjhj4XqnwcyPGABR2JM6lKBsAZbCEjbjsHURusNR09T5nKNDVhIIZ NTaYjBj8l7WG9pkdbHHGCOYl0yrqUES+kElLjeaXPo6GSTje2genBqcuhWjgaVRnhPx8 yatCz72qgWRumx2nfT0Lp1DOwoSBLsXRFH9AT9M4V8+1DbKEfzxPACN97T+sNzAsVW4M Oc8g7B1djvHKggbrz+Fy6zgU0JlosLxCnMFdyltQY46tggiYUnG58NrzpRHbKJuHxLBQ mA3Dd5UCy9v3CLLuIA6r6tPXn8HvRs+tuv385DmyMQyldDQUruLpcDL+NYRTATsXWo+b uW/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2mmk9wI3+C8ssmxR+DpT3SDJM6QGPsI0pDiXXE/Ux+4=; b=tJa6EEHGeRX5+uzp3EUoxljTJ+IebXj5IK8ybwXOWVEIAB6CdQL9PaYNaHrMIWfydN imklUrTLTJm5/flspyyJYi8Nf68qAo5M9+FnjLunLzPnYgYgqvFbSt7pa0baUUZKxIeM sl3SYXSC5rA4xfCtkzLWQriQ/QG93yoW/idr94GOCIPmvrwsUEVLCYCS5S26oYIJiHOj 0Fvti7q+B6Xim6PR1fTW5/gaQyyxh6C1HT8F7A9evaRID0b5GaBqrOO2SjGT2veZ3rDt dV3Tl4BIzHjOKU4HgwFpV75ayRd5mC8/6HfxpctDxSvApA4Yw/M6WkOxopcEK5Ei/kbK 5dTw== X-Gm-Message-State: AFqh2kqkA6THzWGQSRBc0x1dOBrABFqt3UM3BV4yWBlBfOYErJhqZ1NQ 9OG7DCCuR6WYqifxU2jXl4VMDw== X-Google-Smtp-Source: AMrXdXss8H0gbWs28XqQtnJ2QyT/hDi+CE2b0WlWVk57pQf05wIO5SbYvmxXHAzd6auZ7WOrCC7Qeg== X-Received: by 2002:a2e:5cd:0:b0:282:160b:e359 with SMTP id 196-20020a2e05cd000000b00282160be359mr166385ljf.23.1673890501403; Mon, 16 Jan 2023 09:35:01 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.35.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:35:00 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 3/8] net: dsa: switch to device_/fwnode_ APIs Date: Mon, 16 Jan 2023 18:34:15 +0100 Message-Id: <20230116173420.1278704-4-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org In order to support both DT and ACPI in future, modify the generic DSA code to use device_/fwnode_ equivalent routines. Drop using port's 'dn' field and use only fwnode - update all dependent drivers. Because support for more generic fwnode is added, replace '_of' suffix with '_fw' in related routines. No functional change is introduced by this patch. Signed-off-by: Marcin Wojtas --- include/net/dsa.h | 2 +- net/dsa/port.h | 4 +- drivers/net/dsa/mt7530.c | 6 +- drivers/net/dsa/mv88e6xxx/chip.c | 16 +-- drivers/net/dsa/qca/qca8k-8xxx.c | 2 +- drivers/net/dsa/realtek/rtl8365mb.c | 2 +- net/dsa/dsa.c | 117 +++++++++++--------- net/dsa/port.c | 85 +++++++------- net/dsa/slave.c | 7 +- 9 files changed, 120 insertions(+), 121 deletions(-) diff --git a/include/net/dsa.h b/include/net/dsa.h index 96086289aa9b..b933b88ace78 100644 --- a/include/net/dsa.h +++ b/include/net/dsa.h @@ -300,7 +300,7 @@ struct dsa_port { u8 setup:1; - struct device_node *dn; + struct fwnode_handle *fwnode; unsigned int ageing_time; struct dsa_bridge *bridge; diff --git a/net/dsa/port.h b/net/dsa/port.h index 9c218660d223..5037b8be982e 100644 --- a/net/dsa/port.h +++ b/net/dsa/port.h @@ -101,8 +101,8 @@ int dsa_port_mrp_del_ring_role(const struct dsa_port *dp, const struct switchdev_obj_ring_role_mrp *mrp); int dsa_port_phylink_create(struct dsa_port *dp); void dsa_port_phylink_destroy(struct dsa_port *dp); -int dsa_shared_port_link_register_of(struct dsa_port *dp); -void dsa_shared_port_link_unregister_of(struct dsa_port *dp); +int dsa_shared_port_link_register_fw(struct dsa_port *dp); +void dsa_shared_port_link_unregister_fw(struct dsa_port *dp); int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr); void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr); int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast); diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 908fa89444c9..35c4c71216fe 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2235,8 +2235,10 @@ mt7530_setup(struct dsa_switch *ds) if (!dsa_is_unused_port(ds, 5)) { priv->p5_intf_sel = P5_INTF_SEL_GMAC5; - ret = of_get_phy_mode(dsa_to_port(ds, 5)->dn, &interface); - if (ret && ret != -ENODEV) + ret = fwnode_get_phy_mode(dsa_to_port(ds, 5)->fwnode); + if (ret >= 0) + interface = ret; + else if (ret != -ENODEV) return ret; } else { /* Scan the ethernet nodes. look for GMAC1, lookup used phy */ diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 1168ea75f5f5..6731597bded0 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -3285,7 +3285,7 @@ static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port) static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) { - struct device_node *phy_handle = NULL; + struct fwnode_handle *phy_handle = NULL; struct dsa_switch *ds = chip->ds; phy_interface_t mode; struct dsa_port *dp; @@ -3509,18 +3509,14 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port) if (chip->info->ops->serdes_set_tx_amplitude) { if (dp) - phy_handle = of_parse_phandle(dp->dn, "phy-handle", 0); + phy_handle = fwnode_find_reference(dp->fwnode, "phy-handle", 0); - if (phy_handle && !of_property_read_u32(phy_handle, - "tx-p2p-microvolt", - &tx_amp)) + if (!fwnode_property_read_u32(phy_handle, "tx-p2p-microvolt", &tx_amp)) err = chip->info->ops->serdes_set_tx_amplitude(chip, port, tx_amp); - if (phy_handle) { - of_node_put(phy_handle); - if (err) - return err; - } + fwnode_handle_put(phy_handle); + if (err) + return err; } /* Port based VLAN map: give each port the same default address diff --git a/drivers/net/dsa/qca/qca8k-8xxx.c b/drivers/net/dsa/qca/qca8k-8xxx.c index 2f224b166bbb..6ceb9478309f 100644 --- a/drivers/net/dsa/qca/qca8k-8xxx.c +++ b/drivers/net/dsa/qca/qca8k-8xxx.c @@ -1088,7 +1088,7 @@ qca8k_parse_port_config(struct qca8k_priv *priv) continue; dp = dsa_to_port(priv->ds, port); - port_dn = dp->dn; + port_dn = to_of_node(dp->fwnode); cpu_port_index++; if (!of_device_is_available(port_dn)) diff --git a/drivers/net/dsa/realtek/rtl8365mb.c b/drivers/net/dsa/realtek/rtl8365mb.c index da31d8b839ac..d61da012451f 100644 --- a/drivers/net/dsa/realtek/rtl8365mb.c +++ b/drivers/net/dsa/realtek/rtl8365mb.c @@ -887,7 +887,7 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_priv *priv, int port, return -ENODEV; dp = dsa_to_port(priv->ds, port); - dn = dp->dn; + dn = to_of_node(dp->fwnode); /* Set the RGMII TX/RX delay * diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index e5f156940c67..d1ca3bb03858 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -273,12 +273,12 @@ static void dsa_tree_put(struct dsa_switch_tree *dst) } static struct dsa_port *dsa_tree_find_port_by_node(struct dsa_switch_tree *dst, - struct device_node *dn) + struct fwnode_handle *fwnode) { struct dsa_port *dp; list_for_each_entry(dp, &dst->ports, list) - if (dp->dn == dn) + if (dp->fwnode == fwnode) return dp; return NULL; @@ -314,14 +314,13 @@ static bool dsa_port_setup_routing_table(struct dsa_port *dp) { struct dsa_switch *ds = dp->ds; struct dsa_switch_tree *dst = ds->dst; - struct device_node *dn = dp->dn; struct of_phandle_iterator it; struct dsa_port *link_dp; struct dsa_link *dl; int err; - of_for_each_phandle(&it, err, dn, "link", NULL, 0) { - link_dp = dsa_tree_find_port_by_node(dst, it.node); + of_for_each_phandle(&it, err, to_of_node(dp->fwnode), "link", NULL, 0) { + link_dp = dsa_tree_find_port_by_node(dst, of_fwnode_handle(it.node)); if (!link_dp) { of_node_put(it.node); return false; @@ -366,14 +365,17 @@ static struct dsa_port *dsa_tree_find_first_cpu(struct dsa_switch_tree *dst) struct net_device *dsa_tree_find_first_master(struct dsa_switch_tree *dst) { - struct device_node *ethernet; + struct fwnode_handle *ethernet; struct net_device *master; struct dsa_port *cpu_dp; cpu_dp = dsa_tree_find_first_cpu(dst); - ethernet = of_parse_phandle(cpu_dp->dn, "ethernet", 0); - master = of_find_net_device_by_node(ethernet); - of_node_put(ethernet); + ethernet = fwnode_find_reference(cpu_dp->fwnode, "ethernet", 0); + if (IS_ERR(ethernet)) + return NULL; + + master = of_find_net_device_by_node(to_of_node(ethernet)); + fwnode_handle_put(ethernet); return master; } @@ -457,8 +459,8 @@ static int dsa_port_setup(struct dsa_port *dp) dsa_port_disable(dp); break; case DSA_PORT_TYPE_CPU: - if (dp->dn) { - err = dsa_shared_port_link_register_of(dp); + if (dp->fwnode) { + err = dsa_shared_port_link_register_fw(dp); if (err) break; dsa_port_link_registered = true; @@ -475,8 +477,8 @@ static int dsa_port_setup(struct dsa_port *dp) break; case DSA_PORT_TYPE_DSA: - if (dp->dn) { - err = dsa_shared_port_link_register_of(dp); + if (dp->fwnode) { + err = dsa_shared_port_link_register_fw(dp); if (err) break; dsa_port_link_registered = true; @@ -493,7 +495,7 @@ static int dsa_port_setup(struct dsa_port *dp) break; case DSA_PORT_TYPE_USER: - of_get_mac_address(dp->dn, dp->mac); + fwnode_get_mac_address(dp->fwnode, dp->mac); err = dsa_slave_create(dp); break; } @@ -501,7 +503,7 @@ static int dsa_port_setup(struct dsa_port *dp) if (err && dsa_port_enabled) dsa_port_disable(dp); if (err && dsa_port_link_registered) - dsa_shared_port_link_unregister_of(dp); + dsa_shared_port_link_unregister_fw(dp); if (err) { dsa_port_devlink_teardown(dp); return err; @@ -522,13 +524,13 @@ static void dsa_port_teardown(struct dsa_port *dp) break; case DSA_PORT_TYPE_CPU: dsa_port_disable(dp); - if (dp->dn) - dsa_shared_port_link_unregister_of(dp); + if (dp->fwnode) + dsa_shared_port_link_unregister_fw(dp); break; case DSA_PORT_TYPE_DSA: dsa_port_disable(dp); - if (dp->dn) - dsa_shared_port_link_unregister_of(dp); + if (dp->fwnode) + dsa_shared_port_link_unregister_fw(dp); break; case DSA_PORT_TYPE_USER: if (dp->slave) { @@ -603,7 +605,7 @@ static void dsa_switch_teardown_tag_protocol(struct dsa_switch *ds) static int dsa_switch_setup(struct dsa_switch *ds) { - struct device_node *dn; + struct fwnode_handle *fwnode; int err; if (ds->setup) @@ -643,10 +645,10 @@ static int dsa_switch_setup(struct dsa_switch *ds) dsa_slave_mii_bus_init(ds); - dn = of_get_child_by_name(ds->dev->of_node, "mdio"); + fwnode = device_get_named_child_node(ds->dev, "mdio"); - err = of_mdiobus_register(ds->slave_mii_bus, dn); - of_node_put(dn); + err = of_mdiobus_register(ds->slave_mii_bus, to_of_node(fwnode)); + fwnode_handle_put(fwnode); if (err < 0) goto free_slave_mii_bus; } @@ -1216,24 +1218,31 @@ static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, return 0; } -static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) +static int dsa_port_parse_fw(struct dsa_port *dp, struct fwnode_handle *fwnode) { - struct device_node *ethernet = of_parse_phandle(dn, "ethernet", 0); - const char *name = of_get_property(dn, "label", NULL); - bool link = of_property_read_bool(dn, "link"); + struct fwnode_handle *ethernet = fwnode_find_reference(fwnode, "ethernet", 0); + bool link = fwnode_property_present(fwnode, "link"); + const char *name; + int ret; - dp->dn = dn; + fwnode_property_read_string(fwnode, "label", &name); - if (ethernet) { + dp->fwnode = fwnode; + + if (!IS_ERR(ethernet)) { struct net_device *master; const char *user_protocol; - master = of_find_net_device_by_node(ethernet); - of_node_put(ethernet); + master = of_find_net_device_by_node(to_of_node(ethernet)); + fwnode_handle_put(ethernet); if (!master) return -EPROBE_DEFER; - user_protocol = of_get_property(dn, "dsa-tag-protocol", NULL); + ret = fwnode_property_read_string(fwnode, "dsa-tag-protocol", + &user_protocol); + if (ret) + user_protocol = NULL; + return dsa_port_parse_cpu(dp, master, user_protocol); } @@ -1243,61 +1252,61 @@ static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) return dsa_port_parse_user(dp, name); } -static int dsa_switch_parse_ports_of(struct dsa_switch *ds, - struct device_node *dn) +static int dsa_switch_parse_ports_fw(struct dsa_switch *ds, + struct fwnode_handle *fwnode) { - struct device_node *ports, *port; + struct fwnode_handle *ports, *port; struct dsa_port *dp; int err = 0; u32 reg; - ports = of_get_child_by_name(dn, "ports"); + ports = fwnode_get_named_child_node(fwnode, "ports"); if (!ports) { /* The second possibility is "ethernet-ports" */ - ports = of_get_child_by_name(dn, "ethernet-ports"); + ports = fwnode_get_named_child_node(fwnode, "ethernet-ports"); if (!ports) { dev_err(ds->dev, "no ports child node found\n"); return -EINVAL; } } - for_each_available_child_of_node(ports, port) { - err = of_property_read_u32(port, "reg", ®); + fwnode_for_each_available_child_node(ports, port) { + err = fwnode_property_read_u32(port, "reg", ®); if (err) { - of_node_put(port); + fwnode_handle_put(port); goto out_put_node; } if (reg >= ds->num_ports) { dev_err(ds->dev, "port %pOF index %u exceeds num_ports (%u)\n", port, reg, ds->num_ports); - of_node_put(port); + fwnode_handle_put(port); err = -EINVAL; goto out_put_node; } dp = dsa_to_port(ds, reg); - err = dsa_port_parse_of(dp, port); + err = dsa_port_parse_fw(dp, port); if (err) { - of_node_put(port); + fwnode_handle_put(port); goto out_put_node; } } out_put_node: - of_node_put(ports); + fwnode_handle_put(ports); return err; } -static int dsa_switch_parse_member_of(struct dsa_switch *ds, - struct device_node *dn) +static int dsa_switch_parse_member_fw(struct dsa_switch *ds, + struct fwnode_handle *fwnode) { u32 m[2] = { 0, 0 }; int sz; /* Don't error out if this optional property isn't found */ - sz = of_property_read_variable_u32_array(dn, "dsa,member", m, 2, 2); + sz = fwnode_property_read_u32_array(fwnode, "dsa,member", m, 2); if (sz < 0 && sz != -EINVAL) return sz; @@ -1334,11 +1343,11 @@ static int dsa_switch_touch_ports(struct dsa_switch *ds) return 0; } -static int dsa_switch_parse_of(struct dsa_switch *ds, struct device_node *dn) +static int dsa_switch_parse_fw(struct dsa_switch *ds, struct fwnode_handle *fwnode) { int err; - err = dsa_switch_parse_member_of(ds, dn); + err = dsa_switch_parse_member_fw(ds, fwnode); if (err) return err; @@ -1346,7 +1355,7 @@ static int dsa_switch_parse_of(struct dsa_switch *ds, struct device_node *dn) if (err) return err; - return dsa_switch_parse_ports_of(ds, dn); + return dsa_switch_parse_ports_fw(ds, fwnode); } static int dev_is_class(struct device *dev, void *class) @@ -1475,20 +1484,20 @@ static int dsa_switch_probe(struct dsa_switch *ds) { struct dsa_switch_tree *dst; struct dsa_chip_data *pdata; - struct device_node *np; + struct fwnode_handle *fwnode; int err; if (!ds->dev) return -ENODEV; pdata = ds->dev->platform_data; - np = ds->dev->of_node; + fwnode = dev_fwnode(ds->dev); if (!ds->num_ports) return -EINVAL; - if (np) { - err = dsa_switch_parse_of(ds, np); + if (fwnode) { + err = dsa_switch_parse_fw(ds, fwnode); if (err) dsa_switch_release_ports(ds); } else if (pdata) { diff --git a/net/dsa/port.c b/net/dsa/port.c index 67ad1adec2a2..8f5793f87f40 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -6,11 +6,10 @@ * Vivien Didelot */ +#include #include #include #include -#include -#include #include "dsa.h" #include "port.h" @@ -1535,20 +1534,20 @@ void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp, static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp) { - struct device_node *phy_dn; + struct fwnode_handle *phy_handle; struct phy_device *phydev; - phy_dn = of_parse_phandle(dp->dn, "phy-handle", 0); - if (!phy_dn) + phy_handle = fwnode_find_reference(dp->fwnode, "phy-handle", 0); + if (IS_ERR(phy_handle)) return NULL; - phydev = of_phy_find_device(phy_dn); + phydev = fwnode_phy_find_device(phy_handle); if (!phydev) { - of_node_put(phy_dn); + fwnode_handle_put(phy_handle); return ERR_PTR(-EPROBE_DEFER); } - of_node_put(phy_dn); + fwnode_handle_put(phy_handle); return phydev; } @@ -1678,12 +1677,11 @@ static const struct phylink_mac_ops dsa_port_phylink_mac_ops = { int dsa_port_phylink_create(struct dsa_port *dp) { struct dsa_switch *ds = dp->ds; - phy_interface_t mode; struct phylink *pl; - int err; + int mode; - err = of_get_phy_mode(dp->dn, &mode); - if (err) + mode = fwnode_get_phy_mode(dp->fwnode); + if (mode < 0) mode = PHY_INTERFACE_MODE_NA; /* Presence of phylink_mac_link_state or phylink_mac_an_restart is @@ -1696,7 +1694,7 @@ int dsa_port_phylink_create(struct dsa_port *dp) if (ds->ops->phylink_get_caps) ds->ops->phylink_get_caps(ds, dp->index, &dp->pl_config); - pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn), + pl = phylink_create(&dp->pl_config, dp->fwnode, mode, &dsa_port_phylink_mac_ops); if (IS_ERR(pl)) { pr_err("error creating PHYLINK: %ld\n", PTR_ERR(pl)); @@ -1714,7 +1712,7 @@ void dsa_port_phylink_destroy(struct dsa_port *dp) dp->pl = NULL; } -static int dsa_shared_port_setup_phy_of(struct dsa_port *dp, bool enable) +static int dsa_shared_port_setup_phy_fw(struct dsa_port *dp, bool enable) { struct dsa_switch *ds = dp->ds; struct phy_device *phydev; @@ -1752,16 +1750,15 @@ static int dsa_shared_port_setup_phy_of(struct dsa_port *dp, bool enable) return err; } -static int dsa_shared_port_fixed_link_register_of(struct dsa_port *dp) +static int dsa_shared_port_fixed_link_register_fw(struct dsa_port *dp) { - struct device_node *dn = dp->dn; struct dsa_switch *ds = dp->ds; struct phy_device *phydev; int port = dp->index; - phy_interface_t mode; + int mode; int err; - err = of_phy_register_fixed_link(dn); + err = fwnode_phy_register_fixed_link(dp->fwnode); if (err) { dev_err(ds->dev, "failed to register the fixed PHY of port %d\n", @@ -1769,10 +1766,10 @@ static int dsa_shared_port_fixed_link_register_of(struct dsa_port *dp) return err; } - phydev = of_phy_find_device(dn); + phydev = fwnode_phy_find_device(dp->fwnode); - err = of_get_phy_mode(dn, &mode); - if (err) + mode = fwnode_get_phy_mode(dp->fwnode); + if (mode < 0) mode = PHY_INTERFACE_MODE_NA; phydev->interface = mode; @@ -1789,7 +1786,6 @@ static int dsa_shared_port_fixed_link_register_of(struct dsa_port *dp) static int dsa_shared_port_phylink_register(struct dsa_port *dp) { struct dsa_switch *ds = dp->ds; - struct device_node *port_dn = dp->dn; int err; dp->pl_config.dev = ds->dev; @@ -1799,7 +1795,7 @@ static int dsa_shared_port_phylink_register(struct dsa_port *dp) if (err) return err; - err = phylink_of_phy_connect(dp->pl, port_dn, 0); + err = phylink_fwnode_phy_connect(dp->pl, dp->fwnode, 0); if (err && err != -ENODEV) { pr_err("could not attach to PHY: %d\n", err); goto err_phy_connect; @@ -1926,51 +1922,50 @@ static const char * const dsa_switches_apply_workarounds[] = { NULL, }; -static void dsa_shared_port_validate_of(struct dsa_port *dp, +static void dsa_shared_port_validate_fw(struct dsa_port *dp, bool *missing_phy_mode, bool *missing_link_description) { - struct device_node *dn = dp->dn, *phy_np; + struct fwnode_handle *phy_handle; struct dsa_switch *ds = dp->ds; - phy_interface_t mode; *missing_phy_mode = false; *missing_link_description = false; - if (of_get_phy_mode(dn, &mode)) { + if (fwnode_get_phy_mode(dp->fwnode) < 0) { *missing_phy_mode = true; dev_err(ds->dev, - "OF node %pOF of %s port %d lacks the required \"phy-mode\" property\n", - dn, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index); + "FW node %p of %s port %d lacks the required \"phy-mode\" property\n", + dp->fwnode, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index); } - /* Note: of_phy_is_fixed_link() also returns true for + /* Note: fwnode_phy_is_fixed_link() also returns true for * managed = "in-band-status" */ - if (of_phy_is_fixed_link(dn)) + if (fwnode_phy_is_fixed_link(dp->fwnode)) return; - phy_np = of_parse_phandle(dn, "phy-handle", 0); - if (phy_np) { - of_node_put(phy_np); + phy_handle = fwnode_find_reference(dp->fwnode, "phy-handle", 0); + if (!IS_ERR(phy_handle)) { + fwnode_handle_put(phy_handle); return; } *missing_link_description = true; dev_err(ds->dev, - "OF node %pOF of %s port %d lacks the required \"phy-handle\", \"fixed-link\" or \"managed\" properties\n", - dn, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index); + "FW node %p of %s port %d lacks the required \"phy-handle\", \"fixed-link\" or \"managed\" properties\n", + dp->fwnode, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index); } -int dsa_shared_port_link_register_of(struct dsa_port *dp) +int dsa_shared_port_link_register_fw(struct dsa_port *dp) { struct dsa_switch *ds = dp->ds; bool missing_link_description; bool missing_phy_mode; int port = dp->index; - dsa_shared_port_validate_of(dp, &missing_phy_mode, + dsa_shared_port_validate_fw(dp, &missing_phy_mode, &missing_link_description); if ((missing_phy_mode || missing_link_description) && @@ -1996,13 +1991,13 @@ int dsa_shared_port_link_register_of(struct dsa_port *dp) dev_warn(ds->dev, "Using legacy PHYLIB callbacks. Please migrate to PHYLINK!\n"); - if (of_phy_is_fixed_link(dp->dn)) - return dsa_shared_port_fixed_link_register_of(dp); + if (fwnode_phy_is_fixed_link(dp->fwnode)) + return dsa_shared_port_fixed_link_register_fw(dp); else - return dsa_shared_port_setup_phy_of(dp, true); + return dsa_shared_port_setup_phy_fw(dp, true); } -void dsa_shared_port_link_unregister_of(struct dsa_port *dp) +void dsa_shared_port_link_unregister_fw(struct dsa_port *dp) { struct dsa_switch *ds = dp->ds; @@ -2014,10 +2009,10 @@ void dsa_shared_port_link_unregister_of(struct dsa_port *dp) return; } - if (of_phy_is_fixed_link(dp->dn)) - of_phy_deregister_fixed_link(dp->dn); + if (fwnode_phy_is_fixed_link(dp->fwnode)) + fwnode_phy_deregister_fixed_link(dp->fwnode); else - dsa_shared_port_setup_phy_of(dp, false); + dsa_shared_port_setup_phy_fw(dp, false); } int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr) diff --git a/net/dsa/slave.c b/net/dsa/slave.c index aab79c355224..fb150a543c30 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c @@ -10,8 +10,6 @@ #include #include #include -#include -#include #include #include #include @@ -2309,7 +2307,6 @@ static int dsa_slave_phy_connect(struct net_device *slave_dev, int addr, static int dsa_slave_phy_setup(struct net_device *slave_dev) { struct dsa_port *dp = dsa_slave_to_port(slave_dev); - struct device_node *port_dn = dp->dn; struct dsa_switch *ds = dp->ds; u32 phy_flags = 0; int ret; @@ -2333,7 +2330,7 @@ static int dsa_slave_phy_setup(struct net_device *slave_dev) if (ds->ops->get_phy_flags) phy_flags = ds->ops->get_phy_flags(ds, dp->index); - ret = phylink_of_phy_connect(dp->pl, port_dn, phy_flags); + ret = phylink_fwnode_phy_connect(dp->pl, dp->fwnode, phy_flags); if (ret == -ENODEV && ds->slave_mii_bus) { /* We could not connect to a designated PHY or SFP, so try to * use the switch internal MDIO bus instead @@ -2455,7 +2452,7 @@ int dsa_slave_create(struct dsa_port *port) SET_NETDEV_DEV(slave_dev, port->ds->dev); SET_NETDEV_DEVLINK_PORT(slave_dev, &port->devlink_port); - slave_dev->dev.of_node = port->dn; + device_set_node(&slave_dev->dev, port->fwnode); slave_dev->vlan_features = master->vlan_features; p = netdev_priv(slave_dev); From patchwork Mon Jan 16 17:34:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643118 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 7D441C677F1 for ; Mon, 16 Jan 2023 17:53:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235146AbjAPRxC (ORCPT ); Mon, 16 Jan 2023 12:53:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234976AbjAPRwb (ORCPT ); Mon, 16 Jan 2023 12:52:31 -0500 Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C4692B2A3 for ; Mon, 16 Jan 2023 09:35:03 -0800 (PST) Received: by mail-lj1-x235.google.com with SMTP id s25so30712166lji.2 for ; Mon, 16 Jan 2023 09:35:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WLkKdr7pDQEIzmgkyKtN1Zu++zCyw4Keu9Km6S3sT2o=; b=QasTzb8h2vrOzkCrftuDbLS+D57mrkSyDJFNmvhtJg61QCpXBah5MQQ/klFT+Jr44m OfExarCYmScCqot8/2QoF2Kn6hockeWUu27BKBHaw+Vw6fz+Jow6YpMOSiHlDgxC7qhP EM/wOHX1PS88OTZXj6uG2qMVwZFi3u37IBsUODw2sJtv45GymLllUGbqdIyHat9jZEtp 5zGyuiyAQFvvbErrOfKVgcXcmSh4wE+9Wf+/et6R0cs1BNYNaTQaqu1mJphmFK7n2v7q InbhxENc/mnmZeHgZx7q7HwnK4+wdwGzz+9hvYhYU6h+LbB+kKtF52ZSeZA/SVyzh2hW tN6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WLkKdr7pDQEIzmgkyKtN1Zu++zCyw4Keu9Km6S3sT2o=; b=3OoR8AdUmj1jQFQQaVxmCgzFMSYWmZIHEQWR3RYxVh5k/O0NWepjjhjhRrCsRYy7hF ojcCrAGhAeq76699do28G2wTM8ScT9tJA8SKH8ChbwCpl3HPxioAhJTYB1n9WYEdz/zo 0sdCCbm8kQRtJPvsginy0A83GJaAfmbLNMcRtXVMF7dfLgtB9OCcUMEXKy/BO+RXsjwo ONFMEO8oQexiezgkQvj5wdFNvkE+FDtApRvK6Xzd52Nh3qjZUjQJizy8rhcrHqjDM5As KO2Q1QXD1Uzew8TC2LhsVzSYF2tXMr6EdkHxbDYJMQ16+LMir30tFuhElHdIQBPTAvOj w8ZA== X-Gm-Message-State: AFqh2koKNti/pr3mzC+3Q8Psidxuov71dOTIVCFK3AEreC2zROrkIofU r/6dAEr5psg0qE28rUTI2f+quA== X-Google-Smtp-Source: AMrXdXsY9dU88GrMUZ0keyqwQPbzPga4V1dJtLnUYV90CFWzYZr4I98PrEX0dJGG50/qWJssb6/MCA== X-Received: by 2002:a2e:994f:0:b0:281:771:e1cd with SMTP id r15-20020a2e994f000000b002810771e1cdmr3381416ljj.33.1673890502691; Mon, 16 Jan 2023 09:35:02 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.35.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:35:02 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 4/8] net: mvpp2: initialize port fwnode pointer Date: Mon, 16 Jan 2023 18:34:16 +0100 Message-Id: <20230116173420.1278704-5-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org As a preparation to switch the DSA subsystem from using of_find_net_device_by_node() to its more generic fwnode_ equivalent, and later to allow ACPI description, update the port's device structure also with its fwnode pointer. Signed-off-by: Marcin Wojtas --- drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 5f89fcec07b1..a25e90791700 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -6884,7 +6884,7 @@ static int mvpp2_port_probe(struct platform_device *pdev, dev->min_mtu = ETH_MIN_MTU; /* 9704 == 9728 - 20 and rounding to 8 */ dev->max_mtu = MVPP2_BM_JUMBO_PKT_SIZE; - dev->dev.of_node = port_node; + device_set_node(&dev->dev, port_fwnode); port->pcs_gmac.ops = &mvpp2_phylink_gmac_pcs_ops; port->pcs_xlg.ops = &mvpp2_phylink_xlg_pcs_ops; From patchwork Mon Jan 16 17:34:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643117 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 BD10FC54EBE for ; Mon, 16 Jan 2023 17:53:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235151AbjAPRxE (ORCPT ); Mon, 16 Jan 2023 12:53:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38598 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235103AbjAPRwk (ORCPT ); Mon, 16 Jan 2023 12:52:40 -0500 Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F42230EA7 for ; Mon, 16 Jan 2023 09:35:05 -0800 (PST) Received: by mail-lj1-x235.google.com with SMTP id y19so9389151ljq.7 for ; Mon, 16 Jan 2023 09:35:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t7F9JKouL1KurTO0QVKHN8g/5zAESWUg12UOdA+LKsI=; b=E3DYP0epTmdQaBr8PG3Lc8mLskVrmA2L1g1uosAju1bFb9Zd1/cbdiapQ5fFkaSZWK o6rwyTvWmoqnqO3GQ/PewcCOeU0+EVt2OCdA60ZsN2J+CeH1ab2BXc3aMXbO3uUsfHzx qv2fyovh8SRghPRZL80Urm0MOg9l7NaqDEA9Wj0/szZhsXkat75oRTQwgH4S2taaVfvI ye2rM+2rYjemoac3jVmVgsJM7q93qCrMpk1DijXEctb18ivK5LdNH+j1ll+sZnNopfVw p5jf7bQUsXQ7jDJbMKnRbGzaygpSujEZUXF/8g/SGPq88bZcs42LLCGQMTgOI04QcHju UK2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t7F9JKouL1KurTO0QVKHN8g/5zAESWUg12UOdA+LKsI=; b=VcW6COd/uFFjuXQoojTAYkRZ1BHPuBGElJ4TTw5aitvVbFXcG5vxFy0FZJz1z3ompe rGHcapBj7jIFdMaaDDvR7uVWZaqsk/76Bv4XwNquek9SgFk1sIOr35U32X8vV+HeiV5E C8400FCza0rVuF1Zffw2zpXJEEek9AXpgVFbySHU79E0LAVG7+iWHB+LqbUvSS1zjeSN jRarvS4CHj7EdLOsdfyoN1xv9HHmvqw9zciN1YRx0BX5Tj5FwdrWWZoS2X7VzSZ0ebMz nzsvsJEI/H/5JXiKMQbZVM21o+6EhINlqRmWKF/rPu9U8Dmz7p1QLMhu/cIyHxsRAK8O HkvA== X-Gm-Message-State: AFqh2kqT7Q129d9Z+a1OsRY5VRUiwXIdfstK84wDHHRygpPCfwsdt9oy s1Bb8FHfFUuC/907RjzIIBRu4w== X-Google-Smtp-Source: AMrXdXuUnMtiRTBXJ6Nfs4XBmV3kM8wxIrl3j8mU01006aaUz85HcnPiZoQhJ+bNzRNdkZ6kmD/RtQ== X-Received: by 2002:a2e:90c7:0:b0:28b:77ce:f88b with SMTP id o7-20020a2e90c7000000b0028b77cef88bmr180131ljg.8.1673890504000; Mon, 16 Jan 2023 09:35:04 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.35.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:35:03 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 5/8] device property: introduce fwnode_find_parent_dev_match Date: Mon, 16 Jan 2023 18:34:17 +0100 Message-Id: <20230116173420.1278704-6-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Add a new generic routine fwnode_find_parent_dev_match that can be used e.g. as a callback for class_find_device(). It searches for the struct device corresponding to a struct fwnode_handle by iterating over device and its parents. Signed-off-by: Marcin Wojtas Reviewed-by: Andy Shevchenko --- include/linux/property.h | 1 + drivers/base/property.c | 23 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/linux/property.h b/include/linux/property.h index 37179e3abad5..4ae20d7c5103 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -109,6 +109,7 @@ struct device *fwnode_get_next_parent_dev(struct fwnode_handle *fwnode); unsigned int fwnode_count_parents(const struct fwnode_handle *fwn); struct fwnode_handle *fwnode_get_nth_parent(struct fwnode_handle *fwn, unsigned int depth); +int fwnode_find_parent_dev_match(struct device *dev, const void *data); bool fwnode_is_ancestor_of(struct fwnode_handle *ancestor, struct fwnode_handle *child); struct fwnode_handle *fwnode_get_next_child_node( const struct fwnode_handle *fwnode, struct fwnode_handle *child); diff --git a/drivers/base/property.c b/drivers/base/property.c index bbb3e499ff4a..84849d4934cc 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -693,6 +693,29 @@ struct fwnode_handle *fwnode_get_nth_parent(struct fwnode_handle *fwnode, } EXPORT_SYMBOL_GPL(fwnode_get_nth_parent); +/** + * fwnode_find_parent_dev_match - look for a device matching the struct fwnode_handle + * @dev: the struct device to initiate the search + * @data: pointer passed for comparison + * + * Looks up the device structure corresponding with the fwnode by iterating + * over @dev and its parents. + * The routine can be used e.g. as a callback for class_find_device(). + * + * Returns: %1 - match is found + * %0 - match not found + */ +int fwnode_find_parent_dev_match(struct device *dev, const void *data) +{ + for (; dev; dev = dev->parent) { + if (device_match_fwnode(dev, data)) + return 1; + } + + return 0; +} +EXPORT_SYMBOL_GPL(fwnode_find_parent_dev_match); + /** * fwnode_is_ancestor_of - Test if @ancestor is ancestor of @child * @ancestor: Firmware which is tested for being an ancestor From patchwork Mon Jan 16 17:34:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643116 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 02559C677F1 for ; Mon, 16 Jan 2023 17:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233175AbjAPRxj (ORCPT ); Mon, 16 Jan 2023 12:53:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234156AbjAPRwp (ORCPT ); Mon, 16 Jan 2023 12:52:45 -0500 Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF2DE3B65C for ; Mon, 16 Jan 2023 09:35:06 -0800 (PST) Received: by mail-lj1-x236.google.com with SMTP id bn6so30688380ljb.13 for ; Mon, 16 Jan 2023 09:35:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RBUWzvDNamFGOC4iHjWn4zwEVY2qfQxl959ozP5DmYU=; b=U8jkVa+yYUfb1cCQseahksgWBpJukt1b1CaGFB+iPybFlVBjpECij+I2ZT4ata0oK0 kden32bhaDCCV4Ys+ariMdMSE72FyHU0IEYhws6Opat0vHBpv6NKEsiD/qI6mBsbwzxH xvrFiaCNHxPAZwsIlLTynN5pIZSKI0sWGJpTfj8pkM70sTZyXkndUy9JSkKfx0+LUu8z kc77vOo7mHxmgYrLnzVNM3+LOivOjEQ/QvRewiHQfXQrMOK1a+2iXuFUstPp5L1iChbx mOj9XY2URHfAwUdP9gloI3NqSSwb1dkVKGUJCiPaIt/HiVdwXy+7g3rI/ohGj0L6eQ5c 0gxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RBUWzvDNamFGOC4iHjWn4zwEVY2qfQxl959ozP5DmYU=; b=mf3nmx/nW3IgdfokHPDNFRGnDeQMUgJUT6JVz8zzzRLuRIxXfBg/rqW5uj08i4/Oa8 eTAk3tyKieHYd8J9YMKsdihzTwxxK15TVJxXw1WRMpK7W+Qwx+jovx1BR339sQFW+PNL +a7N/DDFVt9lZN22YSMDnCUz7RDlVhkgFr6UL9bPqzytMjCcYwF7wzwSmI5Pmn4VefO8 VnGlf09q0/Ex7NTRkaZJ5+Y1nrYEUPPyv13aGGuCV+/SG2s+mv3iGM5J8mu5d18uz2Ja 0dC1KmwsJ+Ok6jv29JNKuVSk2ZFK+eRU3J8UVGDrMBebTYk7aWarWtjt43BKE3K5XV57 XljQ== X-Gm-Message-State: AFqh2kqqXww6M9LuM+DZY6H8M1HZnuOBhzM3jqDQ5EnQiEShnw28Wq8i yRWcpWltEsOACrktOxq7cyR69g== X-Google-Smtp-Source: AMrXdXtXXluHetGVDb9ihfasqH/ZvEunGrnR+uMrcj5mIztAAZ+L/N9e9JpuKfcIdjjKClxsIUUAbQ== X-Received: by 2002:a2e:960b:0:b0:286:6412:7060 with SMTP id v11-20020a2e960b000000b0028664127060mr185195ljh.15.1673890505233; Mon, 16 Jan 2023 09:35:05 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.35.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:35:04 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 6/8] net: core: switch to fwnode_find_net_device_by_node() Date: Mon, 16 Jan 2023 18:34:18 +0100 Message-Id: <20230116173420.1278704-7-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org A helper function which allows getting the struct net_device pointer associated with a given device tree node can be more generic and also support alternative hardware description. Switch to fwnode_ and update the only existing caller (in the DSA subsystem). For that purpose use newly added fwnode_find_parent_dev_match routine. Signed-off-by: Marcin Wojtas --- include/linux/etherdevice.h | 1 + include/linux/of_net.h | 6 ----- net/core/net-sysfs.c | 25 ++++++-------------- net/dsa/dsa.c | 5 ++-- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index a541f0c4f146..3d475ee4a2d7 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h @@ -35,6 +35,7 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf); int device_get_mac_address(struct device *dev, char *addr); int device_get_ethdev_address(struct device *dev, struct net_device *netdev); int fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr); +struct net_device *fwnode_find_net_device_by_node(struct fwnode_handle *fwnode); u32 eth_get_headlen(const struct net_device *dev, const void *data, u32 len); __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev); diff --git a/include/linux/of_net.h b/include/linux/of_net.h index d88715a0b3a5..8a677f44c270 100644 --- a/include/linux/of_net.h +++ b/include/linux/of_net.h @@ -16,7 +16,6 @@ extern int of_get_phy_mode(struct device_node *np, phy_interface_t *interface); extern int of_get_mac_address(struct device_node *np, u8 *mac); extern int of_get_mac_address_nvmem(struct device_node *np, u8 *mac); int of_get_ethdev_address(struct device_node *np, struct net_device *dev); -extern struct net_device *of_find_net_device_by_node(struct device_node *np); #else static inline int of_get_phy_mode(struct device_node *np, phy_interface_t *interface) @@ -38,11 +37,6 @@ static inline int of_get_ethdev_address(struct device_node *np, struct net_devic { return -ENODEV; } - -static inline struct net_device *of_find_net_device_by_node(struct device_node *np) -{ - return NULL; -} #endif #endif /* __LINUX_OF_NET_H */ diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index ca55dd747d6c..652ba785e6f7 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -1935,38 +1936,26 @@ static struct class net_class __ro_after_init = { .get_ownership = net_get_ownership, }; -#ifdef CONFIG_OF -static int of_dev_node_match(struct device *dev, const void *data) -{ - for (; dev; dev = dev->parent) { - if (dev->of_node == data) - return 1; - } - - return 0; -} - /* - * of_find_net_device_by_node - lookup the net device for the device node - * @np: OF device node + * fwnode_find_net_device_by_node - lookup the net device for the device fwnode + * @fwnode: firmware node * - * Looks up the net_device structure corresponding with the device node. + * Looks up the net_device structure corresponding with the fwnode. * If successful, returns a pointer to the net_device with the embedded * struct device refcount incremented by one, or NULL on failure. The * refcount must be dropped when done with the net_device. */ -struct net_device *of_find_net_device_by_node(struct device_node *np) +struct net_device *fwnode_find_net_device_by_node(struct fwnode_handle *fwnode) { struct device *dev; - dev = class_find_device(&net_class, NULL, np, of_dev_node_match); + dev = class_find_device(&net_class, NULL, fwnode, fwnode_find_parent_dev_match); if (!dev) return NULL; return to_net_dev(dev); } -EXPORT_SYMBOL(of_find_net_device_by_node); -#endif +EXPORT_SYMBOL(fwnode_find_net_device_by_node); /* Delete sysfs entries but hold kobject reference until after all * netdev references are gone. diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index d1ca3bb03858..55f22a58556b 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -374,7 +375,7 @@ struct net_device *dsa_tree_find_first_master(struct dsa_switch_tree *dst) if (IS_ERR(ethernet)) return NULL; - master = of_find_net_device_by_node(to_of_node(ethernet)); + master = fwnode_find_net_device_by_node(ethernet); fwnode_handle_put(ethernet); return master; @@ -1233,7 +1234,7 @@ static int dsa_port_parse_fw(struct dsa_port *dp, struct fwnode_handle *fwnode) struct net_device *master; const char *user_protocol; - master = of_find_net_device_by_node(to_of_node(ethernet)); + master = fwnode_find_net_device_by_node(ethernet); fwnode_handle_put(ethernet); if (!master) return -EPROBE_DEFER; From patchwork Mon Jan 16 17:34:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643447 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 4402DC67871 for ; Mon, 16 Jan 2023 17:53:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235198AbjAPRxj (ORCPT ); Mon, 16 Jan 2023 12:53:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235106AbjAPRwp (ORCPT ); Mon, 16 Jan 2023 12:52:45 -0500 Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F3FE33B663 for ; Mon, 16 Jan 2023 09:35:06 -0800 (PST) Received: by mail-lj1-x22f.google.com with SMTP id p25so24500143ljn.12 for ; Mon, 16 Jan 2023 09:35:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IG3bSK8xYQLNtQeDwvBcudzQX24jvHqx7mvJjzT4TmQ=; b=NPPSzrmDs8k+ezhrh00GcRf0wAc4JHNJtbo8IqBvhwEOUsIlLvXJcg6xefxvubKk0z mSZ9AXHXqbGkWG+FWznlDA3jSo7MjMc4i076oDzdYwIFhttJ21lQkxkttGPDJuoQFNQg uVEPVEtC/HACLci+urdlpqjvlo17YyhuZUsMDZjlTV4Ju/KPjrBEoZYGbAJPCsx9Xnyf HP5UEyFh4z6xfvbDi+L8oW/vKwzAJS94JjdiyweQE60zv/6YhfzIDfZ3KZy8mW2clk7U efsWN+ZLLlJggSP3XWYdqSJC54Fyo1uGmEavCzN0f7DEnGjpbSZFcv9v3lHmGNsyJgfT XYcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IG3bSK8xYQLNtQeDwvBcudzQX24jvHqx7mvJjzT4TmQ=; b=06QDxFbW9DQ8+EOJGyLaLjrIpHEkQ0jflOZRHqbgFMoKCLnkbRncgNXJXe+WFODVZB av/EE5hS0Ba+oOelDwHRmMAqIqF6K2X+L9DmP6Itn0SExsmbSihwVaZJdm/O0XftYMFO jVqyYSTSQzpSngVgmJHF/wXl2i/kfwqq2HacLjTMqMkKU2Da3liZmHf87exuME7/8JMV PgfTHQFASkBXvid/GcfW0soO/LBbW9C2Z+z7gisCcn4tcbrkHUk/oo45Z2KwSGfnXfRR ojndT2Um4J/ZFIJtt/L+EloW2s8LMzkgP0ol3Zzb9+1J5Y5gIYkO1hZYot7otsZUujmi rCTw== X-Gm-Message-State: AFqh2kpqmFJv30/tH7s4gs4uw32erfrJyWGNZbJ7ETfutgbAODPR3woI KwtPWe0BiHv2C+4gFDAfLwaUkg== X-Google-Smtp-Source: AMrXdXszKdh7LiiGRlyW8vhmOXa05ofxdBH4JgcNygyrmsBj7cAG1g74BCMnEDuUK1KWC6MWLYhkcA== X-Received: by 2002:a05:651c:1592:b0:27f:bede:c748 with SMTP id h18-20020a05651c159200b0027fbedec748mr4008770ljq.35.1673890506496; Mon, 16 Jan 2023 09:35:06 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.35.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:35:06 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 7/8] net: mdio: introduce fwnode_mdiobus_register_device() Date: Mon, 16 Jan 2023 18:34:19 +0100 Message-Id: <20230116173420.1278704-8-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org As a preparation patch to extend MDIO capabilities in the ACPI world, introduce fwnode_mdiobus_register_device() to register non-PHY devices on the mdiobus. Use the newly introduced routine instead of of_mdiobus_register_device(). Signed-off-by: Marcin Wojtas --- include/linux/fwnode_mdio.h | 3 ++ drivers/net/mdio/fwnode_mdio.c | 29 +++++++++++++++++ drivers/net/mdio/of_mdio.c | 33 +------------------- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/include/linux/fwnode_mdio.h b/include/linux/fwnode_mdio.h index 98755b8c6c8a..39d74c5d1bb0 100644 --- a/include/linux/fwnode_mdio.h +++ b/include/linux/fwnode_mdio.h @@ -16,6 +16,9 @@ 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_device(struct mii_bus *mdio, + struct fwnode_handle *child, u32 addr); + int fwnode_phy_register_fixed_link(struct fwnode_handle *fwnode); void fwnode_phy_deregister_fixed_link(struct fwnode_handle *fwnode); diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index 56f57381ae69..4d712d8873d0 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -187,6 +187,35 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, } EXPORT_SYMBOL(fwnode_mdiobus_register_phy); +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); + + /* Associate the fwnode with the device structure so it + * can be looked up later. + */ + device_set_node(&mdiodev->dev, child); + + /* All data is now stored in the mdiodev struct; register it. */ + rc = mdio_device_register(mdiodev); + if (rc) { + device_set_node(&mdiodev->dev, NULL); + mdio_device_free(mdiodev); + return rc; + } + + dev_dbg(&mdio->dev, "registered mdio device %pfw at address %i\n", + child, addr); + return 0; +} +EXPORT_SYMBOL(fwnode_mdiobus_register_device); + /* * fwnode_phy_is_fixed_link() and fwnode_phy_register_fixed_link() must * support two bindings: diff --git a/drivers/net/mdio/of_mdio.c b/drivers/net/mdio/of_mdio.c index e6b3a4e251a1..685ac00f9dee 100644 --- a/drivers/net/mdio/of_mdio.c +++ b/drivers/net/mdio/of_mdio.c @@ -48,37 +48,6 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, 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) { - device_set_node(&mdiodev->dev, NULL); - fwnode_handle_put(fwnode); - mdio_device_free(mdiodev); - 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 @@ -187,7 +156,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) if (of_mdiobus_child_is_phy(child)) rc = of_mdiobus_register_phy(mdio, child, addr); else - rc = of_mdiobus_register_device(mdio, child, addr); + rc = fwnode_mdiobus_register_device(mdio, of_fwnode_handle(child), addr); if (rc == -ENODEV) dev_err(&mdio->dev, From patchwork Mon Jan 16 17:34:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcin Wojtas X-Patchwork-Id: 643446 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 CDDB6C46467 for ; Mon, 16 Jan 2023 17:53:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233820AbjAPRxk (ORCPT ); Mon, 16 Jan 2023 12:53:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235108AbjAPRwr (ORCPT ); Mon, 16 Jan 2023 12:52:47 -0500 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69B183B66B for ; Mon, 16 Jan 2023 09:35:09 -0800 (PST) Received: by mail-lf1-x135.google.com with SMTP id j17so43706757lfr.3 for ; Mon, 16 Jan 2023 09:35:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/pYK289ULrgsf/Jk8COetz13qlDoBjNKsMyxX7loUDw=; b=pKr/SoBpM/X64xXxDigtMbtty8+VxmqTToE5Vgfyx5AgTZCZq/O/SbGt0/wX7GVCqH 8Y352t1YrUJsUC0U0+XZJAKlfgZ9tIzBMz22FPxzGHFBmoZDXFHDjmZSgfLN4TyNUx2r cXHZT/0j+ulQkHENMfQFdztFPN+A4US4owf0UHcYCJsGcJySYx9metSlSm7XqrrBHdt+ u6ICsAAbnmehCYG+qrRRkflgH1+EvK52yMd3UliLXV6qsGYsOV1GmJdkPHsl4Llphhs3 rerp1uohcvhhRwacpNEAMJnFT3aYJqyvlm9IqrgjtIu7vyd0gmBoPRo9jXPJtFr/hesM yPdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/pYK289ULrgsf/Jk8COetz13qlDoBjNKsMyxX7loUDw=; b=B5DduAGkZC04EAxZT/hyOlW3YXiSt1iFnNfHYYIDGSZHHS2uxgnEBs/Rg9NX/zdl5+ OVNWmQvVGTCEo/wPGQ7kAh2AmL4MWfr8Lr6vukwEU7EMwSFLhKaNhgdAYXOOfdTAre3Y XpPp5uL30joJ9zpyh3/QGLPVDTT2V5dU7n+0/bRxHOJAAwDjotiJefBqgXVdQ+wYDwMI fWPCwPT5ej2pe+CXvf/rELKD0d3sYlP0ejYdfEYlSaJVCrhoPOe3x2PHDxOWZa9qWNzK uXS78JxUxQwWxiiFzU8E9yVzsAGPODvm+gCOzUsWUqJkdsi0SyLuz/4FP/MRF9l6TdYE SJZw== X-Gm-Message-State: AFqh2kqVJRFPgUH79C+is6qmMe8pVDxqY4gAeSIIH1CggVMRPwB0d6hU 2tuZspUm2Ag+ZwvuIuWh0zVUng== X-Google-Smtp-Source: AMrXdXsKJwqskOP/by0HTMPg+FUXa81A0yDzLkE3gsr+Ks87ZDrAVUjBgQY8fXG4kCztFu/RTIIr8w== X-Received: by 2002:a19:f514:0:b0:4b5:61e8:8934 with SMTP id j20-20020a19f514000000b004b561e88934mr23683566lfb.64.1673890507730; Mon, 16 Jan 2023 09:35:07 -0800 (PST) Received: from gilgamesh.lab.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id k20-20020a2e8894000000b0028b7f51414fsm707333lji.80.2023.01.16.09.35.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Jan 2023 09:35:07 -0800 (PST) From: Marcin Wojtas To: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, netdev@vger.kernel.org Cc: rafael@kernel.org, andriy.shevchenko@linux.intel.com, sean.wang@mediatek.com, Landen.Chao@mediatek.com, linus.walleij@linaro.org, andrew@lunn.ch, vivien.didelot@gmail.com, f.fainelli@gmail.com, olteanv@gmail.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, linux@armlinux.org.uk, hkallweit1@gmail.com, mw@semihalf.com, jaz@semihalf.com, tn@semihalf.com, Samer.El-Haj-Mahmoud@arm.com Subject: [net-next: PATCH v4 8/8] net: dsa: mv88e6xxx: switch to device_/fwnode_ APIs Date: Mon, 16 Jan 2023 18:34:20 +0100 Message-Id: <20230116173420.1278704-9-mw@semihalf.com> X-Mailer: git-send-email 2.29.0 In-Reply-To: <20230116173420.1278704-1-mw@semihalf.com> References: <20230116173420.1278704-1-mw@semihalf.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org In order to support both DT and ACPI in future, modify the mv88e6xx driver code to use device_/fwnode_ equivalent routines. No functional change is introduced by this patch. Signed-off-by: Marcin Wojtas --- drivers/net/dsa/mv88e6xxx/chip.c | 41 +++++++++----------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index 6731597bded0..1f1dd3dd4012 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -3932,10 +3932,11 @@ static int mv88e6xxx_mdio_write_c45(struct mii_bus *bus, int phy, int devad, } static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip, - struct device_node *np, + struct fwnode_handle *fwnode, bool external) { static int index; + struct device_node *np = to_of_node(fwnode); struct mv88e6xxx_mdio_bus *mdio_bus; struct mii_bus *bus; int err; @@ -4016,18 +4017,18 @@ static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip) } static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip, - struct device_node *np) + struct fwnode_handle *fwnode) { - struct device_node *child; + struct fwnode_handle *child; int err; /* Always register one mdio bus for the internal/default mdio * bus. This maybe represented in the device tree, but is * optional. */ - child = of_get_child_by_name(np, "mdio"); + child = fwnode_get_named_child_node(fwnode, "mdio"); err = mv88e6xxx_mdio_register(chip, child, false); - of_node_put(child); + fwnode_handle_put(child); if (err) return err; @@ -4035,13 +4036,13 @@ static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip, * which say they are compatible with the external mdio * bus. */ - for_each_available_child_of_node(np, child) { - if (of_device_is_compatible( - child, "marvell,mv88e6xxx-mdio-external")) { + fwnode_for_each_available_child_node(fwnode, child) { + if (fwnode_property_match_string(child, "compatible", + "marvell,mv88e6xxx-mdio-external") == 0) { err = mv88e6xxx_mdio_register(chip, child, true); if (err) { mv88e6xxx_mdios_unregister(chip); - of_node_put(child); + fwnode_handle_put(child); return err; } } @@ -7096,18 +7097,14 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev) struct dsa_mv88e6xxx_pdata *pdata = mdiodev->dev.platform_data; const struct mv88e6xxx_info *compat_info = NULL; struct device *dev = &mdiodev->dev; - struct device_node *np = dev->of_node; + struct fwnode_handle *fwnode = dev_fwnode(dev); struct mv88e6xxx_chip *chip; int port; int err; - if (!np && !pdata) - return -EINVAL; - - if (np) - compat_info = of_device_get_match_data(dev); + compat_info = device_get_match_data(dev); - if (pdata) { + if (!compat_info && pdata) { compat_info = pdata_device_get_match_data(dev); if (!pdata->netdev) @@ -7164,9 +7161,9 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev) mv88e6xxx_phy_init(chip); if (chip->info->ops->get_eeprom) { - if (np) - of_property_read_u32(np, "eeprom-length", - &chip->eeprom_len); + if (fwnode) + device_property_read_u32(dev, "eeprom-length", + &chip->eeprom_len); else chip->eeprom_len = pdata->eeprom_len; } @@ -7177,8 +7174,8 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev) if (err) goto out; - if (np) { - chip->irq = of_irq_get(np, 0); + if (fwnode) { + chip->irq = fwnode_irq_get(fwnode, 0); if (chip->irq == -EPROBE_DEFER) { err = chip->irq; goto out; @@ -7216,7 +7213,7 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev) if (err) goto out_g1_atu_prob_irq; - err = mv88e6xxx_mdios_register(chip, np); + err = mv88e6xxx_mdios_register(chip, fwnode); if (err) goto out_g1_vtu_prob_irq;