sky2: fiber pause bits
The advertisement bits for flow control are located in different location on fiber (1000baseX) Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
This commit is contained in:
@@ -384,20 +384,31 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
|
|||||||
adv |= PHY_M_AN_10_FD;
|
adv |= PHY_M_AN_10_FD;
|
||||||
if (sky2->advertising & ADVERTISED_10baseT_Half)
|
if (sky2->advertising & ADVERTISED_10baseT_Half)
|
||||||
adv |= PHY_M_AN_10_HD;
|
adv |= PHY_M_AN_10_HD;
|
||||||
|
|
||||||
|
/* desired flow control */
|
||||||
|
if (sky2->tx_pause && sky2->rx_pause) /* both */
|
||||||
|
adv |= PHY_M_AN_PC | PHY_M_AN_ASP;
|
||||||
|
else if (sky2->tx_pause)
|
||||||
|
adv |= PHY_M_AN_ASP;
|
||||||
|
else if (sky2->rx_pause)
|
||||||
|
adv |= PHY_M_AN_PC;
|
||||||
|
|
||||||
|
|
||||||
} else { /* special defines for FIBER (88E1040S only) */
|
} else { /* special defines for FIBER (88E1040S only) */
|
||||||
if (sky2->advertising & ADVERTISED_1000baseT_Full)
|
if (sky2->advertising & ADVERTISED_1000baseT_Full)
|
||||||
adv |= PHY_M_AN_1000X_AFD;
|
adv |= PHY_M_AN_1000X_AFD;
|
||||||
if (sky2->advertising & ADVERTISED_1000baseT_Half)
|
if (sky2->advertising & ADVERTISED_1000baseT_Half)
|
||||||
adv |= PHY_M_AN_1000X_AHD;
|
adv |= PHY_M_AN_1000X_AHD;
|
||||||
}
|
|
||||||
|
|
||||||
/* Set Flow-control capabilities */
|
if (sky2->tx_pause && sky2->rx_pause) /* both */
|
||||||
if (sky2->tx_pause && sky2->rx_pause)
|
adv |= PHY_M_P_BOTH_MD_X;
|
||||||
adv |= PHY_AN_PAUSE_CAP; /* symmetric */
|
else if (sky2->tx_pause)
|
||||||
else if (sky2->rx_pause && !sky2->tx_pause)
|
adv |= PHY_M_P_ASYM_MD_X;
|
||||||
adv |= PHY_AN_PAUSE_ASYM | PHY_AN_PAUSE_CAP;
|
else if (sky2->rx_pause)
|
||||||
else if (!sky2->rx_pause && sky2->tx_pause)
|
adv |= PHY_M_P_SYM_MD_X;
|
||||||
adv |= PHY_AN_PAUSE_ASYM; /* local */
|
else
|
||||||
|
adv |= PHY_M_P_NO_PAUSE_X;
|
||||||
|
}
|
||||||
|
|
||||||
/* Restart Auto-negotiation */
|
/* Restart Auto-negotiation */
|
||||||
ctrl |= PHY_CT_ANE | PHY_CT_RE_CFG;
|
ctrl |= PHY_CT_ANE | PHY_CT_RE_CFG;
|
||||||
|
Reference in New Issue
Block a user