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

Commit 96dbdc5d authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'net-phy-Reduce-duplication'



Florian Fainelli says:

====================
net: phy: Reduce duplication

This patch series reduces the duplication among 10G PHY drivers that just
essentially stub most functions, but do that while replicating what the existing
generic functions do.

Changes in v3:

- removed unused "reg" variable in teranetics.c
- fixed subject for patch 5 since we actually use gen10g_no_soft_reset()

Changes in v2:

- rename gen10g_soft_reset() to gen10g_no_soft_reset() to better illustrate
  what it does (or does not)
- removed stray comment in marvell10g.c
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 5697b3e1 56847704
Loading
Loading
Loading
Loading
+6 −14
Original line number Diff line number Diff line
@@ -38,14 +38,6 @@ static int aquantia_config_aneg(struct phy_device *phydev)
	return 0;
}

static int aquantia_aneg_done(struct phy_device *phydev)
{
	int reg;

	reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1);
	return (reg < 0) ? reg : (reg & BMSR_ANEGCOMPLETE);
}

static int aquantia_config_intr(struct phy_device *phydev)
{
	int err;
@@ -125,7 +117,7 @@ static struct phy_driver aquantia_driver[] = {
	.name		= "Aquantia AQ1202",
	.features	= PHY_AQUANTIA_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.aneg_done	= aquantia_aneg_done,
	.aneg_done	= genphy_c45_aneg_done,
	.config_aneg    = aquantia_config_aneg,
	.config_intr	= aquantia_config_intr,
	.ack_interrupt	= aquantia_ack_interrupt,
@@ -137,7 +129,7 @@ static struct phy_driver aquantia_driver[] = {
	.name		= "Aquantia AQ2104",
	.features	= PHY_AQUANTIA_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.aneg_done	= aquantia_aneg_done,
	.aneg_done	= genphy_c45_aneg_done,
	.config_aneg    = aquantia_config_aneg,
	.config_intr	= aquantia_config_intr,
	.ack_interrupt	= aquantia_ack_interrupt,
@@ -149,7 +141,7 @@ static struct phy_driver aquantia_driver[] = {
	.name		= "Aquantia AQR105",
	.features	= PHY_AQUANTIA_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.aneg_done	= aquantia_aneg_done,
	.aneg_done	= genphy_c45_aneg_done,
	.config_aneg    = aquantia_config_aneg,
	.config_intr	= aquantia_config_intr,
	.ack_interrupt	= aquantia_ack_interrupt,
@@ -161,7 +153,7 @@ static struct phy_driver aquantia_driver[] = {
	.name		= "Aquantia AQR106",
	.features	= PHY_AQUANTIA_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.aneg_done	= aquantia_aneg_done,
	.aneg_done	= genphy_c45_aneg_done,
	.config_aneg    = aquantia_config_aneg,
	.config_intr	= aquantia_config_intr,
	.ack_interrupt	= aquantia_ack_interrupt,
@@ -173,7 +165,7 @@ static struct phy_driver aquantia_driver[] = {
	.name		= "Aquantia AQR107",
	.features	= PHY_AQUANTIA_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.aneg_done	= aquantia_aneg_done,
	.aneg_done	= genphy_c45_aneg_done,
	.config_aneg    = aquantia_config_aneg,
	.config_intr	= aquantia_config_intr,
	.ack_interrupt	= aquantia_ack_interrupt,
@@ -185,7 +177,7 @@ static struct phy_driver aquantia_driver[] = {
	.name		= "Aquantia AQR405",
	.features	= PHY_AQUANTIA_FEATURES,
	.flags		= PHY_HAS_INTERRUPT,
	.aneg_done	= aquantia_aneg_done,
	.aneg_done	= genphy_c45_aneg_done,
	.config_aneg    = aquantia_config_aneg,
	.config_intr	= aquantia_config_intr,
	.ack_interrupt	= aquantia_ack_interrupt,
+3 −15
Original line number Diff line number Diff line
@@ -30,14 +30,6 @@ static int cortina_read_reg(struct phy_device *phydev, u16 regnum)
			    MII_ADDR_C45 | regnum);
}

static int cortina_config_aneg(struct phy_device *phydev)
{
	phydev->supported = SUPPORTED_10000baseT_Full;
	phydev->advertising = SUPPORTED_10000baseT_Full;

	return 0;
}

static int cortina_read_status(struct phy_device *phydev)
{
	int gpio_int_status, ret = 0;
@@ -61,11 +53,6 @@ static int cortina_read_status(struct phy_device *phydev)
	return ret;
}

static int cortina_soft_reset(struct phy_device *phydev)
{
	return 0;
}

static int cortina_probe(struct phy_device *phydev)
{
	u32 phy_id = 0;
@@ -101,9 +88,10 @@ static struct phy_driver cortina_driver[] = {
	.phy_id		= PHY_ID_CS4340,
	.phy_id_mask	= 0xffffffff,
	.name		= "Cortina CS4340",
	.config_aneg	= cortina_config_aneg,
	.config_init	= gen10g_config_init,
	.config_aneg	= gen10g_config_aneg,
	.read_status	= cortina_read_status,
	.soft_reset	= cortina_soft_reset,
	.soft_reset	= gen10g_no_soft_reset,
	.probe		= cortina_probe,
},
};
+1 −10
Original line number Diff line number Diff line
@@ -71,15 +71,6 @@ static int mv3310_probe(struct phy_device *phydev)
	return 0;
}

/*
 * Resetting the MV88X3310 causes it to become non-responsive.  Avoid
 * setting the reset bit(s).
 */
static int mv3310_soft_reset(struct phy_device *phydev)
{
	return 0;
}

static int mv3310_config_init(struct phy_device *phydev)
{
	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported) = { 0, };
@@ -377,7 +368,7 @@ static struct phy_driver mv3310_drivers[] = {
				  SUPPORTED_10000baseT_Full |
				  SUPPORTED_Backplane,
		.probe		= mv3310_probe,
		.soft_reset	= mv3310_soft_reset,
		.soft_reset	= gen10g_no_soft_reset,
		.config_init	= mv3310_config_init,
		.config_aneg	= mv3310_config_aneg,
		.aneg_done	= mv3310_aneg_done,
+13 −7
Original line number Diff line number Diff line
@@ -268,12 +268,13 @@ EXPORT_SYMBOL_GPL(genphy_c45_read_mdix);

/* The gen10g_* functions are the old Clause 45 stub */

static int gen10g_config_aneg(struct phy_device *phydev)
int gen10g_config_aneg(struct phy_device *phydev)
{
	return 0;
}
EXPORT_SYMBOL_GPL(gen10g_config_aneg);

static int gen10g_read_status(struct phy_device *phydev)
int gen10g_read_status(struct phy_device *phydev)
{
	u32 mmd_mask = phydev->c45_ids.devices_in_package;
	int ret;
@@ -291,14 +292,16 @@ static int gen10g_read_status(struct phy_device *phydev)

	return 0;
}
EXPORT_SYMBOL_GPL(gen10g_read_status);

static int gen10g_soft_reset(struct phy_device *phydev)
int gen10g_no_soft_reset(struct phy_device *phydev)
{
	/* Do nothing for now */
	return 0;
}
EXPORT_SYMBOL_GPL(gen10g_no_soft_reset);

static int gen10g_config_init(struct phy_device *phydev)
int gen10g_config_init(struct phy_device *phydev)
{
	/* Temporarily just say we support everything */
	phydev->supported = SUPPORTED_10000baseT_Full;
@@ -306,22 +309,25 @@ static int gen10g_config_init(struct phy_device *phydev)

	return 0;
}
EXPORT_SYMBOL_GPL(gen10g_config_init);

static int gen10g_suspend(struct phy_device *phydev)
int gen10g_suspend(struct phy_device *phydev)
{
	return 0;
}
EXPORT_SYMBOL_GPL(gen10g_suspend);

static int gen10g_resume(struct phy_device *phydev)
int gen10g_resume(struct phy_device *phydev)
{
	return 0;
}
EXPORT_SYMBOL_GPL(gen10g_resume);

struct phy_driver genphy_10g_driver = {
	.phy_id         = 0xffffffff,
	.phy_id_mask    = 0xffffffff,
	.name           = "Generic 10G PHY",
	.soft_reset	= gen10g_soft_reset,
	.soft_reset	= gen10g_no_soft_reset,
	.config_init    = gen10g_config_init,
	.features       = 0,
	.config_aneg    = gen10g_config_aneg,
+5 −27
Original line number Diff line number Diff line
@@ -34,39 +34,17 @@ MODULE_LICENSE("GPL v2");
				MDIO_PHYXS_LNSTAT_SYNC3 | \
				MDIO_PHYXS_LNSTAT_ALIGN)

static int teranetics_config_init(struct phy_device *phydev)
{
	phydev->supported = SUPPORTED_10000baseT_Full;
	phydev->advertising = SUPPORTED_10000baseT_Full;

	return 0;
}

static int teranetics_soft_reset(struct phy_device *phydev)
{
	return 0;
}

static int teranetics_aneg_done(struct phy_device *phydev)
{
	int reg;

	/* auto negotiation state can only be checked when using copper
	 * port, if using fiber port, just lie it's done.
	 */
	if (!phy_read_mmd(phydev, MDIO_MMD_VEND1, 93)) {
		reg = phy_read_mmd(phydev, MDIO_MMD_AN, MDIO_STAT1);
		return (reg < 0) ? reg : (reg & BMSR_ANEGCOMPLETE);
	}
	if (!phy_read_mmd(phydev, MDIO_MMD_VEND1, 93))
		return genphy_c45_aneg_done(phydev);

	return 1;
}

static int teranetics_config_aneg(struct phy_device *phydev)
{
	return 0;
}

static int teranetics_read_status(struct phy_device *phydev)
{
	int reg;
@@ -102,10 +80,10 @@ static struct phy_driver teranetics_driver[] = {
	.phy_id		= PHY_ID_TN2020,
	.phy_id_mask	= 0xffffffff,
	.name		= "Teranetics TN2020",
	.soft_reset	= teranetics_soft_reset,
	.soft_reset	= gen10g_no_soft_reset,
	.aneg_done	= teranetics_aneg_done,
	.config_init    = teranetics_config_init,
	.config_aneg    = teranetics_config_aneg,
	.config_init    = gen10g_config_init,
	.config_aneg    = gen10g_config_aneg,
	.read_status	= teranetics_read_status,
	.match_phy_device = teranetics_match_phy_device,
},
Loading