* [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames
@ 2016-11-01 18:30 Timur Tabi
2016-11-01 18:30 ` [PATCH 2/2] net: qcom/emac: enable flow control if requested Timur Tabi
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Timur Tabi @ 2016-11-01 18:30 UTC (permalink / raw)
To: David Miller, Florian Fainelli, netdev
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 <timur@codeaurora.org>
---
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.
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] net: qcom/emac: enable flow control if requested
2016-11-01 18:30 [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
@ 2016-11-01 18:30 ` Timur Tabi
2016-11-01 18:34 ` Florian Fainelli
2016-11-01 19:05 ` Timur Tabi
2016-11-01 18:33 ` [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Florian Fainelli
` (2 subsequent siblings)
3 siblings, 2 replies; 8+ messages in thread
From: Timur Tabi @ 2016-11-01 18:30 UTC (permalink / raw)
To: David Miller, Florian Fainelli, netdev
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 <timur@codeaurora.org>
---
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.
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] net: qcom/emac: enable flow control if requested
2016-11-01 18:30 ` [PATCH 2/2] net: qcom/emac: enable flow control if requested Timur Tabi
@ 2016-11-01 18:34 ` Florian Fainelli
2016-11-01 19:05 ` Timur Tabi
1 sibling, 0 replies; 8+ messages in thread
From: Florian Fainelli @ 2016-11-01 18:34 UTC (permalink / raw)
To: Timur Tabi, David Miller, netdev
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 <timur@codeaurora.org>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] net: qcom/emac: enable flow control if requested
2016-11-01 18:30 ` [PATCH 2/2] net: qcom/emac: enable flow control if requested Timur Tabi
2016-11-01 18:34 ` Florian Fainelli
@ 2016-11-01 19:05 ` Timur Tabi
1 sibling, 0 replies; 8+ messages in thread
From: Timur Tabi @ 2016-11-01 19:05 UTC (permalink / raw)
To: David Miller, Florian Fainelli, netdev
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.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames
2016-11-01 18:30 [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
2016-11-01 18:30 ` [PATCH 2/2] net: qcom/emac: enable flow control if requested Timur Tabi
@ 2016-11-01 18:33 ` Florian Fainelli
2016-11-01 18:34 ` Timur Tabi
2016-11-01 18:40 ` [PATCH 0/2] net: qcom/emac: the emac driver requires " Timur Tabi
3 siblings, 0 replies; 8+ messages in thread
From: Florian Fainelli @ 2016-11-01 18:33 UTC (permalink / raw)
To: Timur Tabi, David Miller, netdev
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 <timur@codeaurora.org>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames
2016-11-01 18:30 [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
2016-11-01 18:30 ` [PATCH 2/2] net: qcom/emac: enable flow control if requested Timur Tabi
2016-11-01 18:33 ` [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Florian Fainelli
@ 2016-11-01 18:34 ` Timur Tabi
2016-11-01 18:40 ` [PATCH 0/2] net: qcom/emac: the emac driver requires " Timur Tabi
3 siblings, 0 replies; 8+ messages in thread
From: Timur Tabi @ 2016-11-01 18:34 UTC (permalink / raw)
To: David Miller, Florian Fainelli, netdev
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 <timur@codeaurora.org>
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.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/2] net: qcom/emac: the emac driver requires pause frames
2016-11-01 18:30 [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
` (2 preceding siblings ...)
2016-11-01 18:34 ` Timur Tabi
@ 2016-11-01 18:40 ` Timur Tabi
3 siblings, 0 replies; 8+ messages in thread
From: Timur Tabi @ 2016-11-01 18:40 UTC (permalink / raw)
To: David Miller, Florian Fainelli, netdev
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.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 0/2] net: qcom/emac: ensure that pause frames are enabled
@ 2016-11-07 16:51 Timur Tabi
2016-11-07 16:51 ` [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
0 siblings, 1 reply; 8+ messages in thread
From: Timur Tabi @ 2016-11-07 16:51 UTC (permalink / raw)
To: David Miller, Florian Fainelli, alokc, netdev
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.
Timur Tabi (2):
net: qcom/emac: configure the external phy to allow pause frames
[v2] net: qcom/emac: enable flow control if requested
drivers/net/ethernet/qualcomm/emac/emac-mac.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
--
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.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames
2016-11-07 16:51 [PATCH 0/2] net: qcom/emac: ensure that pause frames are enabled Timur Tabi
@ 2016-11-07 16:51 ` Timur Tabi
0 siblings, 0 replies; 8+ messages in thread
From: Timur Tabi @ 2016-11-07 16:51 UTC (permalink / raw)
To: David Miller, Florian Fainelli, alokc, netdev
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>
---
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.
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2016-11-07 16:51 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-01 18:30 [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
2016-11-01 18:30 ` [PATCH 2/2] net: qcom/emac: enable flow control if requested Timur Tabi
2016-11-01 18:34 ` Florian Fainelli
2016-11-01 19:05 ` Timur Tabi
2016-11-01 18:33 ` [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Florian Fainelli
2016-11-01 18:34 ` Timur Tabi
2016-11-01 18:40 ` [PATCH 0/2] net: qcom/emac: the emac driver requires " Timur Tabi
-- strict thread matches above, loose matches on Subject: below --
2016-11-07 16:51 [PATCH 0/2] net: qcom/emac: ensure that pause frames are enabled Timur Tabi
2016-11-07 16:51 ` [PATCH 1/2] net: qcom/emac: configure the external phy to allow pause frames Timur Tabi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).