Skip to content

Commit

Permalink
net: phy: bcm63xx: Utilize correct config_intr function
Browse files Browse the repository at this point in the history
Commit a1cba56 ("net: phy: Add Broadcom phy library for common
interfaces") make the BCM63xx PHY driver utilize bcm_phy_config_intr()
which would appear to do the right thing, except that it does not write
to the MII_BCM63XX_IR register but to MII_BCM54XX_ECR which is
different.

This would be causing invalid link parameters and events from being
generated by the PHY interrupt.

Fixes: a1cba56 ("net: phy: Add Broadcom phy library for common interfaces")
Signed-off-by: Daniel Gonzalez Cabanelas <dgcbueu@gmail.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Daniel Gonzalez Cabanelas authored and David S. Miller committed Jan 18, 2017
1 parent 7be2c82 commit cd33b3e
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions drivers/net/phy/bcm63xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,23 @@ MODULE_DESCRIPTION("Broadcom 63xx internal PHY driver");
MODULE_AUTHOR("Maxime Bizon <mbizon@freebox.fr>");
MODULE_LICENSE("GPL");

static int bcm63xx_config_intr(struct phy_device *phydev)
{
int reg, err;

reg = phy_read(phydev, MII_BCM63XX_IR);
if (reg < 0)
return reg;

if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
reg &= ~MII_BCM63XX_IR_GMASK;
else
reg |= MII_BCM63XX_IR_GMASK;

err = phy_write(phydev, MII_BCM63XX_IR, reg);
return err;
}

static int bcm63xx_config_init(struct phy_device *phydev)
{
int reg, err;
Expand Down Expand Up @@ -55,7 +72,7 @@ static struct phy_driver bcm63xx_driver[] = {
.config_aneg = genphy_config_aneg,
.read_status = genphy_read_status,
.ack_interrupt = bcm_phy_ack_intr,
.config_intr = bcm_phy_config_intr,
.config_intr = bcm63xx_config_intr,
}, {
/* same phy as above, with just a different OUI */
.phy_id = 0x002bdc00,
Expand All @@ -67,7 +84,7 @@ static struct phy_driver bcm63xx_driver[] = {
.config_aneg = genphy_config_aneg,
.read_status = genphy_read_status,
.ack_interrupt = bcm_phy_ack_intr,
.config_intr = bcm_phy_config_intr,
.config_intr = bcm63xx_config_intr,
} };

module_phy_driver(bcm63xx_driver);
Expand Down

0 comments on commit cd33b3e

Please sign in to comment.