From: Timur Tabi <hidden> Date: 2016-11-01 18:31:00
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.
Signed-off-by: Timur Tabi <redacted>
---
drivers/net/ethernet/qualcomm/emac/emac-mac.c | 6 ++++++
1 file changed, 6 insertions(+)
@@ -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+*toreceive(anddrop)frameswithFCSerrorsatgigabitconnections.+*/+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);
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
From: Timur Tabi <hidden> Date: 2016-11-01 18:31:02
If the PHY has been configured to allow pause frames, then the MAC
should be configured to generate and/or accept those frames.
Signed-off-by: Timur Tabi <redacted>
---
drivers/net/ethernet/qualcomm/emac/emac-mac.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
@@ -575,10 +575,12 @@ 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 patch the PHY's settings */+if(phydev->pause)+mac|=RXFC;++if(!phydev->pause&&phydev->asym_pause)+mac|=TXFC;/* setup link speed */mac&=~SPEED_MASK;
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
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.
Signed-off-by: Timur Tabi <redacted>
From: Timur Tabi <hidden> Date: 2016-11-01 18:34:48
Timur Tabi wrote:
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.
Signed-off-by: Timur Tabi <redacted>
Ugh, I forgot to include an introductory post. Coming right up.
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
If the PHY has been configured to allow pause frames, then the MAC
should be configured to generate and/or accept those frames.
Signed-off-by: Timur Tabi <redacted>
From: Timur Tabi <hidden> Date: 2016-11-01 18:40:19
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 force enable flow control and force the phy to pass pause frames.
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
From: Timur Tabi <hidden> Date: 2016-11-01 19:05:34
On 11/01/2016 01:30 PM, Timur Tabi wrote:
+ if (!phydev->pause && phydev->asym_pause)
+ mac |= TXFC;
I think this might be wrong, and nb8800_pause_config() has it right.
This should be:
if (!phydev->pause != !phydev->asym_pause)
which is a logical-xor.
Do you concur?
--
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm
Technologies, Inc. Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.