Hi Andrew,

Andrew Lunn <and...@lunn.ch> writes:

>  static int mv88e6xxx_serdes_power(struct mv88e6xxx_chip *chip, int port,
>                                 bool on)
>  {
> -     if (chip->info->ops->serdes_power)
> -             return chip->info->ops->serdes_power(chip, port, on);
> +     int err = 0;
>  
> -     return 0;
> +     if (chip->info->ops->serdes_power) {
> +             err = chip->info->ops->serdes_power(chip, port, on);
> +             if (err)
> +                     dev_err(chip->dev,
> +                             "Failed to change SERDES power: %d\n", err);
> +     }
> +
> +     return err;
>  }

This is not necessary, please keep mv88e6xxx_serdes_power as it is.

>  static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
> @@ -1862,12 +1868,15 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip 
> *chip, int port)
>       if (err)
>               return err;
>  
> -     /* If this port is connected to a SerDes, make sure the SerDes is
> -      * powered up.
> +     /* Enable the SERDES interface for DSA and CPU ports. Normal
> +      * ports SERDES are enabled when the port is enabled, thus
> +      * saving a bit of power.
>        */
> -     err = mv88e6xxx_serdes_power(chip, port, true);
> -     if (err)
> -             return err;
> +     if ((dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port))) {
> +             err = mv88e6xxx_serdes_power(chip, port, true);
> +             if (err)
> +                     return err;
> +     }

This is OK.

>  
>       /* Port Control 2: don't force a good FCS, set the maximum frame size to
>        * 10240 bytes, disable 802.1q tags checking, don't discard tagged or
> @@ -1969,6 +1978,29 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip 
> *chip, int port)
>       return mv88e6xxx_port_write(chip, port, PORT_DEFAULT_VLAN, 0x0000);
>  }
>  
> +static int mv88e6xxx_port_enable(struct dsa_switch *ds, int port,
> +                              struct phy_device *phydev)
> +{
> +     struct mv88e6xxx_chip *chip = ds->priv;
> +     int err = 0;
> +
> +     mutex_lock(&chip->reg_lock);
> +     mv88e6xxx_serdes_power(chip, port, true);
> +     mutex_unlock(&chip->reg_lock);

Please return the error as usual:

    int err;

    mutex_lock(&chip->reg_lock);
    err = mv88e6xxx_serdes_power(chip, port, true);
    mutex_unlock(&chip->reg_lock);
    
    return err;

> +
> +     return err;
> +}
> +
> +static void mv88e6xxx_port_disable(struct dsa_switch *ds, int port,
> +                                struct phy_device *phydev)
> +{
> +     struct mv88e6xxx_chip *chip = ds->priv;
> +
> +     mutex_lock(&chip->reg_lock);
> +     mv88e6xxx_serdes_power(chip, port, false);
> +     mutex_unlock(&chip->reg_lock);

And add the message here, since this is that specific function returning
void which skips errors:

    mutex_lock(&chip->reg_lock);
    if (mv88e6xxx_serdes_power(chip, port, false))
        dev_err(chip->dev, "Failed to change SERDES power: %d\n", err);
    mutex_unlock(&chip->reg_lock);


Thanks,

        Vivien

Reply via email to