mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 08:58:07 +00:00
net: dsa: mv88e6xxx: change serdes lane parameter type from u8 type to int
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.sharma@digi.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: Marek Behún <kabel@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ac1bbf8a81
commit
193c5b2698
5 changed files with 99 additions and 99 deletions
|
@ -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);
|
||||
}
|
||||
|
@ -2460,11 +2460,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);
|
||||
|
||||
|
@ -2472,7 +2472,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;
|
||||
|
@ -2501,7 +2501,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;
|
||||
|
@ -2526,11 +2526,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) {
|
||||
|
|
|
@ -513,30 +513,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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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++) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue