Tested-by: Chris Healy <cphe...@gmail.com> Successfully tested on a machine with a Broadcom BCM5395 switch.
On Thu, Dec 14, 2017 at 5:48 PM, Florian Fainelli <f.faine...@gmail.com> wrote: > Add an entry for the builtin PHYs present in the Broadcom BCM5395 switch. This > allows us to retrieve the PHY statistics among other things. > > Signed-off-by: Florian Fainelli <f.faine...@gmail.com> > --- > drivers/net/phy/broadcom.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > include/linux/brcmphy.h | 1 + > 2 files changed, 43 insertions(+) > > diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c > index a8f69c5777bc..3bb6b66dc7bf 100644 > --- a/drivers/net/phy/broadcom.c > +++ b/drivers/net/phy/broadcom.c > @@ -540,6 +540,37 @@ static int brcm_fet_config_intr(struct phy_device > *phydev) > return err; > } > > +struct bcm53xx_phy_priv { > + u64 *stats; > +}; > + > +static int bcm53xx_phy_probe(struct phy_device *phydev) > +{ > + struct bcm53xx_phy_priv *priv; > + > + priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL); > + if (!priv) > + return -ENOMEM; > + > + phydev->priv = priv; > + > + priv->stats = devm_kcalloc(&phydev->mdio.dev, > + bcm_phy_get_sset_count(phydev), > sizeof(u64), > + GFP_KERNEL); > + if (!priv->stats) > + return -ENOMEM; > + > + return 0; > +} > + > +static void bcm53xx_phy_get_stats(struct phy_device *phydev, > + struct ethtool_stats *stats, u64 *data) > +{ > + struct bcm53xx_phy_priv *priv = phydev->priv; > + > + bcm_phy_get_stats(phydev, priv->stats, stats, data); > +} > + > static struct phy_driver broadcom_drivers[] = { > { > .phy_id = PHY_ID_BCM5411, > @@ -679,6 +710,16 @@ static struct phy_driver broadcom_drivers[] = { > .config_init = brcm_fet_config_init, > .ack_interrupt = brcm_fet_ack_interrupt, > .config_intr = brcm_fet_config_intr, > +}, { > + .phy_id = PHY_ID_BCM5395, > + .phy_id_mask = 0xfffffff0, > + .name = "Broadcom BCM5395", > + .flags = PHY_IS_INTERNAL, > + .features = PHY_GBIT_FEATURES, > + .get_sset_count = bcm_phy_get_sset_count, > + .get_strings = bcm_phy_get_strings, > + .get_stats = bcm53xx_phy_get_stats, > + .probe = bcm53xx_phy_probe, > } }; > > module_phy_driver(broadcom_drivers); > @@ -699,6 +740,7 @@ static struct mdio_device_id __maybe_unused > broadcom_tbl[] = { > { PHY_ID_BCM57780, 0xfffffff0 }, > { PHY_ID_BCMAC131, 0xfffffff0 }, > { PHY_ID_BCM5241, 0xfffffff0 }, > + { PHY_ID_BCM5395, 0xfffffff0 }, > { } > }; > > diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h > index 8ff86b4c1b8a..d3339dd48b1a 100644 > --- a/include/linux/brcmphy.h > +++ b/include/linux/brcmphy.h > @@ -14,6 +14,7 @@ > #define PHY_ID_BCM5241 0x0143bc30 > #define PHY_ID_BCMAC131 0x0143bc70 > #define PHY_ID_BCM5481 0x0143bca0 > +#define PHY_ID_BCM5395 0x0143bcf0 > #define PHY_ID_BCM54810 0x03625d00 > #define PHY_ID_BCM5482 0x0143bcb0 > #define PHY_ID_BCM5411 0x00206070 > -- > 2.7.4 >