[PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames

Subsystems: networking drivers, qualcomm emac gigabit ethernet driver, the rest

STALE3564d

7 messages, 2 authors, 2016-11-01 · open the first message on its own page

[PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames

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(+)
diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
index 6fb3bee..70a55dc 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
@@ -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);
 
-- 
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.

[PATCH 2/2] net: qcom/emac: enable flow control if requested

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(-)
diff --git a/drivers/net/ethernet/qualcomm/emac/emac-mac.c b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
index 70a55dc..46e19e9 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac-mac.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac-mac.c
@@ -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.

Re: [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames

From: Florian Fainelli <f.fainelli@gmail.com>
Date: 2016-11-01 18:33:57

On 11/01/2016 11:30 AM, 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>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

Re: [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames

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.

Re: [PATCH 2/2] net: qcom/emac: enable flow control if requested

From: Florian Fainelli <f.fainelli@gmail.com>
Date: 2016-11-01 18:34:59

On 11/01/2016 11:30 AM, Timur Tabi wrote:
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>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

[PATCH 0/2] net: qcom/emac: the emac driver requires pause frames

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.

Re: [PATCH 2/2] net: qcom/emac: enable flow control if requested

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help