| From fd1ea98df141781abf1783c0dc5de575e2b0a95f Mon Sep 17 00:00:00 2001 |
| From: Remi Pommarel <repk@triplefau.lt> |
| Date: Sun, 8 Mar 2020 10:25:56 +0100 |
| Subject: [PATCH] net: stmmac: dwmac1000: Disable ACS if enhanced descs are not |
| used |
| |
| commit b723bd933980f4956dabc8a8d84b3e83be8d094c upstream. |
| |
| ACS (auto PAD/FCS stripping) removes FCS off 802.3 packets (LLC) so that |
| there is no need to manually strip it for such packets. The enhanced DMA |
| descriptors allow to flag LLC packets so that the receiving callback can |
| use that to strip FCS manually or not. On the other hand, normal |
| descriptors do not support that. |
| |
| Thus in order to not truncate LLC packet ACS should be disabled when |
| using normal DMA descriptors. |
| |
| Fixes: 47dd7a540b8a0 ("net: add support for STMicroelectronics Ethernet controllers.") |
| Signed-off-by: Remi Pommarel <repk@triplefau.lt> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c |
| index 26bb1c15de1b..81af0f3f5cf9 100644 |
| --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c |
| +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c |
| @@ -24,6 +24,7 @@ |
| static void dwmac1000_core_init(struct mac_device_info *hw, |
| struct net_device *dev) |
| { |
| + struct stmmac_priv *priv = netdev_priv(dev); |
| void __iomem *ioaddr = hw->pcsr; |
| u32 value = readl(ioaddr + GMAC_CONTROL); |
| int mtu = dev->mtu; |
| @@ -35,7 +36,7 @@ static void dwmac1000_core_init(struct mac_device_info *hw, |
| * Broadcom tags can look like invalid LLC/SNAP packets and cause the |
| * hardware to truncate packets on reception. |
| */ |
| - if (netdev_uses_dsa(dev)) |
| + if (netdev_uses_dsa(dev) || !priv->plat->enh_desc) |
| value &= ~GMAC_CONTROL_ACS; |
| |
| if (mtu > 1500) |
| -- |
| 2.7.4 |
| |