From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
To: Andrew Lunn <andrew@lunn.ch>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Heiko Stuebner <heiko@sntech.de>,
Jakub Kicinski <kuba@kernel.org>,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org,
linux-stm32@st-md-mailman.stormreply.com, netdev@vger.kernel.org,
Paolo Abeni <pabeni@redhat.com>
Subject: [PATCH net-next v2 04/10] net: stmmac: rk: convert rk3588 to rk_set_reg_speed()
Date: Mon, 02 Feb 2026 10:04:10 +0000 [thread overview]
Message-ID: <E1vmqmw-00000007VCb-3glG@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <aYB2cKRu3DQh6yXK@shell.armlinux.org.uk>
Update rk_set_reg_speed() to use either the grf or php_grf regmap
depending on the SoC's requirements and convert rk3588, removing
its custom code.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 63 ++++++++++---------
1 file changed, 34 insertions(+), 29 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
index fce8cc3db4ee..f00f4ffdc2f2 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
@@ -53,6 +53,7 @@ struct rk_gmac_ops {
u16 clock_grf_reg;
bool gmac_grf_reg_in_php;
+ bool clock_grf_reg_in_php;
bool php_grf_required;
bool regs_valid;
u32 regs[];
@@ -145,7 +146,14 @@ static int rk_write_gmac_grf_reg(struct rk_priv_data *bsp_priv, u32 val)
static int rk_write_clock_grf_reg(struct rk_priv_data *bsp_priv, u32 val)
{
- return regmap_write(bsp_priv->grf, bsp_priv->clock_grf_reg, val);
+ struct regmap *regmap;
+
+ if (bsp_priv->ops->clock_grf_reg_in_php)
+ regmap = bsp_priv->php_grf;
+ else
+ regmap = bsp_priv->grf;
+
+ return regmap_write(regmap, bsp_priv->clock_grf_reg, val);
}
static int rk_set_reg_speed(struct rk_priv_data *bsp_priv,
@@ -1338,39 +1346,33 @@ static void rk3588_set_to_rmii(struct rk_priv_data *bsp_priv)
RK3588_GMAC_CLK_RMII_MODE(bsp_priv->id));
}
+static const struct rk_reg_speed_data rk3588_gmac0_speed_data = {
+ .rgmii_10 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV50_2_5M),
+ .rgmii_100 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV5_25M),
+ .rgmii_1000 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV1_125M),
+ .rmii_10 = RK3588_GMA_CLK_RMII_DIV20(0),
+ .rmii_100 = RK3588_GMA_CLK_RMII_DIV2(0),
+};
+
+static const struct rk_reg_speed_data rk3588_gmac1_speed_data = {
+ .rgmii_10 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV50_2_5M),
+ .rgmii_100 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV5_25M),
+ .rgmii_1000 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV1_125M),
+ .rmii_10 = RK3588_GMA_CLK_RMII_DIV20(1),
+ .rmii_100 = RK3588_GMA_CLK_RMII_DIV2(1),
+};
+
static int rk3588_set_gmac_speed(struct rk_priv_data *bsp_priv,
phy_interface_t interface, int speed)
{
- unsigned int val = 0, id = bsp_priv->id;
-
- switch (speed) {
- case 10:
- if (interface == PHY_INTERFACE_MODE_RMII)
- val = RK3588_GMA_CLK_RMII_DIV20(id);
- else
- val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV50_2_5M);
- break;
- case 100:
- if (interface == PHY_INTERFACE_MODE_RMII)
- val = RK3588_GMA_CLK_RMII_DIV2(id);
- else
- val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV5_25M);
- break;
- case 1000:
- if (interface != PHY_INTERFACE_MODE_RMII)
- val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV1_125M);
- else
- goto err;
- break;
- default:
- goto err;
- }
+ const struct rk_reg_speed_data *rsd;
- regmap_write(bsp_priv->php_grf, RK3588_GRF_CLK_CON1, val);
+ if (bsp_priv->id == 0)
+ rsd = &rk3588_gmac0_speed_data;
+ else
+ rsd = &rk3588_gmac1_speed_data;
- return 0;
-err:
- return -EINVAL;
+ return rk_set_reg_speed(bsp_priv, rsd, interface, speed);
}
static void rk3588_set_clock_selection(struct rk_priv_data *bsp_priv, bool input,
@@ -1395,6 +1397,9 @@ static const struct rk_gmac_ops rk3588_ops = {
.gmac_grf_reg_in_php = true,
.gmac_grf_reg = RK3588_GRF_GMAC_CON0,
+ .clock_grf_reg_in_php = true,
+ .clock_grf_reg = RK3588_GRF_CLK_CON1,
+
.php_grf_required = true,
.regs_valid = true,
.regs = {
--
2.47.3
WARNING: multiple messages have this Message-ID (diff)
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
To: Andrew Lunn <andrew@lunn.ch>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Heiko Stuebner <heiko@sntech.de>,
Jakub Kicinski <kuba@kernel.org>,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org,
linux-stm32@st-md-mailman.stormreply.com, netdev@vger.kernel.org,
Paolo Abeni <pabeni@redhat.com>
Subject: [PATCH net-next v2 04/10] net: stmmac: rk: convert rk3588 to rk_set_reg_speed()
Date: Mon, 02 Feb 2026 10:04:10 +0000 [thread overview]
Message-ID: <E1vmqmw-00000007VCb-3glG@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <aYB2cKRu3DQh6yXK@shell.armlinux.org.uk>
Update rk_set_reg_speed() to use either the grf or php_grf regmap
depending on the SoC's requirements and convert rk3588, removing
its custom code.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
.../net/ethernet/stmicro/stmmac/dwmac-rk.c | 63 ++++++++++---------
1 file changed, 34 insertions(+), 29 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
index fce8cc3db4ee..f00f4ffdc2f2 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
@@ -53,6 +53,7 @@ struct rk_gmac_ops {
u16 clock_grf_reg;
bool gmac_grf_reg_in_php;
+ bool clock_grf_reg_in_php;
bool php_grf_required;
bool regs_valid;
u32 regs[];
@@ -145,7 +146,14 @@ static int rk_write_gmac_grf_reg(struct rk_priv_data *bsp_priv, u32 val)
static int rk_write_clock_grf_reg(struct rk_priv_data *bsp_priv, u32 val)
{
- return regmap_write(bsp_priv->grf, bsp_priv->clock_grf_reg, val);
+ struct regmap *regmap;
+
+ if (bsp_priv->ops->clock_grf_reg_in_php)
+ regmap = bsp_priv->php_grf;
+ else
+ regmap = bsp_priv->grf;
+
+ return regmap_write(regmap, bsp_priv->clock_grf_reg, val);
}
static int rk_set_reg_speed(struct rk_priv_data *bsp_priv,
@@ -1338,39 +1346,33 @@ static void rk3588_set_to_rmii(struct rk_priv_data *bsp_priv)
RK3588_GMAC_CLK_RMII_MODE(bsp_priv->id));
}
+static const struct rk_reg_speed_data rk3588_gmac0_speed_data = {
+ .rgmii_10 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV50_2_5M),
+ .rgmii_100 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV5_25M),
+ .rgmii_1000 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV1_125M),
+ .rmii_10 = RK3588_GMA_CLK_RMII_DIV20(0),
+ .rmii_100 = RK3588_GMA_CLK_RMII_DIV2(0),
+};
+
+static const struct rk_reg_speed_data rk3588_gmac1_speed_data = {
+ .rgmii_10 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV50_2_5M),
+ .rgmii_100 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV5_25M),
+ .rgmii_1000 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV1_125M),
+ .rmii_10 = RK3588_GMA_CLK_RMII_DIV20(1),
+ .rmii_100 = RK3588_GMA_CLK_RMII_DIV2(1),
+};
+
static int rk3588_set_gmac_speed(struct rk_priv_data *bsp_priv,
phy_interface_t interface, int speed)
{
- unsigned int val = 0, id = bsp_priv->id;
-
- switch (speed) {
- case 10:
- if (interface == PHY_INTERFACE_MODE_RMII)
- val = RK3588_GMA_CLK_RMII_DIV20(id);
- else
- val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV50_2_5M);
- break;
- case 100:
- if (interface == PHY_INTERFACE_MODE_RMII)
- val = RK3588_GMA_CLK_RMII_DIV2(id);
- else
- val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV5_25M);
- break;
- case 1000:
- if (interface != PHY_INTERFACE_MODE_RMII)
- val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV1_125M);
- else
- goto err;
- break;
- default:
- goto err;
- }
+ const struct rk_reg_speed_data *rsd;
- regmap_write(bsp_priv->php_grf, RK3588_GRF_CLK_CON1, val);
+ if (bsp_priv->id == 0)
+ rsd = &rk3588_gmac0_speed_data;
+ else
+ rsd = &rk3588_gmac1_speed_data;
- return 0;
-err:
- return -EINVAL;
+ return rk_set_reg_speed(bsp_priv, rsd, interface, speed);
}
static void rk3588_set_clock_selection(struct rk_priv_data *bsp_priv, bool input,
@@ -1395,6 +1397,9 @@ static const struct rk_gmac_ops rk3588_ops = {
.gmac_grf_reg_in_php = true,
.gmac_grf_reg = RK3588_GRF_GMAC_CON0,
+ .clock_grf_reg_in_php = true,
+ .clock_grf_reg = RK3588_GRF_CLK_CON1,
+
.php_grf_required = true,
.regs_valid = true,
.regs = {
--
2.47.3
_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip
next prev parent reply other threads:[~2026-02-02 10:04 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-02 10:03 [PATCH net-next v2 00/10] net: stmmac: rk: cleanups v3: mode and speed for most Russell King (Oracle)
2026-02-02 10:03 ` Russell King (Oracle)
2026-02-02 10:03 ` [PATCH net-next v2 01/10] net: stmmac: rk: convert to mask-based interface mode configuration Russell King (Oracle)
2026-02-02 10:03 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 02/10] net: stmmac: rk: convert rk3588 to mask-based interface mode config Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 03/10] net: stmmac: rk: move speed GRF register offset to private data Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle) [this message]
2026-02-02 10:04 ` [PATCH net-next v2 04/10] net: stmmac: rk: convert rk3588 to rk_set_reg_speed() Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 05/10] net: stmmac: rk: remove rk3528 RMII clock initialisation Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 06/10] net: stmmac: rk: use rk_encode_wm16() for RGMII clocks Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 07/10] net: stmmac: rk: use rk_encode_wm16() for RMII speed Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 08/10] net: stmmac: rk: use rk_encode_wm16() for RMII clock Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 09/10] net: stmmac: rk: remove need for ->set_speed() method Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-03 13:43 ` Russell King (Oracle)
2026-02-03 13:43 ` Russell King (Oracle)
2026-02-02 10:04 ` [PATCH net-next v2 10/10] net: stmmac: rk: convert px30 Russell King (Oracle)
2026-02-02 10:04 ` Russell King (Oracle)
2026-02-04 3:20 ` [PATCH net-next v2 00/10] net: stmmac: rk: cleanups v3: mode and speed for most patchwork-bot+netdevbpf
2026-02-04 3:20 ` patchwork-bot+netdevbpf
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=E1vmqmw-00000007VCb-3glG@rmk-PC.armlinux.org.uk \
--to=rmk+kernel@armlinux.org.uk \
--cc=alexandre.torgue@foss.st.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=heiko@sntech.de \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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.