From: Yanteng Si <si.yanteng@linux.dev>
To: James Hilliard <james.hilliard1@gmail.com>, netdev@vger.kernel.org
Cc: linux-sunxi@lists.linux.dev,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>, "Chen-Yu Tsai" <wens@csie.org>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"Samuel Holland" <samuel@sholland.org>,
"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
"Alexandre Torgue" <alexandre.torgue@foss.st.com>,
"Yinggang Gu" <guyinggang@loongson.cn>,
"Huacai Chen" <chenhuacai@kernel.org>,
"Feiyang Chen" <chenfeiyang@loongson.cn>,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>,
"Jinjie Ruan" <ruanjinjie@huawei.com>,
"Paul Kocialkowski" <paulk@sys-base.io>,
linux-arm-kernel@lists.infradead.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 2/2] net: stmmac: dwmac-sun8i: Allow runtime AC200/AC300 phy selection
Date: Mon, 26 May 2025 09:38:41 +0800 [thread overview]
Message-ID: <7a42e9d1-93ce-4666-b7e7-3c0b4e2c0c99@linux.dev> (raw)
In-Reply-To: <20250526002924.2567843-2-james.hilliard1@gmail.com>
在 5/26/25 8:29 AM, James Hilliard 写道:
> The Allwinner H616 ships with two different on-die phy variants, in
> order to determine the phy being used we need to read an efuse and
> then select the appropriate PHY based on the AC300 bit.
>
> By defining an emac node without a phy-handle we can override the
> default PHY selection logic in stmmac by passing a specific phy_node
> selected based on the ac200 and ac300 names in a phys list.
>
> This allows us to have a device tree that defines both PHY variants
> even though only one will actually end up being used at runtime
> based on the ac300 nvmem efuse bit.
>
> Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
> ---
> .../net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
> index 6c7e8655a7eb..e275f4caa684 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
> @@ -11,6 +11,7 @@
> #include <linux/mdio-mux.h>
> #include <linux/mfd/syscon.h>
> #include <linux/module.h>
> +#include <linux/nvmem-consumer.h>
> #include <linux/of.h>
> #include <linux/of_mdio.h>
> #include <linux/of_net.h>
> @@ -280,6 +281,8 @@ static const struct emac_variant emac_variant_h6 = {
> #define SYSCON_ETCS_EXT_GMII 0x1
> #define SYSCON_ETCS_INT_GMII 0x2
>
> +#define AC300_KEY BIT(8)
> +
I have observed all the BIT macros in this file, and they all
have a line of comments. I think a comment is also needed here.
> /* sun8i_dwmac_dma_reset() - reset the EMAC
> * Called from stmmac via stmmac_dma_ops->reset
> */
> @@ -1159,6 +1162,7 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
> struct net_device *ndev;
> struct regmap *regmap;
> int ret;
> + u16 val;
>
> ret = stmmac_get_platform_resources(pdev, &stmmac_res);
> if (ret)
> @@ -1222,6 +1226,21 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
> if (IS_ERR(plat_dat))
> return PTR_ERR(plat_dat);
>
> + if (!nvmem_cell_read_u16(dev, "ac300", &val)) {
> + const char *phy_name = (val & AC300_KEY) ? "ac300" : "ac200";
> + int index = of_property_match_string(dev->of_node, "phy-names", phy_name);
> + if (index < 0) {
> + dev_err(dev, "PHY name not found in device tree\n");
> + return -EINVAL;
> + }
> +
> + plat_dat->phy_node = of_parse_phandle(dev->of_node, "phys", index);
> + if (!plat_dat->phy_node) {
> + dev_err(dev, "Failed to get PHY node from phys property\n");
> + return -EINVAL;
> + }
> + }
> +
How about preparing a separate function for it? Then call it in probe().
If you are willing to do so, remember to write a code comment.
Thanks,
Yanteng
next prev parent reply other threads:[~2025-05-26 1:41 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-26 0:29 [RFC PATCH 1/2] net: stmmac: allow drivers to explicitly select PHY device James Hilliard
2025-05-26 0:29 ` [RFC PATCH 2/2] net: stmmac: dwmac-sun8i: Allow runtime AC200/AC300 phy selection James Hilliard
2025-05-26 1:38 ` Yanteng Si [this message]
2025-05-26 8:04 ` Russell King (Oracle)
2025-05-26 14:14 ` Andrew Lunn
2025-05-26 19:05 ` James Hilliard
2025-05-26 19:58 ` Andrew Lunn
2025-05-26 20:59 ` James Hilliard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7a42e9d1-93ce-4666-b7e7-3c0b4e2c0c99@linux.dev \
--to=si.yanteng@linux.dev \
--cc=alexandre.torgue@foss.st.com \
--cc=andrew+netdev@lunn.ch \
--cc=chenfeiyang@loongson.cn \
--cc=chenhuacai@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=guyinggang@loongson.cn \
--cc=james.hilliard1@gmail.com \
--cc=jernej.skrabec@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=linux-sunxi@lists.linux.dev \
--cc=mcoquelin.stm32@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=paulk@sys-base.io \
--cc=rmk+kernel@armlinux.org.uk \
--cc=ruanjinjie@huawei.com \
--cc=samuel@sholland.org \
--cc=u.kleine-koenig@baylibre.com \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.