On Mon, Sep 5, 2011 at 12:24 PM, Vladimir Zapolskiy <[email protected]> wrote:
> This change slightly improves readability of the phydev speed/duplex
> assignment logic.
Shoot, I just saw this patch in my tree. It's incorrect.
> @@ -318,13 +318,10 @@ static int genphy_parse_link(struct phy_device *phydev)
> lpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE);
> lpa &= phy_read(phydev, MDIO_DEVAD_NONE, MII_LPA);
>
> - if (lpa & (LPA_100FULL | LPA_100HALF)) {
> + if (lpa & (LPA_100FULL | LPA_100HALF))
> phydev->speed = SPEED_100;
>
> - if (lpa & LPA_100FULL)
> - phydev->duplex = DUPLEX_FULL;
> -
> - } else if (lpa & LPA_10FULL)
> + if (lpa & (LPA_100FULL | LPA_10FULL))
> phydev->duplex = DUPLEX_FULL;
The lines weren't redundant. The logic is (and probably should be
better commented):
Find the intersection of the advertised capabilities of both sides of
the link (lpa)
>From that intersection, find the highest capability we can run at
(that will be the negotiated link)
Now imagine that the intersection (lpa) is (LPA_100HALF | LPA_10FULL).
The code will now set phydev->speed to 100, and phydev->duplex to 1,
but this link does not support 100FULL.
Andy
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot