]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mv88e6xxx: Add mv88e6352_serdes_get_lane
authorFidan Aliyeva <fidan.aliyeva.ext@ericsson.com>
Thu, 28 May 2026 21:03:08 +0000 (23:03 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 2 Jun 2026 02:11:14 +0000 (19:11 -0700)
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>
Link: https://patch.msgid.link/20260528210310.1365858-2-fidan.aliyeva.ext@ericsson.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/mv88e6xxx/chip.c
drivers/net/dsa/mv88e6xxx/serdes.c
drivers/net/dsa/mv88e6xxx/serdes.h

index c30e4c13565a5050189d42b3ffffbfb403489d4a..b63a8200e2878be8743da477b80e0939457e7c25 100644 (file)
@@ -4672,6 +4672,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,
@@ -4775,6 +4776,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,
@@ -5047,6 +5049,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,
@@ -5487,6 +5490,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,
index d3d3c121a32de21266377cd0b812a7f4a5d06b49..a23eb3d50b6e7677471d540337ff3ff0cdd015cb 100644 (file)
@@ -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;
index 17a3e85fabaa34bdc7071ffb84f0384568758d86..21e050b328cce0a8dca6e7ff96a87e21fe9b1c4e 100644 (file)
@@ -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);