mirror of https://gitee.com/openkylin/linux.git
net: phy: bcm7xxx: workaround MDIO management controller initial read
The initial MDIO read or write towards the BCM7xxx integrated PHY may fail, workaround this by inserting a dummy MII_BMSR read to force the MDIO management controller to see at least one valid transaction and get out of stuck state out of reset. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
8031612d7f
commit
8e346e1594
|
@ -246,6 +246,13 @@ static int bcm7xxx_28nm_config_init(struct phy_device *phydev)
|
||||||
pr_info_once("%s: %s PHY revision: 0x%02x, patch: %d\n",
|
pr_info_once("%s: %s PHY revision: 0x%02x, patch: %d\n",
|
||||||
dev_name(&phydev->dev), phydev->drv->name, rev, patch);
|
dev_name(&phydev->dev), phydev->drv->name, rev, patch);
|
||||||
|
|
||||||
|
/* Dummy read to a register to workaround an issue upon reset where the
|
||||||
|
* internal inverter may not allow the first MDIO transaction to pass
|
||||||
|
* the MDIO management controller and make us return 0xffff for such
|
||||||
|
* reads.
|
||||||
|
*/
|
||||||
|
phy_read(phydev, MII_BMSR);
|
||||||
|
|
||||||
switch (rev) {
|
switch (rev) {
|
||||||
case 0xb0:
|
case 0xb0:
|
||||||
ret = bcm7xxx_28nm_b0_afe_config_init(phydev);
|
ret = bcm7xxx_28nm_b0_afe_config_init(phydev);
|
||||||
|
|
Loading…
Reference in New Issue