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

Commit fd6f24d7 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'qcom-emac-pause'



Timur Tabi says:

====================
net: qcom/emac: ensure that pause frames are enabled

The qcom emac driver experiences significant packet loss (through frame
check sequence errors) if flow control is not enabled and the phy is
not configured to allow pause frames to pass through it.  Therefore, we
need to enable flow control and force the phy to pass pause frames.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents cdb26d33 df63022e
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -575,10 +575,11 @@ void emac_mac_start(struct emac_adapter *adpt)

	mac |= TXEN | RXEN;     /* enable RX/TX */

	/* We don't have ethtool support yet, so force flow-control mode
	 * to 'full' always.
	 */
	mac |= TXFC | RXFC;
	/* Configure MAC flow control to match the PHY's settings. */
	if (phydev->pause)
		mac |= RXFC;
	if (phydev->pause != phydev->asym_pause)
		mac |= TXFC;

	/* setup link speed */
	mac &= ~SPEED_MASK;
@@ -1003,6 +1004,12 @@ int emac_mac_up(struct emac_adapter *adpt)
	writel((u32)~DIS_INT, adpt->base + EMAC_INT_STATUS);
	writel(adpt->irq.mask, adpt->base + EMAC_INT_MASK);

	/* Enable pause frames.  Without this feature, the EMAC has been shown
	 * to receive (and drop) frames with FCS errors at gigabit connections.
	 */
	adpt->phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
	adpt->phydev->advertising |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;

	adpt->phydev->irq = PHY_IGNORE_INTERRUPT;
	phy_start(adpt->phydev);