diff options
Diffstat (limited to 'drivers/net/phy/broadcom.c')
| -rw-r--r-- | drivers/net/phy/broadcom.c | 85 | 
1 files changed, 75 insertions, 10 deletions
| diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c index fa0be591ae79..7bf3011b8e77 100644 --- a/drivers/net/phy/broadcom.c +++ b/drivers/net/phy/broadcom.c @@ -342,6 +342,10 @@ static int bcm54xx_config_init(struct phy_device *phydev)  	bcm54xx_adjust_rxrefclk(phydev);  	switch (BRCM_PHY_MODEL(phydev)) { +	case PHY_ID_BCM50610: +	case PHY_ID_BCM50610M: +		err = bcm54xx_config_clock_delay(phydev); +		break;  	case PHY_ID_BCM54210E:  		err = bcm54210e_config_init(phydev);  		break; @@ -399,6 +403,11 @@ static int bcm54xx_resume(struct phy_device *phydev)  	if (ret < 0)  		return ret; +	/* Upon exiting power down, the PHY remains in an internal reset state +	 * for 40us +	 */ +	fsleep(40); +  	return bcm54xx_config_init(phydev);  } @@ -662,13 +671,13 @@ static irqreturn_t brcm_fet_handle_interrupt(struct phy_device *phydev)  	return IRQ_HANDLED;  } -struct bcm53xx_phy_priv { +struct bcm54xx_phy_priv {  	u64	*stats;  }; -static int bcm53xx_phy_probe(struct phy_device *phydev) +static int bcm54xx_phy_probe(struct phy_device *phydev)  { -	struct bcm53xx_phy_priv *priv; +	struct bcm54xx_phy_priv *priv;  	priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);  	if (!priv) @@ -685,10 +694,10 @@ static int bcm53xx_phy_probe(struct phy_device *phydev)  	return 0;  } -static void bcm53xx_phy_get_stats(struct phy_device *phydev, -				  struct ethtool_stats *stats, u64 *data) +static void bcm54xx_get_stats(struct phy_device *phydev, +			      struct ethtool_stats *stats, u64 *data)  { -	struct bcm53xx_phy_priv *priv = phydev->priv; +	struct bcm54xx_phy_priv *priv = phydev->priv;  	bcm_phy_get_stats(phydev, priv->stats, stats, data);  } @@ -699,6 +708,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM5411",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -707,6 +720,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM5421",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -715,6 +732,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM54210E",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -723,6 +744,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM5461",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -731,6 +756,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM54612E",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -750,6 +779,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM5464",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -760,6 +793,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM5481",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_aneg	= bcm5481_config_aneg,  	.config_intr	= bcm_phy_config_intr, @@ -769,6 +806,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask    = 0xfffffff0,  	.name           = "Broadcom BCM54810",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init    = bcm54xx_config_init,  	.config_aneg    = bcm5481_config_aneg,  	.config_intr    = bcm_phy_config_intr, @@ -780,6 +821,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask    = 0xfffffff0,  	.name           = "Broadcom BCM54811",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init    = bcm54811_config_init,  	.config_aneg    = bcm5481_config_aneg,  	.config_intr    = bcm_phy_config_intr, @@ -791,6 +836,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM5482",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -799,6 +848,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM50610",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -807,6 +860,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM50610M",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -815,6 +872,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask	= 0xfffffff0,  	.name		= "Broadcom BCM57780",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -842,8 +903,8 @@ static struct phy_driver broadcom_drivers[] = {  	/* 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, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  }, {  	.phy_id		= PHY_ID_BCM53125,  	.phy_id_mask	= 0xfffffff0, @@ -852,8 +913,8 @@ static struct phy_driver broadcom_drivers[] = {  	/* 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, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init	= bcm54xx_config_init,  	.config_intr	= bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, @@ -862,6 +923,10 @@ static struct phy_driver broadcom_drivers[] = {  	.phy_id_mask    = 0xfffffff0,  	.name           = "Broadcom BCM89610",  	/* PHY_GBIT_FEATURES */ +	.get_sset_count	= bcm_phy_get_sset_count, +	.get_strings	= bcm_phy_get_strings, +	.get_stats	= bcm54xx_get_stats, +	.probe		= bcm54xx_phy_probe,  	.config_init    = bcm54xx_config_init,  	.config_intr    = bcm_phy_config_intr,  	.handle_interrupt = bcm_phy_handle_interrupt, | 
