Skip to content

Commit

Permalink
Merge branch 'net-phy-Reduce-duplication'
Browse files Browse the repository at this point in the history
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: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Mar 2, 2018
2 parents 5697b3e + 5684770 commit 96dbdc5
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 73 deletions.
20 changes: 6 additions & 14 deletions drivers/net/phy/aquantia.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand Down
18 changes: 3 additions & 15 deletions drivers/net/phy/cortina.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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,
},
};
Expand Down
11 changes: 1 addition & 10 deletions drivers/net/phy/marvell10g.c
Original file line number Diff line number Diff line change
Expand Up @@ -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, };
Expand Down Expand Up @@ -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,
Expand Down
20 changes: 13 additions & 7 deletions drivers/net/phy/phy-c45.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -291,37 +292,42 @@ 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;
phydev->advertising = SUPPORTED_10000baseT_Full;

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,
Expand Down
32 changes: 5 additions & 27 deletions drivers/net/phy/teranetics.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
},
Expand Down
8 changes: 8 additions & 0 deletions include/linux/phy.h
Original file line number Diff line number Diff line change
Expand Up @@ -994,6 +994,14 @@ int genphy_c45_pma_setup_forced(struct phy_device *phydev);
int genphy_c45_an_disable_aneg(struct phy_device *phydev);
int genphy_c45_read_mdix(struct phy_device *phydev);

/* The gen10g_* functions are the old Clause 45 stub */
int gen10g_config_aneg(struct phy_device *phydev);
int gen10g_read_status(struct phy_device *phydev);
int gen10g_no_soft_reset(struct phy_device *phydev);
int gen10g_config_init(struct phy_device *phydev);
int gen10g_suspend(struct phy_device *phydev);
int gen10g_resume(struct phy_device *phydev);

static inline int phy_read_status(struct phy_device *phydev)
{
if (!phydev->drv)
Expand Down

0 comments on commit 96dbdc5

Please sign in to comment.