Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 709c6e7b authored by Stephen Hemminger's avatar Stephen Hemminger
Browse files

sky2: fiber pause bits



The advertisement bits for flow control are located in
different location on fiber (1000baseX)

Signed-off-by: default avatarStephen Hemminger <shemminger@osdl.org>
parent ebc646f6
Loading
Loading
Loading
Loading
+19 −8
Original line number Diff line number Diff line
@@ -384,20 +384,31 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
				adv |= PHY_M_AN_10_FD;
			if (sky2->advertising & ADVERTISED_10baseT_Half)
				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) */
			if (sky2->advertising & ADVERTISED_1000baseT_Full)
				adv |= PHY_M_AN_1000X_AFD;
			if (sky2->advertising & ADVERTISED_1000baseT_Half)
				adv |= PHY_M_AN_1000X_AHD;
		}

		/* Set Flow-control capabilities */
		if (sky2->tx_pause && sky2->rx_pause)
			adv |= PHY_AN_PAUSE_CAP;	/* symmetric */
		else if (sky2->rx_pause && !sky2->tx_pause)
			adv |= PHY_AN_PAUSE_ASYM | PHY_AN_PAUSE_CAP;
		else if (!sky2->rx_pause && sky2->tx_pause)
			adv |= PHY_AN_PAUSE_ASYM;	/* local */
			if (sky2->tx_pause && sky2->rx_pause)	/* both */
 				adv |= PHY_M_P_BOTH_MD_X;
			else if (sky2->tx_pause)
				adv |= PHY_M_P_ASYM_MD_X;
			else if (sky2->rx_pause)
 				adv |= PHY_M_P_SYM_MD_X;
			else
				adv |= PHY_M_P_NO_PAUSE_X;
		}

		/* Restart Auto-negotiation */
		ctrl |= PHY_CT_ANE | PHY_CT_RE_CFG;