From: David Yang <mmyangfl@gmail.com>
To: netdev@vger.kernel.org
Cc: David Yang <mmyangfl@gmail.com>, Andrew Lunn <andrew@lunn.ch>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Russell King <linux@armlinux.org.uk>,
linux-kernel@vger.kernel.org
Subject: [PATCH net-next 4/7] net: dsa: motorcomm: Introduce yt921x_speed
Date: Thu, 10 Sep 2026 03:05:32 +0800 [thread overview]
Message-ID: <20260909190541.466476-5-mmyangfl@gmail.com> (raw)
In-Reply-To: <20260909190541.466476-1-mmyangfl@gmail.com>
FIELD_PREP values cannot be used as case labels. Introduce enum for
future use.
Signed-off-by: David Yang <mmyangfl@gmail.com>
---
drivers/net/dsa/motorcomm/chip.c | 62 ++++----------------------------
drivers/net/dsa/motorcomm/chip.h | 61 +++++++++++++++++++++++--------
2 files changed, 52 insertions(+), 71 deletions(-)
diff --git a/drivers/net/dsa/motorcomm/chip.c b/drivers/net/dsa/motorcomm/chip.c
index 53d0a85e9310..0635359787db 100644
--- a/drivers/net/dsa/motorcomm/chip.c
+++ b/drivers/net/dsa/motorcomm/chip.c
@@ -3776,29 +3776,15 @@ yt921x_port_up(struct yt921x_priv *priv, int port, unsigned int mode,
{
const struct yt921x_info *info = priv->info;
struct yt921x_port *pp = &priv->ports[port];
+ int ps = ethtool_speed_to_yt921x(speed);
u32 mask;
u32 ctrl;
int res;
- switch (speed) {
- case SPEED_10:
- ctrl = YT921X_PORT_SPEED_10;
- break;
- case SPEED_100:
- ctrl = YT921X_PORT_SPEED_100;
- break;
- case SPEED_1000:
- ctrl = YT921X_PORT_SPEED_1000;
- break;
- case SPEED_2500:
- ctrl = YT921X_PORT_SPEED_2500;
- break;
- case SPEED_10000:
- ctrl = YT921X_PORT_SPEED_10000;
- break;
- default:
+ if (ps == YT921X_SPEED_NUM)
return -EINVAL;
- }
+
+ ctrl = YT921X_PORT_SPEED(ps);
if (duplex == DUPLEX_FULL)
ctrl |= YT921X_PORT_DUPLEX_FULL;
if (tx_pause)
@@ -3815,25 +3801,7 @@ yt921x_port_up(struct yt921x_priv *priv, int port, unsigned int mode,
if (pp->serdes) {
mask = YT921X_SERDES_SPEED_M;
- switch (speed) {
- case SPEED_10:
- ctrl = YT921X_SERDES_SPEED_10;
- break;
- case SPEED_100:
- ctrl = YT921X_SERDES_SPEED_100;
- break;
- case SPEED_1000:
- ctrl = YT921X_SERDES_SPEED_1000;
- break;
- case SPEED_2500:
- ctrl = YT921X_SERDES_SPEED_2500;
- break;
- case SPEED_10000:
- ctrl = YT921X_SERDES_SPEED_10000;
- break;
- default:
- return -EINVAL;
- }
+ ctrl = YT921X_SERDES_SPEED(ps);
mask |= YT921X_SERDES_DUPLEX_FULL;
if (duplex == DUPLEX_FULL)
ctrl |= YT921X_SERDES_DUPLEX_FULL;
@@ -3855,25 +3823,7 @@ yt921x_port_up(struct yt921x_priv *priv, int port, unsigned int mode,
if (res)
return res;
- switch (speed) {
- case SPEED_10:
- ctrl = YT921X_MDIO_POLLING_SPEED_10;
- break;
- case SPEED_100:
- ctrl = YT921X_MDIO_POLLING_SPEED_100;
- break;
- case SPEED_1000:
- ctrl = YT921X_MDIO_POLLING_SPEED_1000;
- break;
- case SPEED_2500:
- ctrl = YT921X_MDIO_POLLING_SPEED_2500;
- break;
- case SPEED_10000:
- ctrl = YT921X_MDIO_POLLING_SPEED_10000;
- break;
- default:
- return -EINVAL;
- }
+ ctrl = YT921X_MDIO_POLLING_SPEED(ps);
if (duplex == DUPLEX_FULL)
ctrl |= YT921X_MDIO_POLLING_DUPLEX_FULL;
ctrl |= YT921X_MDIO_POLLING_LINK;
diff --git a/drivers/net/dsa/motorcomm/chip.h b/drivers/net/dsa/motorcomm/chip.h
index e87daf8c650b..dd121ef2cbf5 100644
--- a/drivers/net/dsa/motorcomm/chip.h
+++ b/drivers/net/dsa/motorcomm/chip.h
@@ -89,11 +89,6 @@
#define YT921X_SERDES_DUPLEX_FULL BIT(3)
#define YT921X_SERDES_SPEED_M GENMASK(2, 0)
#define YT921X_SERDES_SPEED(x) FIELD_PREP(YT921X_SERDES_SPEED_M, (x))
-#define YT921X_SERDES_SPEED_10 YT921X_SERDES_SPEED(0)
-#define YT921X_SERDES_SPEED_100 YT921X_SERDES_SPEED(1)
-#define YT921X_SERDES_SPEED_1000 YT921X_SERDES_SPEED(2)
-#define YT921X_SERDES_SPEED_10000 YT921X_SERDES_SPEED(3)
-#define YT921X_SERDES_SPEED_2500 YT921X_SERDES_SPEED(4)
#define YT921X_PORTn_CTRL(port) (0x80100 + 4 * (port)) /* Bit 7-0 shared with PORT_STATUS */
#define YT921X_PORT_CTRL_PAUSE_AN BIT(10)
#define YT921X_PORT_CTRL_LINK_AN BIT(9)
@@ -107,11 +102,6 @@
#define YT921X_PORT_TX_MAC_EN BIT(3)
#define YT921X_PORT_SPEED_M GENMASK(2, 0)
#define YT921X_PORT_SPEED(x) FIELD_PREP(YT921X_PORT_SPEED_M, (x))
-#define YT921X_PORT_SPEED_10 YT921X_PORT_SPEED(0)
-#define YT921X_PORT_SPEED_100 YT921X_PORT_SPEED(1)
-#define YT921X_PORT_SPEED_1000 YT921X_PORT_SPEED(2)
-#define YT921X_PORT_SPEED_10000 YT921X_PORT_SPEED(3)
-#define YT921X_PORT_SPEED_2500 YT921X_PORT_SPEED(4)
#define YT921X_PON_STRAP_FUNC 0x80320
#define YT921X_PON_STRAP_VAL 0x80324
#define YT921X_PON_STRAP_CAP 0x80328
@@ -122,11 +112,16 @@
#define YT921X_MDIO_POLLING_LINK BIT(3)
#define YT921X_MDIO_POLLING_SPEED_M GENMASK(2, 0)
#define YT921X_MDIO_POLLING_SPEED(x) FIELD_PREP(YT921X_MDIO_POLLING_SPEED_M, (x))
-#define YT921X_MDIO_POLLING_SPEED_10 YT921X_MDIO_POLLING_SPEED(0)
-#define YT921X_MDIO_POLLING_SPEED_100 YT921X_MDIO_POLLING_SPEED(1)
-#define YT921X_MDIO_POLLING_SPEED_1000 YT921X_MDIO_POLLING_SPEED(2)
-#define YT921X_MDIO_POLLING_SPEED_10000 YT921X_MDIO_POLLING_SPEED(3)
-#define YT921X_MDIO_POLLING_SPEED_2500 YT921X_MDIO_POLLING_SPEED(4)
+
+enum yt921x_speed {
+ YT921X_SPEED_10,
+ YT921X_SPEED_100,
+ YT921X_SPEED_1000,
+ YT921X_SPEED_10000,
+ YT921X_SPEED_2500,
+ YT921X_SPEED_NUM
+};
+
#define YT921X_SENSOR 0x8036c
#define YT921X_SENSOR_TEMP BIT(18)
#define YT921X_TEMP 0x80374
@@ -1009,4 +1004,40 @@ struct yt921x_priv {
struct yt921x_acl_blk *acl_blks[YT921X_ACL_BLK_NUM];
};
+static inline int ethtool_speed_to_yt921x(int speed)
+{
+ switch (speed) {
+ case SPEED_10:
+ return YT921X_SPEED_10;
+ case SPEED_100:
+ return YT921X_SPEED_100;
+ case SPEED_1000:
+ return YT921X_SPEED_1000;
+ case SPEED_2500:
+ return YT921X_SPEED_2500;
+ case SPEED_10000:
+ return YT921X_SPEED_10000;
+ default:
+ return YT921X_SPEED_NUM;
+ }
+}
+
+static inline int yt921x_speed_to_ethtool(int speed)
+{
+ switch (speed) {
+ case YT921X_SPEED_10:
+ return SPEED_10;
+ case YT921X_SPEED_100:
+ return SPEED_100;
+ case YT921X_SPEED_1000:
+ return SPEED_1000;
+ case YT921X_SPEED_2500:
+ return SPEED_2500;
+ case YT921X_SPEED_10000:
+ return SPEED_10000;
+ default:
+ return SPEED_UNKNOWN;
+ }
+}
+
#endif
--
2.53.0
next prev parent reply other threads:[~2026-09-09 19:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-09 19:05 [PATCH net-next 0/7] net: dsa: motorcomm: Add SerDes PCS David Yang
2026-09-09 19:05 ` [PATCH net-next 1/7] net: dsa: motorcomm: Split xMII and SERDES port masks David Yang
2026-09-10 20:59 ` Andrew Lunn
2026-09-10 21:37 ` David Yang
2026-09-11 11:46 ` Andrew Lunn
2026-09-11 12:32 ` David Yang
2026-09-09 19:05 ` [PATCH net-next 2/7] net: dsa: motorcomm: Check port type with runtime info David Yang
2026-09-09 19:05 ` [PATCH net-next 3/7] net: dsa: motorcomm: Fix port control/status register bit field names David Yang
2026-09-09 19:05 ` David Yang [this message]
2026-09-09 19:05 ` [PATCH net-next 5/7] net: dsa: motorcomm: Hoist port_to_priv helper into chip.h David Yang
2026-09-09 19:05 ` [PATCH net-next 6/7] net: dsa: motorcomm: Split MDIO bus module David Yang
2026-09-09 19:05 ` [PATCH net-next 7/7] net: dsa: motorcomm: Add SerDes PCS David Yang
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=20260909190541.466476-5-mmyangfl@gmail.com \
--to=mmyangfl@gmail.com \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--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.