* [PATCH net-next v3 1/3] mv88e6xxx: Add mv88e6352_serdes_get_lane
2026-05-28 21:03 [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321 Fidan Aliyeva
@ 2026-05-28 21:03 ` Fidan Aliyeva
2026-05-28 21:26 ` Andrew Lunn
2026-05-28 21:03 ` [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions Fidan Aliyeva
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Fidan Aliyeva @ 2026-05-28 21:03 UTC (permalink / raw)
To: andrew, olteanv, davem, edumazet, kuba, pabeni, marek.behun
Cc: netdev, linux-kernel, fidan.aliyeva.ext, Thomas Eckerman
Changes:
1. Add mv88e6352_serdes_get_lane function which checks if the port
supports SERDES by calling mv88e6352_g2_scratch_port_has_serdes. Then
returns the address of the SERDES lane.
2. Add this function as .serdes_get_lane member to all the chip
versions which use mv88e6352_pcs_init.
Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
---
drivers/net/dsa/mv88e6xxx/chip.c | 4 ++++
drivers/net/dsa/mv88e6xxx/serdes.c | 11 +++++++++++
drivers/net/dsa/mv88e6xxx/serdes.h | 1 +
3 files changed, 16 insertions(+)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 63cdcce3d8c7..30c8f6e1b367 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -4673,6 +4673,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+ .serdes_get_lane = mv88e6352_serdes_get_lane,
.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
.serdes_get_regs = mv88e6352_serdes_get_regs,
.gpio_ops = &mv88e6352_gpio_ops,
@@ -4776,6 +4777,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+ .serdes_get_lane = mv88e6352_serdes_get_lane,
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
.serdes_get_regs = mv88e6352_serdes_get_regs,
@@ -5051,6 +5053,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+ .serdes_get_lane = mv88e6352_serdes_get_lane,
.serdes_irq_mapping = mv88e6352_serdes_irq_mapping,
.serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
.serdes_get_regs = mv88e6352_serdes_get_regs,
@@ -5486,6 +5489,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
.gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6352_avb_ops,
.ptp_ops = &mv88e6352_ptp_ops,
+ .serdes_get_lane = mv88e6352_serdes_get_lane,
.serdes_get_sset_count = mv88e6352_serdes_get_sset_count,
.serdes_get_strings = mv88e6352_serdes_get_strings,
.serdes_get_stats = mv88e6352_serdes_get_stats,
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index d3d3c121a32d..a23eb3d50b6e 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -102,6 +102,17 @@ int mv88e6xxx_pcs_decode_state(struct device *dev, u16 bmsr, u16 lpa,
return 0;
}
+int mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+{
+ int has_serdes;
+
+ has_serdes = mv88e6352_g2_scratch_port_has_serdes(chip, port);
+ if (has_serdes == 0)
+ return -ENODEV;
+
+ return MV88E6352_ADDR_SERDES;
+}
+
struct mv88e6352_serdes_hw_stat {
char string[ETH_GSTRING_LEN];
int sizeof_stat;
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.h b/drivers/net/dsa/mv88e6xxx/serdes.h
index 17a3e85fabaa..21e050b328cc 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.h
+++ b/drivers/net/dsa/mv88e6xxx/serdes.h
@@ -115,6 +115,7 @@ int mv88e6xxx_pcs_decode_state(struct device *dev, u16 bmsr, u16 lpa,
u16 status, struct phylink_link_state *state);
int mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
+int mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
int mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
int mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
int mv88e6393x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
--
2.36.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH net-next v3 1/3] mv88e6xxx: Add mv88e6352_serdes_get_lane
2026-05-28 21:03 ` [PATCH net-next v3 1/3] mv88e6xxx: Add mv88e6352_serdes_get_lane Fidan Aliyeva
@ 2026-05-28 21:26 ` Andrew Lunn
0 siblings, 0 replies; 9+ messages in thread
From: Andrew Lunn @ 2026-05-28 21:26 UTC (permalink / raw)
To: Fidan Aliyeva
Cc: olteanv, davem, edumazet, kuba, pabeni, marek.behun, netdev,
linux-kernel, Thomas Eckerman
On Thu, May 28, 2026 at 11:03:08PM +0200, Fidan Aliyeva wrote:
> Changes:
> 1. Add mv88e6352_serdes_get_lane function which checks if the port
> supports SERDES by calling mv88e6352_g2_scratch_port_has_serdes. Then
> returns the address of the SERDES lane.
> 2. Add this function as .serdes_get_lane member to all the chip
> versions which use mv88e6352_pcs_init.
>
> Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
> Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
> Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions
2026-05-28 21:03 [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321 Fidan Aliyeva
2026-05-28 21:03 ` [PATCH net-next v3 1/3] mv88e6xxx: Add mv88e6352_serdes_get_lane Fidan Aliyeva
@ 2026-05-28 21:03 ` Fidan Aliyeva
2026-05-28 21:27 ` Andrew Lunn
2026-06-02 2:13 ` Jakub Kicinski
2026-05-28 21:03 ` [PATCH net-next v3 3/3] mv88e6xxx: Add SERDES Support for mv88e6321 Fidan Aliyeva
2026-06-02 2:20 ` [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321 patchwork-bot+netdevbpf
3 siblings, 2 replies; 9+ messages in thread
From: Fidan Aliyeva @ 2026-05-28 21:03 UTC (permalink / raw)
To: andrew, olteanv, davem, edumazet, kuba, pabeni, marek.behun
Cc: netdev, linux-kernel, fidan.aliyeva.ext, Thomas Eckerman
Changes:
1. Replace serdes check by mv88e6352_g2_scratch_port_has_serdes in
mv88e6352_pcs_init function by mv88e6xxx_serdes_get_lane function making it
more generic.
2. Replace serdes checks in mv88e6352_serdes_get_* functions with
mv88e6xxx_serdes_get_lane making them more generic.
3. Add lane argument to mv88e6352_serdes_read so it can be reused later for
6321.
Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
---
drivers/net/dsa/mv88e6xxx/pcs-6352.c | 10 +++---
drivers/net/dsa/mv88e6xxx/serdes.c | 53 +++++++++++++++-------------
2 files changed, 33 insertions(+), 30 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/pcs-6352.c b/drivers/net/dsa/mv88e6xxx/pcs-6352.c
index 308655d72d52..4228ae5bb9db 100644
--- a/drivers/net/dsa/mv88e6xxx/pcs-6352.c
+++ b/drivers/net/dsa/mv88e6xxx/pcs-6352.c
@@ -324,17 +324,17 @@ static int mv88e6352_pcs_init(struct mv88e6xxx_chip *chip, int port)
struct mii_bus *bus;
struct device *dev;
unsigned int irq;
- int err;
+ int lane, err;
- err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
- if (err <= 0)
- return err;
+ lane = mv88e6xxx_serdes_get_lane(chip, port);
+ if (lane < 0)
+ return 0;
irq = mv88e6xxx_serdes_irq_mapping(chip, port);
bus = mv88e6xxx_default_mdio_bus(chip);
dev = chip->dev;
- mpcs = marvell_c22_pcs_alloc(dev, bus, MV88E6352_ADDR_SERDES);
+ mpcs = marvell_c22_pcs_alloc(dev, bus, lane);
if (!mpcs)
return -ENOMEM;
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index a23eb3d50b6e..48db9932b989 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -17,10 +17,10 @@
#include "port.h"
#include "serdes.h"
-static int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int reg,
- u16 *val)
+static int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane,
+ int reg, u16 *val)
{
- return mv88e6xxx_phy_page_read(chip, MV88E6352_ADDR_SERDES,
+ return mv88e6xxx_phy_page_read(chip, lane,
MV88E6352_SERDES_PAGE_FIBER,
reg, val);
}
@@ -126,11 +126,11 @@ static struct mv88e6352_serdes_hw_stat mv88e6352_serdes_hw_stats[] = {
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port)
{
- int err;
+ int lane = -ENODEV;
- err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
- if (err <= 0)
- return err;
+ lane = mv88e6xxx_serdes_get_lane(chip, port);
+ if (lane < 0)
+ return 0;
return ARRAY_SIZE(mv88e6352_serdes_hw_stats);
}
@@ -139,11 +139,12 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip, int port,
uint8_t **data)
{
struct mv88e6352_serdes_hw_stat *stat;
- int err, i;
+ int lane = -ENODEV;
+ int i;
- err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
- if (err <= 0)
- return err;
+ lane = mv88e6xxx_serdes_get_lane(chip, port);
+ if (lane < 0)
+ return 0;
for (i = 0; i < ARRAY_SIZE(mv88e6352_serdes_hw_stats); i++) {
stat = &mv88e6352_serdes_hw_stats[i];
@@ -152,14 +153,14 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip, int port,
return ARRAY_SIZE(mv88e6352_serdes_hw_stats);
}
-static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
+static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip, int lane,
struct mv88e6352_serdes_hw_stat *stat)
{
u64 val = 0;
u16 reg;
int err;
- err = mv88e6352_serdes_read(chip, stat->reg, ®);
+ err = mv88e6352_serdes_read(chip, lane, stat->reg, ®);
if (err) {
dev_err(chip->dev, "failed to read statistic\n");
return 0;
@@ -168,7 +169,7 @@ static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
val = reg;
if (stat->sizeof_stat == 32) {
- err = mv88e6352_serdes_read(chip, stat->reg + 1, ®);
+ err = mv88e6352_serdes_read(chip, lane, stat->reg + 1, ®);
if (err) {
dev_err(chip->dev, "failed to read statistic\n");
return 0;
@@ -184,11 +185,12 @@ size_t mv88e6352_serdes_get_stats(struct mv88e6xxx_chip *chip, int port,
{
struct mv88e6xxx_port *mv88e6xxx_port = &chip->ports[port];
struct mv88e6352_serdes_hw_stat *stat;
- int i, err;
+ int lane = -ENODEV;
u64 value;
+ int i;
- err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
- if (err <= 0)
+ lane = mv88e6xxx_serdes_get_lane(chip, port);
+ if (lane < 0)
return 0;
BUILD_BUG_ON(ARRAY_SIZE(mv88e6352_serdes_hw_stats) >
@@ -196,7 +198,7 @@ size_t mv88e6352_serdes_get_stats(struct mv88e6xxx_chip *chip, int port,
for (i = 0; i < ARRAY_SIZE(mv88e6352_serdes_hw_stats); i++) {
stat = &mv88e6352_serdes_hw_stats[i];
- value = mv88e6352_serdes_get_stat(chip, stat);
+ value = mv88e6352_serdes_get_stat(chip, lane, stat);
mv88e6xxx_port->serdes_stats[i] += value;
data[i] = mv88e6xxx_port->serdes_stats[i];
}
@@ -211,28 +213,29 @@ unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip, int port)
int mv88e6352_serdes_get_regs_len(struct mv88e6xxx_chip *chip, int port)
{
- int err;
+ int lane = -ENODEV;
- err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
- if (err <= 0)
- return err;
+ lane = mv88e6xxx_serdes_get_lane(chip, port);
+ if (lane < 0)
+ return 0;
return 32 * sizeof(u16);
}
void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p)
{
+ int lane = -ENODEV;
u16 *p = _p;
u16 reg;
int err;
int i;
- err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
- if (err <= 0)
+ lane = mv88e6xxx_serdes_get_lane(chip, port);
+ if (lane < 0)
return;
for (i = 0 ; i < 32; i++) {
- err = mv88e6352_serdes_read(chip, i, ®);
+ err = mv88e6352_serdes_read(chip, lane, i, ®);
if (!err)
p[i] = reg;
}
--
2.36.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions
2026-05-28 21:03 ` [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions Fidan Aliyeva
@ 2026-05-28 21:27 ` Andrew Lunn
2026-06-02 2:13 ` Jakub Kicinski
1 sibling, 0 replies; 9+ messages in thread
From: Andrew Lunn @ 2026-05-28 21:27 UTC (permalink / raw)
To: Fidan Aliyeva
Cc: olteanv, davem, edumazet, kuba, pabeni, marek.behun, netdev,
linux-kernel, Thomas Eckerman
On Thu, May 28, 2026 at 11:03:09PM +0200, Fidan Aliyeva wrote:
> Changes:
> 1. Replace serdes check by mv88e6352_g2_scratch_port_has_serdes in
> mv88e6352_pcs_init function by mv88e6xxx_serdes_get_lane function making it
> more generic.
> 2. Replace serdes checks in mv88e6352_serdes_get_* functions with
> mv88e6xxx_serdes_get_lane making them more generic.
> 3. Add lane argument to mv88e6352_serdes_read so it can be reused later for
> 6321.
>
> Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
> Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
> Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions
2026-05-28 21:03 ` [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions Fidan Aliyeva
2026-05-28 21:27 ` Andrew Lunn
@ 2026-06-02 2:13 ` Jakub Kicinski
1 sibling, 0 replies; 9+ messages in thread
From: Jakub Kicinski @ 2026-06-02 2:13 UTC (permalink / raw)
To: Fidan Aliyeva
Cc: andrew, olteanv, davem, edumazet, pabeni, marek.behun, netdev,
linux-kernel, Thomas Eckerman
On Thu, 28 May 2026 23:03:09 +0200 Fidan Aliyeva wrote:
> 1. Replace serdes check by mv88e6352_g2_scratch_port_has_serdes in
> mv88e6352_pcs_init function by mv88e6xxx_serdes_get_lane function making it
> more generic.
> 2. Replace serdes checks in mv88e6352_serdes_get_* functions with
> mv88e6xxx_serdes_get_lane making them more generic.
> 3. Add lane argument to mv88e6352_serdes_read so it can be reused later for
> 6321.
For the future -- if you're making a list in the commit message your
should rethink whether the commit should be split into multiple
individual changes..
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net-next v3 3/3] mv88e6xxx: Add SERDES Support for mv88e6321
2026-05-28 21:03 [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321 Fidan Aliyeva
2026-05-28 21:03 ` [PATCH net-next v3 1/3] mv88e6xxx: Add mv88e6352_serdes_get_lane Fidan Aliyeva
2026-05-28 21:03 ` [PATCH net-next v3 2/3] mv88e6xxx: Refactor 6352's serdes functions Fidan Aliyeva
@ 2026-05-28 21:03 ` Fidan Aliyeva
2026-05-28 21:30 ` Andrew Lunn
2026-06-02 2:20 ` [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321 patchwork-bot+netdevbpf
3 siblings, 1 reply; 9+ messages in thread
From: Fidan Aliyeva @ 2026-05-28 21:03 UTC (permalink / raw)
To: andrew, olteanv, davem, edumazet, kuba, pabeni, marek.behun
Cc: netdev, linux-kernel, fidan.aliyeva.ext, Thomas Eckerman
Add serdes and pcs_ops functions for mv88e6321. In mv88e6321
2 ports support serdes functionality; port 0 and port 1. These ports are
serdes-only ports.
Changes:
1. Add a function support to return the lane address for the port based on
cmode.
2. Reuse mv88e6352's serdes_get_regs* and pcs_init functions for mv88e6321.
Tested on mv88e6321 switch port 0.
Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
---
drivers/net/dsa/mv88e6xxx/chip.c | 4 ++++
drivers/net/dsa/mv88e6xxx/serdes.c | 18 ++++++++++++++++++
drivers/net/dsa/mv88e6xxx/serdes.h | 3 +++
3 files changed, 25 insertions(+)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 30c8f6e1b367..6c48a99c3b7f 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -5270,10 +5270,14 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
.vtu_loadpurge = mv88e6352_g1_vtu_loadpurge,
.stu_getnext = mv88e6352_g1_stu_getnext,
.stu_loadpurge = mv88e6352_g1_stu_loadpurge,
+ .serdes_get_lane = mv88e6321_serdes_get_lane,
+ .serdes_get_regs_len = mv88e6352_serdes_get_regs_len,
+ .serdes_get_regs = mv88e6352_serdes_get_regs,
.gpio_ops = &mv88e6352_gpio_ops,
.avb_ops = &mv88e6352_avb_ops,
.ptp_ops = &mv88e6352_ptp_ops,
.phylink_get_caps = mv88e632x_phylink_get_caps,
+ .pcs_ops = &mv88e6352_pcs_ops,
};
static const struct mv88e6xxx_ops mv88e6341_ops = {
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c
index 48db9932b989..4a394d47923e 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -241,6 +241,24 @@ void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p)
}
}
+int mv88e6321_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+{
+ int lane = -ENODEV;
+ u8 cmode;
+
+ if (port != 0 && port != 1)
+ return lane;
+
+ cmode = chip->ports[port].cmode;
+
+ if (cmode == MV88E6XXX_PORT_STS_CMODE_100BASEX ||
+ cmode == MV88E6XXX_PORT_STS_CMODE_1000BASEX ||
+ cmode == MV88E6XXX_PORT_STS_CMODE_SGMII)
+ lane = port + MV88E6321_PORT0_LANE;
+
+ return lane;
+}
+
int mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
{
u8 cmode = chip->ports[port].cmode;
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.h b/drivers/net/dsa/mv88e6xxx/serdes.h
index 21e050b328cc..e8f254909d6b 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.h
+++ b/drivers/net/dsa/mv88e6xxx/serdes.h
@@ -14,6 +14,8 @@
struct phylink_link_state;
+#define MV88E6321_PORT0_LANE 0x0c
+
#define MV88E6352_ADDR_SERDES 0x0f
#define MV88E6352_SERDES_PAGE_FIBER 0x01
#define MV88E6352_SERDES_IRQ 0x0b
@@ -114,6 +116,7 @@ struct phylink_link_state;
int mv88e6xxx_pcs_decode_state(struct device *dev, u16 bmsr, u16 lpa,
u16 status, struct phylink_link_state *state);
+int mv88e6321_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
int mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
int mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
int mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
--
2.36.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH net-next v3 3/3] mv88e6xxx: Add SERDES Support for mv88e6321
2026-05-28 21:03 ` [PATCH net-next v3 3/3] mv88e6xxx: Add SERDES Support for mv88e6321 Fidan Aliyeva
@ 2026-05-28 21:30 ` Andrew Lunn
0 siblings, 0 replies; 9+ messages in thread
From: Andrew Lunn @ 2026-05-28 21:30 UTC (permalink / raw)
To: Fidan Aliyeva
Cc: olteanv, davem, edumazet, kuba, pabeni, marek.behun, netdev,
linux-kernel, Thomas Eckerman
On Thu, May 28, 2026 at 11:03:10PM +0200, Fidan Aliyeva wrote:
> Add serdes and pcs_ops functions for mv88e6321. In mv88e6321
> 2 ports support serdes functionality; port 0 and port 1. These ports are
> serdes-only ports.
>
> Changes:
>
> 1. Add a function support to return the lane address for the port based on
> cmode.
> 2. Reuse mv88e6352's serdes_get_regs* and pcs_init functions for mv88e6321.
>
> Tested on mv88e6321 switch port 0.
>
> Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
> Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com>
> Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321
2026-05-28 21:03 [PATCH net-next v3 0/3] mv88e6xxx: SERDES on mv88e6321 Fidan Aliyeva
` (2 preceding siblings ...)
2026-05-28 21:03 ` [PATCH net-next v3 3/3] mv88e6xxx: Add SERDES Support for mv88e6321 Fidan Aliyeva
@ 2026-06-02 2:20 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 9+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-06-02 2:20 UTC (permalink / raw)
To: Fidan Aliyeva
Cc: andrew, olteanv, davem, edumazet, kuba, pabeni, marek.behun,
netdev, linux-kernel
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Thu, 28 May 2026 23:03:07 +0200 you wrote:
> This patch series add code support to be able to use SERDES feature of
> mv88e6321 version of Marvel mv88e6xxx series. mv88e6321 has 2 ports to
> support high speed SERDES but the support is lacking in the driver.
>
> mv88e6321 version has a similar architecture to mv88e6352 version making it
> possible to reuse its pcs functions. That's why the patch series consist of
> 2 parts:
>
> [...]
Here is the summary with links:
- [net-next,v3,1/3] mv88e6xxx: Add mv88e6352_serdes_get_lane
https://git.kernel.org/netdev/net-next/c/1a79978dd271
- [net-next,v3,2/3] mv88e6xxx: Refactor 6352's serdes functions
https://git.kernel.org/netdev/net-next/c/348a46c93e53
- [net-next,v3,3/3] mv88e6xxx: Add SERDES Support for mv88e6321
https://git.kernel.org/netdev/net-next/c/f456c9b936b6
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 9+ messages in thread