]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net: stmmac: disable Split Header (SPH) for Intel platforms
authorTan Tee Min <tee.min.tan@linux.intel.com>
Fri, 29 Apr 2022 11:58:07 +0000 (19:58 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 May 2022 10:25:32 +0000 (12:25 +0200)
commit 47f753c1108e287edb3e27fad8a7511a9d55578e upstream.

Based on DesignWare Ethernet QoS datasheet, we are seeing the limitation
of Split Header (SPH) feature is not supported for Ipv4 fragmented packet.
This SPH limitation will cause ping failure when the packets size exceed
the MTU size. For example, the issue happens once the basic ping packet
size is larger than the configured MTU size and the data is lost inside
the fragmented packet, replaced by zeros/corrupted values, and leads to
ping fail.

So, disable the Split Header for Intel platforms.

v2: Add fixes tag in commit message.

Fixes: 67afd6d1cfdf("net: stmmac: Add Split Header support and enable it in XGMAC cores")
Cc: <stable@vger.kernel.org> # 5.10.x
Suggested-by: Ong, Boon Leong <boon.leong.ong@intel.com>
Signed-off-by: Mohammad Athari Bin Ismail <mohammad.athari.ismail@intel.com>
Signed-off-by: Wong Vee Khee <vee.khee.wong@linux.intel.com>
Signed-off-by: Tan Tee Min <tee.min.tan@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
include/linux/stmmac.h

index a9087dae767de974f5075f0db430c028fbe4a0ea..fb065b074553e207ce1d941bcab3d5446265f918 100644 (file)
@@ -243,6 +243,7 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
        plat->has_gmac4 = 1;
        plat->force_sf_dma_mode = 0;
        plat->tso_en = 1;
+       plat->sph_disable = 1;
 
        plat->rx_sched_algorithm = MTL_RX_ALGORITHM_SP;
 
index a46c32257de42ba1e18c693a09999437a51d9c1c..e9aa9a5eba6be63d614ce879f44374a5acc3e81a 100644 (file)
@@ -5046,7 +5046,7 @@ int stmmac_dvr_probe(struct device *device,
                dev_info(priv->device, "TSO feature enabled\n");
        }
 
-       if (priv->dma_cap.sphen) {
+       if (priv->dma_cap.sphen && !priv->plat->sph_disable) {
                ndev->hw_features |= NETIF_F_GRO;
                priv->sph = true;
                dev_info(priv->device, "SPH feature enabled\n");
index b56e1dedcf2fd4bbfc7865f21a8224c0ca1bfee0..40df88728a6f44fe01ee28e04c95d38c5cd24d09 100644 (file)
@@ -203,5 +203,6 @@ struct plat_stmmacenet_data {
        bool vlan_fail_q_en;
        u8 vlan_fail_q;
        unsigned int eee_usecs_rate;
+       bool sph_disable;
 };
 #endif