From: Yanteng Si <si.yanteng@linux.dev>
To: Chen-Yu Tsai <wens@kernel.org>,
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>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
Jernej Skrabec <jernej@kernel.org>,
Samuel Holland <samuel@sholland.org>
Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org,
Andre Przywara <andre.przywara@arm.com>
Subject: Re: [PATCH RFT net-next 02/10] net: stmmac: Add support for Allwinner A523 GMAC200
Date: Wed, 2 Jul 2025 09:59:52 +0800 [thread overview]
Message-ID: <15ba0933-b0c1-40eb-9d3c-d8837d6ee12a@linux.dev> (raw)
In-Reply-To: <20250701165756.258356-3-wens@kernel.org>
在 7/2/25 12:57 AM, Chen-Yu Tsai 写道:
> From: Chen-Yu Tsai <wens@csie.org>
>
> The Allwinner A523 SoC family has a second Ethernet controller, called
> the GMAC200 in the BSP and T527 datasheet, and referred to as GMAC1 for
> numbering. This controller, according to BSP sources, is fully
> compatible with a slightly newer version of the Synopsys DWMAC core.
> The glue layer around the controller is the same as found around older
> DWMAC cores on Allwinner SoCs. The only slight difference is that since
> this is the second controller on the SoC, the register for the clock
> delay controls is at a different offset. Last, the integration includes
> a dedicated clock gate for the memory bus and the whole thing is put in
> a separately controllable power domain.
>
> Add a new driver for this hardware supporting the integration layer.
>
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
> ---
> drivers/net/ethernet/stmicro/stmmac/Kconfig | 12 ++
> drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
> .../ethernet/stmicro/stmmac/dwmac-sun55i.c | 161 ++++++++++++++++++
> 3 files changed, 174 insertions(+)
> create mode 100644 drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> index 67fa879b1e52..38ce9a0cfb5b 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
> +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> @@ -263,6 +263,18 @@ config DWMAC_SUN8I
> stmmac device driver. This driver is used for H3/A83T/A64
> EMAC ethernet controller.
>
> +config DWMAC_SUN55I
> + tristate "Allwinner sun55i GMAC200 support"
> + default ARCH_SUNXI
> + depends on OF && (ARCH_SUNXI || COMPILE_TEST)
> + select MDIO_BUS_MUX
> + help
> + Support for Allwinner A523/T527 GMAC200 ethernet controllers.
> +
> + This selects Allwinner SoC glue layer support for the
> + stmmac device driver. This driver is used for A523/T527
> + GMAC200 ethernet controller.
> +
> config DWMAC_THEAD
> tristate "T-HEAD dwmac support"
> depends on OF && (ARCH_THEAD || COMPILE_TEST)
> diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
> index b591d93f8503..51e068e26ce4 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/Makefile
> +++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
> @@ -31,6 +31,7 @@ obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o
> obj-$(CONFIG_DWMAC_STM32) += dwmac-stm32.o
> obj-$(CONFIG_DWMAC_SUNXI) += dwmac-sunxi.o
> obj-$(CONFIG_DWMAC_SUN8I) += dwmac-sun8i.o
> +obj-$(CONFIG_DWMAC_SUN55I) += dwmac-sun55i.o
> obj-$(CONFIG_DWMAC_THEAD) += dwmac-thead.o
> obj-$(CONFIG_DWMAC_DWC_QOS_ETH) += dwmac-dwc-qos-eth.o
> obj-$(CONFIG_DWMAC_INTEL_PLAT) += dwmac-intel-plat.o
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c
> new file mode 100644
> index 000000000000..7fadb90e3098
> --- /dev/null
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun55i.c
> @@ -0,0 +1,161 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * dwmac-sun55i.c - Allwinner sun55i GMAC200 specific glue layer
> + *
> + * Copyright (C) 2025 Chen-Yu Tsai <wens@csie.org>
> + *
> + * syscon parts taken from dwmac-sun8i.c, which is
> + *
> + * Copyright (C) 2017 Corentin Labbe <clabbe.montjoie@gmail.com>
> + */
> +
> +#include <linux/bitfield.h>
> +#include <linux/bits.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/phy.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
> +#include <linux/stmmac.h>
> +
> +#include "stmmac.h"
> +#include "stmmac_platform.h"
> +
> +#define SYSCON_REG 0x34
> +
> +/* RMII specific bits */
> +#define SYSCON_RMII_EN BIT(13) /* 1: enable RMII (overrides EPIT) */
insert a blankline.
> +/* Generic system control EMAC_CLK bits */
> +#define SYSCON_ETXDC_MASK GENMASK(12, 10)
> +#define SYSCON_ERXDC_MASK GENMASK(9, 5)
ditto.
> +/* EMAC PHY Interface Type */
> +#define SYSCON_EPIT BIT(2) /* 1: RGMII, 0: MII */
> +#define SYSCON_ETCS_MASK GENMASK(1, 0)
> +#define SYSCON_ETCS_MII 0x0
> +#define SYSCON_ETCS_EXT_GMII 0x1
> +#define SYSCON_ETCS_INT_GMII 0x2
> +
> +#define MASK_TO_VAL(mask) ((mask) >> (__builtin_ffsll(mask) - 1))
> +
> +static int sun55i_gmac200_set_syscon(struct device *dev,
> + struct plat_stmmacenet_data *plat)
> +{
> + struct device_node *node = dev->of_node;
> + struct regmap *regmap;
> + u32 val, reg = 0;
> +
> + regmap = syscon_regmap_lookup_by_phandle(node, "syscon");
> + if (IS_ERR(regmap))
> + return dev_err_probe(dev, PTR_ERR(regmap), "Unable to map syscon\n");
> +
-----------
> + if (!of_property_read_u32(node, "allwinner,tx-delay-ps", &val)) {
> + if (val % 100) {
> + dev_err(dev, "tx-delay must be a multiple of 100\n");
> + return -EINVAL;
> + }
> + val /= 100;
> + dev_dbg(dev, "set tx-delay to %x\n", val);
> + if (val > MASK_TO_VAL(SYSCON_ETXDC_MASK))
> + return dev_err_probe(dev, -EINVAL,
> + "Invalid TX clock delay: %d\n",
> + val);
> +
> + reg |= FIELD_PREP(SYSCON_ETXDC_MASK, val);
> + }
> +
> + if (!of_property_read_u32(node, "allwinner,rx-delay-ps", &val)) {
> + if (val % 100) {
> + dev_err(dev, "rx-delay must be a multiple of 100\n");
> + return -EINVAL;
> + }
> + val /= 100;
> + dev_dbg(dev, "set rx-delay to %x\n", val);
> + if (val > MASK_TO_VAL(SYSCON_ERXDC_MASK))
> + return dev_err_probe(dev, -EINVAL,
> + "Invalid RX clock delay: %d\n",
> + val);
> +
> + reg |= FIELD_PREP(SYSCON_ERXDC_MASK, val);
> + }
------------
These two parts of the code are highly similar.
Can you construct a separate function?
> +
> + switch (plat->mac_interface) {
> + case PHY_INTERFACE_MODE_MII:
> + /* default */
> + break;
This line of comment seems a bit abrupt here.
Thanks,
Yanteng
next prev parent reply other threads:[~2025-07-02 2:00 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-01 16:57 [PATCH RFT net-next 0/10] net: stmmac: Add support for Allwinner A523 GMAC200 Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 01/10] dt-bindings: net: sun8i-emac: Add A523 GMAC200 compatible Chen-Yu Tsai
2025-07-08 16:16 ` Rob Herring (Arm)
2025-07-01 16:57 ` [PATCH RFT net-next 02/10] net: stmmac: Add support for Allwinner A523 GMAC200 Chen-Yu Tsai
2025-07-02 1:59 ` Yanteng Si [this message]
2025-07-02 2:09 ` Chen-Yu Tsai
2025-07-07 3:02 ` Yanteng Si
2025-07-03 8:19 ` Andrew Lunn
2025-07-07 3:06 ` Chen-Yu Tsai
2025-07-07 5:59 ` Andrew Lunn
2025-07-01 16:57 ` [PATCH RFT net-next 03/10] soc: sunxi: sram: add entry for a523 Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 04/10] soc: sunxi: sram: register regmap as syscon Chen-Yu Tsai
2025-07-02 5:01 ` Chen-Yu Tsai
2025-07-05 9:45 ` Per Larsson
2025-07-01 16:57 ` [PATCH RFT net-next 05/10] arm64: dts: allwinner: a523: Add GMAC200 ethernet controller Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 06/10] arm64: dts: allwinner: a527: cubie-a5e: Add ethernet PHY reset setting Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 07/10] arm64: dts: allwinner: a527: cubie-a5e: Enable second Ethernet port Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 08/10] arm64: dts: allwinner: t527: avaota-a1: Add ethernet PHY reset setting Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 09/10] arm64: dts: allwinner: t527: avaota-a1: enable second Ethernet port Chen-Yu Tsai
2025-07-01 16:57 ` [PATCH RFT net-next 10/10] arm64: dts: allwinner: t527: orangepi-4a: Enable " Chen-Yu Tsai
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=15ba0933-b0c1-40eb-9d3c-d8837d6ee12a@linux.dev \
--to=si.yanteng@linux.dev \
--cc=andre.przywara@arm.com \
--cc=andrew+netdev@lunn.ch \
--cc=conor+dt@kernel.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=jernej@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=samuel@sholland.org \
--cc=wens@csie.org \
--cc=wens@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).