From: Pavana Sharma <pavana.sha...@digi.com>

Returning 0 is no more an error case with MV88E6393 family
which has serdes lane numbers 0, 9 or 10.
So with this change .serdes_get_lane will return lane number
or -errno (-ENODEV or -EOPNOTSUPP).

Signed-off-by: Pavana Sharma <pavana.sha...@digi.com>
Reviewed-by: Andrew Lunn <and...@lunn.ch>
Reviewed-by: Vladimir Oltean <olte...@gmail.com>
Signed-off-by: Marek Behún <ka...@kernel.org>
---
 drivers/net/dsa/mv88e6xxx/chip.c   | 28 +++++-----
 drivers/net/dsa/mv88e6xxx/chip.h   | 16 +++---
 drivers/net/dsa/mv88e6xxx/port.c   |  8 +--
 drivers/net/dsa/mv88e6xxx/serdes.c | 82 +++++++++++++++---------------
 drivers/net/dsa/mv88e6xxx/serdes.h | 64 +++++++++++------------
 5 files changed, 99 insertions(+), 99 deletions(-)

diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 4aa7d0a8f197..44591ef487af 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -485,12 +485,12 @@ static int mv88e6xxx_serdes_pcs_get_state(struct 
dsa_switch *ds, int port,
                                          struct phylink_link_state *state)
 {
        struct mv88e6xxx_chip *chip = ds->priv;
-       u8 lane;
+       int lane;
        int err;
 
        mv88e6xxx_reg_lock(chip);
        lane = mv88e6xxx_serdes_get_lane(chip, port);
-       if (lane && chip->info->ops->serdes_pcs_get_state)
+       if (lane >= 0 && chip->info->ops->serdes_pcs_get_state)
                err = chip->info->ops->serdes_pcs_get_state(chip, port, lane,
                                                            state);
        else
@@ -506,11 +506,11 @@ static int mv88e6xxx_serdes_pcs_config(struct 
mv88e6xxx_chip *chip, int port,
                                       const unsigned long *advertise)
 {
        const struct mv88e6xxx_ops *ops = chip->info->ops;
-       u8 lane;
+       int lane;
 
        if (ops->serdes_pcs_config) {
                lane = mv88e6xxx_serdes_get_lane(chip, port);
-               if (lane)
+               if (lane >= 0)
                        return ops->serdes_pcs_config(chip, port, lane, mode,
                                                      interface, advertise);
        }
@@ -523,14 +523,14 @@ static void mv88e6xxx_serdes_pcs_an_restart(struct 
dsa_switch *ds, int port)
        struct mv88e6xxx_chip *chip = ds->priv;
        const struct mv88e6xxx_ops *ops;
        int err = 0;
-       u8 lane;
+       int lane;
 
        ops = chip->info->ops;
 
        if (ops->serdes_pcs_an_restart) {
                mv88e6xxx_reg_lock(chip);
                lane = mv88e6xxx_serdes_get_lane(chip, port);
-               if (lane)
+               if (lane >= 0)
                        err = ops->serdes_pcs_an_restart(chip, port, lane);
                mv88e6xxx_reg_unlock(chip);
 
@@ -544,11 +544,11 @@ static int mv88e6xxx_serdes_pcs_link_up(struct 
mv88e6xxx_chip *chip, int port,
                                        int speed, int duplex)
 {
        const struct mv88e6xxx_ops *ops = chip->info->ops;
-       u8 lane;
+       int lane;
 
        if (!phylink_autoneg_inband(mode) && ops->serdes_pcs_link_up) {
                lane = mv88e6xxx_serdes_get_lane(chip, port);
-               if (lane)
+               if (lane >= 0)
                        return ops->serdes_pcs_link_up(chip, port, lane,
                                                       speed, duplex);
        }
@@ -2429,11 +2429,11 @@ static irqreturn_t mv88e6xxx_serdes_irq_thread_fn(int 
irq, void *dev_id)
        struct mv88e6xxx_chip *chip = mvp->chip;
        irqreturn_t ret = IRQ_NONE;
        int port = mvp->port;
-       u8 lane;
+       int lane;
 
        mv88e6xxx_reg_lock(chip);
        lane = mv88e6xxx_serdes_get_lane(chip, port);
-       if (lane)
+       if (lane >= 0)
                ret = mv88e6xxx_serdes_irq_status(chip, port, lane);
        mv88e6xxx_reg_unlock(chip);
 
@@ -2441,7 +2441,7 @@ static irqreturn_t mv88e6xxx_serdes_irq_thread_fn(int 
irq, void *dev_id)
 }
 
 static int mv88e6xxx_serdes_irq_request(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane)
+                                       int lane)
 {
        struct mv88e6xxx_port *dev_id = &chip->ports[port];
        unsigned int irq;
@@ -2470,7 +2470,7 @@ static int mv88e6xxx_serdes_irq_request(struct 
mv88e6xxx_chip *chip, int port,
 }
 
 static int mv88e6xxx_serdes_irq_free(struct mv88e6xxx_chip *chip, int port,
-                                    u8 lane)
+                                    int lane)
 {
        struct mv88e6xxx_port *dev_id = &chip->ports[port];
        unsigned int irq = dev_id->serdes_irq;
@@ -2495,11 +2495,11 @@ static int mv88e6xxx_serdes_irq_free(struct 
mv88e6xxx_chip *chip, int port,
 static int mv88e6xxx_serdes_power(struct mv88e6xxx_chip *chip, int port,
                                  bool on)
 {
-       u8 lane;
+       int lane;
        int err;
 
        lane = mv88e6xxx_serdes_get_lane(chip, port);
-       if (!lane)
+       if (lane < 0)
                return 0;
 
        if (on) {
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h
index 3543055bcb51..1ac8338d2256 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.h
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
@@ -511,30 +511,30 @@ struct mv88e6xxx_ops {
        int (*mgmt_rsvd2cpu)(struct mv88e6xxx_chip *chip);
 
        /* Power on/off a SERDES interface */
-       int (*serdes_power)(struct mv88e6xxx_chip *chip, int port, u8 lane,
+       int (*serdes_power)(struct mv88e6xxx_chip *chip, int port, int lane,
                            bool up);
 
        /* SERDES lane mapping */
-       u8 (*serdes_get_lane)(struct mv88e6xxx_chip *chip, int port);
+       int (*serdes_get_lane)(struct mv88e6xxx_chip *chip, int port);
 
        int (*serdes_pcs_get_state)(struct mv88e6xxx_chip *chip, int port,
-                                   u8 lane, struct phylink_link_state *state);
+                                   int lane, struct phylink_link_state *state);
        int (*serdes_pcs_config)(struct mv88e6xxx_chip *chip, int port,
-                                u8 lane, unsigned int mode,
+                                int lane, unsigned int mode,
                                 phy_interface_t interface,
                                 const unsigned long *advertise);
        int (*serdes_pcs_an_restart)(struct mv88e6xxx_chip *chip, int port,
-                                    u8 lane);
+                                    int lane);
        int (*serdes_pcs_link_up)(struct mv88e6xxx_chip *chip, int port,
-                                 u8 lane, int speed, int duplex);
+                                 int lane, int speed, int duplex);
 
        /* SERDES interrupt handling */
        unsigned int (*serdes_irq_mapping)(struct mv88e6xxx_chip *chip,
                                           int port);
-       int (*serdes_irq_enable)(struct mv88e6xxx_chip *chip, int port, u8 lane,
+       int (*serdes_irq_enable)(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                 bool enable);
        irqreturn_t (*serdes_irq_status)(struct mv88e6xxx_chip *chip, int port,
-                                        u8 lane);
+                                        int lane);
 
        /* Statistics from the SERDES interface */
        int (*serdes_get_sset_count)(struct mv88e6xxx_chip *chip, int port);
diff --git a/drivers/net/dsa/mv88e6xxx/port.c b/drivers/net/dsa/mv88e6xxx/port.c
index 77a5fd1798cd..0af596957b97 100644
--- a/drivers/net/dsa/mv88e6xxx/port.c
+++ b/drivers/net/dsa/mv88e6xxx/port.c
@@ -429,8 +429,8 @@ phy_interface_t mv88e6390x_port_max_speed_mode(int port)
 static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
                                    phy_interface_t mode, bool force)
 {
-       u8 lane;
        u16 cmode;
+       int lane;
        u16 reg;
        int err;
 
@@ -466,7 +466,7 @@ static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip 
*chip, int port,
                return 0;
 
        lane = mv88e6xxx_serdes_get_lane(chip, port);
-       if (lane) {
+       if (lane >= 0) {
                if (chip->ports[port].serdes_irq) {
                        err = mv88e6xxx_serdes_irq_disable(chip, port, lane);
                        if (err)
@@ -495,8 +495,8 @@ static int mv88e6xxx_port_set_cmode(struct mv88e6xxx_chip 
*chip, int port,
                chip->ports[port].cmode = cmode;
 
                lane = mv88e6xxx_serdes_get_lane(chip, port);
-               if (!lane)
-                       return -ENODEV;
+               if (lane < 0)
+                       return lane;
 
                err = mv88e6xxx_serdes_power_up(chip, port, lane);
                if (err)
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c 
b/drivers/net/dsa/mv88e6xxx/serdes.c
index 3195936dc5be..e48260c5c6ba 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.c
+++ b/drivers/net/dsa/mv88e6xxx/serdes.c
@@ -95,7 +95,7 @@ static int mv88e6xxx_serdes_pcs_get_state(struct 
mv88e6xxx_chip *chip,
        return 0;
 }
 
-int mv88e6352_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6352_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
                           bool up)
 {
        u16 val, new_val;
@@ -117,7 +117,7 @@ int mv88e6352_serdes_power(struct mv88e6xxx_chip *chip, int 
port, u8 lane,
 }
 
 int mv88e6352_serdes_pcs_config(struct mv88e6xxx_chip *chip, int port,
-                               u8 lane, unsigned int mode,
+                               int lane, unsigned int mode,
                                phy_interface_t interface,
                                const unsigned long *advertise)
 {
@@ -166,7 +166,7 @@ int mv88e6352_serdes_pcs_config(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 int mv88e6352_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
-                                  u8 lane, struct phylink_link_state *state)
+                                  int lane, struct phylink_link_state *state)
 {
        u16 lpa, status;
        int err;
@@ -187,7 +187,7 @@ int mv88e6352_serdes_pcs_get_state(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 int mv88e6352_serdes_pcs_an_restart(struct mv88e6xxx_chip *chip, int port,
-                                   u8 lane)
+                                   int lane)
 {
        u16 bmcr;
        int err;
@@ -200,7 +200,7 @@ int mv88e6352_serdes_pcs_an_restart(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 int mv88e6352_serdes_pcs_link_up(struct mv88e6xxx_chip *chip, int port,
-                                u8 lane, int speed, int duplex)
+                                int lane, int speed, int duplex)
 {
        u16 val, bmcr;
        int err;
@@ -230,10 +230,10 @@ int mv88e6352_serdes_pcs_link_up(struct mv88e6xxx_chip 
*chip, int port,
        return mv88e6352_serdes_write(chip, MII_BMCR, bmcr);
 }
 
-u8 mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+int mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
 {
        u8 cmode = chip->ports[port].cmode;
-       u8 lane = 0;
+       int lane = -ENODEV;
 
        if ((cmode == MV88E6XXX_PORT_STS_CMODE_100BASEX) ||
            (cmode == MV88E6XXX_PORT_STS_CMODE_1000BASEX) ||
@@ -245,7 +245,7 @@ u8 mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, 
int port)
 
 static bool mv88e6352_port_has_serdes(struct mv88e6xxx_chip *chip, int port)
 {
-       if (mv88e6xxx_serdes_get_lane(chip, port))
+       if (mv88e6xxx_serdes_get_lane(chip, port) >= 0)
                return true;
 
        return false;
@@ -354,7 +354,7 @@ static void mv88e6352_serdes_irq_link(struct mv88e6xxx_chip 
*chip, int port)
 }
 
 irqreturn_t mv88e6352_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane)
+                                       int lane)
 {
        irqreturn_t ret = IRQ_NONE;
        u16 status;
@@ -372,7 +372,7 @@ irqreturn_t mv88e6352_serdes_irq_status(struct 
mv88e6xxx_chip *chip, int port,
        return ret;
 }
 
-int mv88e6352_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6352_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                bool enable)
 {
        u16 val = 0;
@@ -413,10 +413,10 @@ void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip 
*chip, int port, void *_p)
        }
 }
 
-u8 mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+int mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
 {
        u8 cmode = chip->ports[port].cmode;
-       u8 lane = 0;
+       int lane = -ENODEV;
 
        switch (port) {
        case 5:
@@ -430,7 +430,7 @@ u8 mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, 
int port)
        return lane;
 }
 
-int mv88e6185_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6185_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
                           bool up)
 {
        /* The serdes power can't be controlled on this switch chip but we need
@@ -440,7 +440,7 @@ int mv88e6185_serdes_power(struct mv88e6xxx_chip *chip, int 
port, u8 lane,
        return 0;
 }
 
-u8 mv88e6185_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+int mv88e6185_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
 {
        /* There are no configurable serdes lanes on this switch chip but we
         * need to return non-zero so that callers of
@@ -456,7 +456,7 @@ u8 mv88e6185_serdes_get_lane(struct mv88e6xxx_chip *chip, 
int port)
 }
 
 int mv88e6185_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
-                                  u8 lane, struct phylink_link_state *state)
+                                  int lane, struct phylink_link_state *state)
 {
        int err;
        u16 status;
@@ -492,7 +492,7 @@ int mv88e6185_serdes_pcs_get_state(struct mv88e6xxx_chip 
*chip, int port,
        return 0;
 }
 
-int mv88e6097_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6097_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                bool enable)
 {
        u8 cmode = chip->ports[port].cmode;
@@ -525,7 +525,7 @@ static void mv88e6097_serdes_irq_link(struct mv88e6xxx_chip 
*chip, int port)
 }
 
 irqreturn_t mv88e6097_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane)
+                                       int lane)
 {
        u8 cmode = chip->ports[port].cmode;
 
@@ -539,10 +539,10 @@ irqreturn_t mv88e6097_serdes_irq_status(struct 
mv88e6xxx_chip *chip, int port,
        return IRQ_NONE;
 }
 
-u8 mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+int mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
 {
        u8 cmode = chip->ports[port].cmode;
-       u8 lane = 0;
+       int lane = -ENODEV;
 
        switch (port) {
        case 9:
@@ -562,12 +562,12 @@ u8 mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, 
int port)
        return lane;
 }
 
-u8 mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
+int mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port)
 {
        u8 cmode_port = chip->ports[port].cmode;
        u8 cmode_port10 = chip->ports[10].cmode;
        u8 cmode_port9 = chip->ports[9].cmode;
-       u8 lane = 0;
+       int lane = -ENODEV;
 
        switch (port) {
        case 2:
@@ -638,7 +638,7 @@ u8 mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, 
int port)
 }
 
 /* Set power up/down for 10GBASE-R and 10GBASE-X4/X2 */
-static int mv88e6390_serdes_power_10g(struct mv88e6xxx_chip *chip, u8 lane,
+static int mv88e6390_serdes_power_10g(struct mv88e6xxx_chip *chip, int lane,
                                      bool up)
 {
        u16 val, new_val;
@@ -665,7 +665,7 @@ static int mv88e6390_serdes_power_10g(struct mv88e6xxx_chip 
*chip, u8 lane,
 }
 
 /* Set power up/down for SGMII and 1000Base-X */
-static int mv88e6390_serdes_power_sgmii(struct mv88e6xxx_chip *chip, u8 lane,
+static int mv88e6390_serdes_power_sgmii(struct mv88e6xxx_chip *chip, int lane,
                                        bool up)
 {
        u16 val, new_val;
@@ -701,7 +701,7 @@ static struct mv88e6390_serdes_hw_stat 
mv88e6390_serdes_hw_stats[] = {
 
 int mv88e6390_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port)
 {
-       if (mv88e6390_serdes_get_lane(chip, port) == 0)
+       if (mv88e6390_serdes_get_lane(chip, port) < 0)
                return 0;
 
        return ARRAY_SIZE(mv88e6390_serdes_hw_stats);
@@ -713,7 +713,7 @@ int mv88e6390_serdes_get_strings(struct mv88e6xxx_chip 
*chip,
        struct mv88e6390_serdes_hw_stat *stat;
        int i;
 
-       if (mv88e6390_serdes_get_lane(chip, port) == 0)
+       if (mv88e6390_serdes_get_lane(chip, port) < 0)
                return 0;
 
        for (i = 0; i < ARRAY_SIZE(mv88e6390_serdes_hw_stats); i++) {
@@ -750,7 +750,7 @@ int mv88e6390_serdes_get_stats(struct mv88e6xxx_chip *chip, 
int port,
        int i;
 
        lane = mv88e6390_serdes_get_lane(chip, port);
-       if (lane == 0)
+       if (lane < 0)
                return 0;
 
        for (i = 0; i < ARRAY_SIZE(mv88e6390_serdes_hw_stats); i++) {
@@ -761,7 +761,7 @@ int mv88e6390_serdes_get_stats(struct mv88e6xxx_chip *chip, 
int port,
        return ARRAY_SIZE(mv88e6390_serdes_hw_stats);
 }
 
-static int mv88e6390_serdes_enable_checker(struct mv88e6xxx_chip *chip, u8 
lane)
+static int mv88e6390_serdes_enable_checker(struct mv88e6xxx_chip *chip, int 
lane)
 {
        u16 reg;
        int err;
@@ -776,7 +776,7 @@ static int mv88e6390_serdes_enable_checker(struct 
mv88e6xxx_chip *chip, u8 lane)
                                      MV88E6390_PG_CONTROL, reg);
 }
 
-int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
                           bool up)
 {
        u8 cmode = chip->ports[port].cmode;
@@ -801,7 +801,7 @@ int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int 
port, u8 lane,
 }
 
 int mv88e6390_serdes_pcs_config(struct mv88e6xxx_chip *chip, int port,
-                               u8 lane, unsigned int mode,
+                               int lane, unsigned int mode,
                                phy_interface_t interface,
                                const unsigned long *advertise)
 {
@@ -860,7 +860,7 @@ int mv88e6390_serdes_pcs_config(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 static int mv88e6390_serdes_pcs_get_state_sgmii(struct mv88e6xxx_chip *chip,
-       int port, u8 lane, struct phylink_link_state *state)
+       int port, int lane, struct phylink_link_state *state)
 {
        u16 lpa, status;
        int err;
@@ -883,7 +883,7 @@ static int mv88e6390_serdes_pcs_get_state_sgmii(struct 
mv88e6xxx_chip *chip,
 }
 
 static int mv88e6390_serdes_pcs_get_state_10g(struct mv88e6xxx_chip *chip,
-       int port, u8 lane, struct phylink_link_state *state)
+       int port, int lane, struct phylink_link_state *state)
 {
        u16 status;
        int err;
@@ -903,7 +903,7 @@ static int mv88e6390_serdes_pcs_get_state_10g(struct 
mv88e6xxx_chip *chip,
 }
 
 int mv88e6390_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
-                                  u8 lane, struct phylink_link_state *state)
+                                  int lane, struct phylink_link_state *state)
 {
        switch (state->interface) {
        case PHY_INTERFACE_MODE_SGMII:
@@ -922,7 +922,7 @@ int mv88e6390_serdes_pcs_get_state(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 int mv88e6390_serdes_pcs_an_restart(struct mv88e6xxx_chip *chip, int port,
-                                   u8 lane)
+                                   int lane)
 {
        u16 bmcr;
        int err;
@@ -938,7 +938,7 @@ int mv88e6390_serdes_pcs_an_restart(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 int mv88e6390_serdes_pcs_link_up(struct mv88e6xxx_chip *chip, int port,
-                                u8 lane, int speed, int duplex)
+                                int lane, int speed, int duplex)
 {
        u16 val, bmcr;
        int err;
@@ -972,7 +972,7 @@ int mv88e6390_serdes_pcs_link_up(struct mv88e6xxx_chip 
*chip, int port,
 }
 
 static void mv88e6390_serdes_irq_link_sgmii(struct mv88e6xxx_chip *chip,
-                                           int port, u8 lane)
+                                           int port, int lane)
 {
        u16 bmsr;
        int err;
@@ -989,7 +989,7 @@ static void mv88e6390_serdes_irq_link_sgmii(struct 
mv88e6xxx_chip *chip,
 }
 
 static int mv88e6390_serdes_irq_enable_sgmii(struct mv88e6xxx_chip *chip,
-                                            u8 lane, bool enable)
+                                            int lane, bool enable)
 {
        u16 val = 0;
 
@@ -1001,7 +1001,7 @@ static int mv88e6390_serdes_irq_enable_sgmii(struct 
mv88e6xxx_chip *chip,
                                      MV88E6390_SGMII_INT_ENABLE, val);
 }
 
-int mv88e6390_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6390_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                bool enable)
 {
        u8 cmode = chip->ports[port].cmode;
@@ -1017,7 +1017,7 @@ int mv88e6390_serdes_irq_enable(struct mv88e6xxx_chip 
*chip, int port, u8 lane,
 }
 
 static int mv88e6390_serdes_irq_status_sgmii(struct mv88e6xxx_chip *chip,
-                                            u8 lane, u16 *status)
+                                            int lane, u16 *status)
 {
        int err;
 
@@ -1028,7 +1028,7 @@ static int mv88e6390_serdes_irq_status_sgmii(struct 
mv88e6xxx_chip *chip,
 }
 
 irqreturn_t mv88e6390_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane)
+                                       int lane)
 {
        u8 cmode = chip->ports[port].cmode;
        irqreturn_t ret = IRQ_NONE;
@@ -1087,7 +1087,7 @@ static const u16 mv88e6390_serdes_regs[] = {
 
 int mv88e6390_serdes_get_regs_len(struct mv88e6xxx_chip *chip, int port)
 {
-       if (mv88e6xxx_serdes_get_lane(chip, port) == 0)
+       if (mv88e6xxx_serdes_get_lane(chip, port) < 0)
                return 0;
 
        return ARRAY_SIZE(mv88e6390_serdes_regs) * sizeof(u16);
@@ -1102,7 +1102,7 @@ void mv88e6390_serdes_get_regs(struct mv88e6xxx_chip 
*chip, int port, void *_p)
        int i;
 
        lane = mv88e6xxx_serdes_get_lane(chip, port);
-       if (lane == 0)
+       if (lane < 0)
                return;
 
        for (i = 0 ; i < ARRAY_SIZE(mv88e6390_serdes_regs); i++) {
diff --git a/drivers/net/dsa/mv88e6xxx/serdes.h 
b/drivers/net/dsa/mv88e6xxx/serdes.h
index 93822ef9bab8..ce4d0fef124d 100644
--- a/drivers/net/dsa/mv88e6xxx/serdes.h
+++ b/drivers/net/dsa/mv88e6xxx/serdes.h
@@ -73,55 +73,55 @@
 #define MV88E6390_PG_CONTROL           0xf010
 #define MV88E6390_PG_CONTROL_ENABLE_PC         BIT(0)
 
-u8 mv88e6185_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
-u8 mv88e6341_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
-u8 mv88e6352_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
-u8 mv88e6390_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
-u8 mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
+int mv88e6185_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);
+int mv88e6390x_serdes_get_lane(struct mv88e6xxx_chip *chip, int port);
 int mv88e6352_serdes_pcs_config(struct mv88e6xxx_chip *chip, int port,
-                               u8 lane, unsigned int mode,
+                               int lane, unsigned int mode,
                                phy_interface_t interface,
                                const unsigned long *advertise);
 int mv88e6390_serdes_pcs_config(struct mv88e6xxx_chip *chip, int port,
-                               u8 lane, unsigned int mode,
+                               int lane, unsigned int mode,
                                phy_interface_t interface,
                                const unsigned long *advertise);
 int mv88e6185_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
-                                  u8 lane, struct phylink_link_state *state);
+                                  int lane, struct phylink_link_state *state);
 int mv88e6352_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
-                                  u8 lane, struct phylink_link_state *state);
+                                  int lane, struct phylink_link_state *state);
 int mv88e6390_serdes_pcs_get_state(struct mv88e6xxx_chip *chip, int port,
-                                  u8 lane, struct phylink_link_state *state);
+                                  int lane, struct phylink_link_state *state);
 int mv88e6352_serdes_pcs_an_restart(struct mv88e6xxx_chip *chip, int port,
-                                   u8 lane);
+                                   int lane);
 int mv88e6390_serdes_pcs_an_restart(struct mv88e6xxx_chip *chip, int port,
-                                   u8 lane);
+                                   int lane);
 int mv88e6352_serdes_pcs_link_up(struct mv88e6xxx_chip *chip, int port,
-                                u8 lane, int speed, int duplex);
+                                int lane, int speed, int duplex);
 int mv88e6390_serdes_pcs_link_up(struct mv88e6xxx_chip *chip, int port,
-                                u8 lane, int speed, int duplex);
+                                int lane, int speed, int duplex);
 unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
                                          int port);
 unsigned int mv88e6390_serdes_irq_mapping(struct mv88e6xxx_chip *chip,
                                          int port);
-int mv88e6185_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6185_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
                           bool up);
-int mv88e6352_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6352_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
                           bool on);
-int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6390_serdes_power(struct mv88e6xxx_chip *chip, int port, int lane,
                           bool on);
-int mv88e6097_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6097_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                bool enable);
-int mv88e6352_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6352_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                bool enable);
-int mv88e6390_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, u8 lane,
+int mv88e6390_serdes_irq_enable(struct mv88e6xxx_chip *chip, int port, int 
lane,
                                bool enable);
 irqreturn_t mv88e6097_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane);
+                                       int lane);
 irqreturn_t mv88e6352_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane);
+                                       int lane);
 irqreturn_t mv88e6390_serdes_irq_status(struct mv88e6xxx_chip *chip, int port,
-                                       u8 lane);
+                                       int lane);
 int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port);
 int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip,
                                 int port, uint8_t *data);
