Commit c48f7eb3 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller
Browse files

net: dsa: call phy_init_eee in DSA layer



All DSA drivers are calling phy_init_eee if eee_enabled is true.

Move up this statement in the DSA layer to simplify the DSA drivers.
qca8k does not require to cache the ethtool_eee structures from now on.

Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7f5c6d7c
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -360,14 +360,7 @@ static int bcm_sf2_sw_set_eee(struct dsa_switch *ds, int port,
	struct ethtool_eee *p = &priv->port_sts[port].eee;

	p->eee_enabled = e->eee_enabled;

	if (!p->eee_enabled) {
		bcm_sf2_eee_enable_set(ds, port, false);
	} else {
		p->eee_enabled = bcm_sf2_eee_init(ds, port, phydev);
		if (!p->eee_enabled)
			return -EOPNOTSUPP;
	}
	bcm_sf2_eee_enable_set(ds, port, e->eee_enabled);

	return 0;
}
+0 −6
Original line number Diff line number Diff line
@@ -855,12 +855,6 @@ static int mv88e6xxx_set_eee(struct dsa_switch *ds, int port,
	struct mv88e6xxx_chip *chip = ds->priv;
	int err;

	if (e->eee_enabled) {
		err = phy_init_eee(phydev, 0);
		if (err)
			return err;
	}

	mutex_lock(&chip->reg_lock);
	err = mv88e6xxx_energy_detect_write(chip, port, e);
	mutex_unlock(&chip->reg_lock);
+2 −29
Original line number Diff line number Diff line
@@ -654,41 +654,14 @@ qca8k_eee_enable_set(struct dsa_switch *ds, int port, bool enable)
	mutex_unlock(&priv->reg_mutex);
}

static int
qca8k_eee_init(struct dsa_switch *ds, int port,
	       struct phy_device *phy)
{
	int ret;

	ret = phy_init_eee(phy, 0);
	if (ret)
		return 0;

	qca8k_eee_enable_set(ds, port, true);

	return 1;
}

static int
qca8k_set_eee(struct dsa_switch *ds, int port,
	      struct phy_device *phydev,
	      struct ethtool_eee *e)
{
	struct qca8k_priv *priv = (struct qca8k_priv *)ds->priv;
	struct ethtool_eee *p = &priv->port_sts[port].eee;
	int ret = 0;

	p->eee_enabled = e->eee_enabled;
	qca8k_eee_enable_set(ds, port, e->eee_enabled);

	if (!p->eee_enabled) {
		qca8k_eee_enable_set(ds, port, false);
	} else {
		p->eee_enabled = qca8k_eee_init(ds, port, phydev);
		if (!p->eee_enabled)
			ret = -EOPNOTSUPP;
	}

	return ret;
	return 0;
}

static int
+0 −1
Original line number Diff line number Diff line
@@ -156,7 +156,6 @@ enum qca8k_fdb_cmd {
};

struct ar8xxx_port_status {
	struct ethtool_eee eee;
	int enabled;
};

+6 −0
Original line number Diff line number Diff line
@@ -659,6 +659,12 @@ static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
	if (ret)
		return ret;

	if (e->eee_enabled) {
		ret = phy_init_eee(p->phy, 0);
		if (ret)
			return ret;
	}

	return phy_ethtool_set_eee(p->phy, e);
}