On Sun, Aug 23, 2015 at 11:40:07AM -0700, Florian Fainelli wrote: > Le 08/23/15 02:47, Andrew Lunn a écrit : > > What features a phy supports is masked in genphy_config_init() by > > looking at the PHYs BMSR register. > > > > If the link is down, fixed_phy_update_regs() will only set the auto- > > negotiation capable bit in BMSR. Thus genphy_config_init() comes to > > the conclusion the PHY can only perform 10/Half, and masks out the > > higher speed features. If however the link it up, BMSR is set to > > indicate the speed the PHY is capable of auto-negotiating, and > > genphy_config_init() does not mask out the high speed features. > > > > To fix this, when the link is down, have fixed_phy_update_regs() leave > > the link status and auto-negotiation complete bit unset, but set all > > the other bits depending on the fixed phy speed. > > This kinds of revert what Staas did in commit > 868a4215be9a6d80548ccb74763b883dc99d32a2 ("net: phy: fixed_phy: handle > link-down case"). When the link is down, it does not seem to me like we > can rely on the previous speed and duplex parameters to be considered valid. > > Your change does fix a valid use case though... humm.
Hi Florian I took at look at Staas fix, and read a bit about what the different bits mean. I've reworked the patch. I now always set the local phy capabilities in BMSR, but only set the negotiated speed and link partner capabilities if the link it up. I also don't error out on speed=0, unless the link is up. This works for my use case, and hopefully also Staas. I will post the new version when we have come to a conclusion about other open issues. Andrew -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html