@@ -138,18 +138,18 @@ void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip 
*chip, int port, void *_p);
 int mv88e6390_serdes_get_regs_len(struct mv88e6xxx_chip *chip, int port);
 void mv88e6390_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void 
*_p);
 
-/* Return the (first) SERDES lane address a port is using, 0 otherwise. */
-static inline u8 mv88e6xxx_serdes_get_lane(struct mv88e6xxx_chip *chip,
-                                          int port)
+/* Return the (first) SERDES lane address a port is using, -errno otherwise. */
+static inline int mv88e6xxx_serdes_get_lane(struct mv88e6xxx_chip *chip,
+                                           int port)
 {
        if (!chip->info->ops->serdes_get_lane)
-               return 0;
+               return -EOPNOTSUPP;
 
        return chip->info->ops->serdes_get_lane(chip, port);
 }
 
 static inline int mv88e6xxx_serdes_power_up(struct mv88e6xxx_chip *chip,
-                                           int port, u8 lane)
+                                           int port, int lane)
 {
        if (!chip->info->ops->serdes_power)
                return -EOPNOTSUPP;
@@ -158,7 +158,7 @@ static inline int mv88e6xxx_serdes_power_up(struct 
mv88e6xxx_chip *chip,
 }
 
 static inline int mv88e6xxx_serdes_power_down(struct mv88e6xxx_chip *chip,
-                                             int port, u8 lane)
+                                             int port, int lane)
 {
        if (!chip->info->ops->serdes_power)
                return -EOPNOTSUPP;
@@ -176,7 +176,7 @@ mv88e6xxx_serdes_irq_mapping(struct mv88e6xxx_chip *chip, 
int port)
 }
 
 static inline int mv88e6xxx_serdes_irq_enable(struct mv88e6xxx_chip *chip,
-                                             int port, u8 lane)
+                                             int port, int lane)
 {
        if (!chip->info->ops->serdes_irq_enable)
                return -EOPNOTSUPP;
@@ -185,7 +185,7 @@ static inline int mv88e6xxx_serdes_irq_enable(struct 
mv88e6xxx_chip *chip,
 }
 
 static inline int mv88e6xxx_serdes_irq_disable(struct mv88e6xxx_chip *chip,
-                                              int port, u8 lane)
+                                              int port, int lane)
 {
        if (!chip->info->ops->serdes_irq_enable)
                return -EOPNOTSUPP;
@@ -194,7 +194,7 @@ static inline int mv88e6xxx_serdes_irq_disable(struct 
mv88e6xxx_chip *chip,
 }
 
 static inline irqreturn_t
-mv88e6xxx_serdes_irq_status(struct mv88e6xxx_chip *chip, int port, u8 lane)
+mv88e6xxx_serdes_irq_status(struct mv88e6xxx_chip *chip, int port, int lane)
 {
        if (!chip->info->ops->serdes_irq_status)
                return IRQ_NONE;
-- 
2.26.2

Reply via email to