Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

net: dsa: mv88e6xxx: factorize EEE access



Add a MV88E6XXX_FLAG_EEE flag to describe switch models featuring Energy
Efficient Ethernet. Use it to conditionally support such access in the
common code.

Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1d13a06e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -117,6 +117,8 @@ struct dsa_switch_driver mv88e6123_switch_driver = {
	.set_addr		= mv88e6xxx_set_addr,
	.phy_read		= mv88e6xxx_phy_read,
	.phy_write		= mv88e6xxx_phy_write,
	.set_eee		= mv88e6xxx_set_eee,
	.get_eee		= mv88e6xxx_get_eee,
	.get_strings		= mv88e6xxx_get_strings,
	.get_ethtool_stats	= mv88e6xxx_get_ethtool_stats,
	.get_sset_count		= mv88e6xxx_get_sset_count,
+2 −0
Original line number Diff line number Diff line
@@ -150,6 +150,8 @@ struct dsa_switch_driver mv88e6131_switch_driver = {
	.set_addr		= mv88e6xxx_set_addr,
	.phy_read		= mv88e6xxx_phy_read,
	.phy_write		= mv88e6xxx_phy_write,
	.set_eee		= mv88e6xxx_set_eee,
	.get_eee		= mv88e6xxx_get_eee,
	.get_strings		= mv88e6xxx_get_strings,
	.get_ethtool_stats	= mv88e6xxx_get_ethtool_stats,
	.get_sset_count		= mv88e6xxx_get_sset_count,
+2 −0
Original line number Diff line number Diff line
@@ -126,6 +126,8 @@ struct dsa_switch_driver mv88e6171_switch_driver = {
	.set_addr		= mv88e6xxx_set_addr,
	.phy_read		= mv88e6xxx_phy_read,
	.phy_write		= mv88e6xxx_phy_write,
	.set_eee		= mv88e6xxx_set_eee,
	.get_eee		= mv88e6xxx_get_eee,
	.get_strings		= mv88e6xxx_get_strings,
	.get_ethtool_stats	= mv88e6xxx_get_ethtool_stats,
	.get_sset_count		= mv88e6xxx_get_sset_count,
+6 −0
Original line number Diff line number Diff line
@@ -1105,6 +1105,9 @@ int mv88e6xxx_get_eee(struct dsa_switch *ds, int port, struct ethtool_eee *e)
	struct mv88e6xxx_priv_state *ps = ds_to_priv(ds);
	int reg;

	if (!mv88e6xxx_has(ps, MV88E6XXX_FLAG_EEE))
		return -EOPNOTSUPP;

	mutex_lock(&ps->smi_mutex);

	reg = _mv88e6xxx_phy_read_indirect(ps, port, 16);
@@ -1133,6 +1136,9 @@ int mv88e6xxx_set_eee(struct dsa_switch *ds, int port,
	int reg;
	int ret;

	if (!mv88e6xxx_has(ps, MV88E6XXX_FLAG_EEE))
		return -EOPNOTSUPP;

	mutex_lock(&ps->smi_mutex);

	ret = _mv88e6xxx_phy_read_indirect(ps, port, 16);
+9 −2
Original line number Diff line number Diff line
@@ -351,6 +351,10 @@ enum mv88e6xxx_family {
};

enum mv88e6xxx_cap {
	/* Energy Efficient Ethernet.
	 */
	MV88E6XXX_CAP_EEE,

	/* EEPROM Command and Data registers.
	 * See GLOBAL2_EEPROM_OP and GLOBAL2_EEPROM_DATA.
	 */
@@ -382,6 +386,7 @@ enum mv88e6xxx_cap {
};

/* Bitmask of capabilities */
#define MV88E6XXX_FLAG_EEE		BIT(MV88E6XXX_CAP_EEE)
#define MV88E6XXX_FLAG_EEPROM		BIT(MV88E6XXX_CAP_EEPROM)
#define MV88E6XXX_FLAG_PPU		BIT(MV88E6XXX_CAP_PPU)
#define MV88E6XXX_FLAG_SMI_PHY		BIT(MV88E6XXX_CAP_SMI_PHY)
@@ -403,7 +408,8 @@ enum mv88e6xxx_cap {
	MV88E6XXX_FLAG_PPU

#define MV88E6XXX_FLAGS_FAMILY_6320	\
	(MV88E6XXX_FLAG_EEPROM |	\
	(MV88E6XXX_FLAG_EEE |		\
	 MV88E6XXX_FLAG_EEPROM |	\
	 MV88E6XXX_FLAG_SMI_PHY |	\
	 MV88E6XXX_FLAG_SWITCH_MAC |	\
	 MV88E6XXX_FLAG_TEMP |		\
@@ -415,7 +421,8 @@ enum mv88e6xxx_cap {
	 MV88E6XXX_FLAG_TEMP)

#define MV88E6XXX_FLAGS_FAMILY_6352	\
	(MV88E6XXX_FLAG_EEPROM |	\
	(MV88E6XXX_FLAG_EEE |		\
	 MV88E6XXX_FLAG_EEPROM |	\
	 MV88E6XXX_FLAG_SMI_PHY	|	\
	 MV88E6XXX_FLAG_SWITCH_MAC |	\
	 MV88E6XXX_FLAG_TEMP |		\