net: qcom/emac: configure the external phy to allow pause frames
authorTimur Tabi <timur@codeaurora.org>
Mon, 7 Nov 2016 16:51:40 +0000 (10:51 -0600)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Nov 2016 23:45:24 +0000 (18:45 -0500)
Pause frames are used to enable flow control.  A MAC can send and
receive pause frames in order to throttle traffic.  However, the PHY
must be configured to allow those frames to pass through.

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Timur Tabi <timur@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/emac/emac-mac.c

index 6fb3bee904d38f228f6587881f0a6a2f03557731..70a55dcc431d16ad0c0d9e08dcf6daae67b25b38 100644 (file)
@@ -1003,6 +1003,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);